首页 > 其他分享 >数字信号||离散序列的基本运算(1)

数字信号||离散序列的基本运算(1)

时间:2024-07-24 10:26:25浏览次数:10  
标签:subplot tn 运算 数字信号 离散 信号 序列 n1

实验一  离散序列的基本运算

一、实验目的

(1)了解常用的时域离散信号及其特点。

(2)掌握MATLAB产生常用时域离散信号的方法。

二、实验涉及的MATLAB子函数

1.axis

功能:限定图形坐标的范围。

调用格式:axis([x1,x2,y1,y2]);在横坐标起点为x1、终点为x2,纵坐标起点为y1、终点为y2的范围内作图。

2.length

功能:取某一变量的长度(采样点数)。

调用格式:N=length(n);取变量n的采样点个数,赋给变量N。

3.real

功能:取某一复数的实部。

调用格式:real(h);取复数h的实部。

x=real(h);取复数h的实部,赋给变量x。

4.imag

功能:取某一复数的虚部。

调用格式:imag(h);取复数h的虚部。

y=imag(h);取复数h的虚部,赋给变量y。

5.sawtooth

功能:产生锯齿波或三角波。

调用格式:x=sawtooth(t);类似于sin(t),产生周期为2p,幅值从-1到+1的锯齿波。

x=sawtooth(t,width);产生三角波,其中width(0<width≤1,为标量)用于确定最大值的位置。当width=0.5时,可产生一对称的标准三角波;当width=1时,将产生锯齿波。

6.square

功能:产生矩形波。

调用格式:x=square(t);类似于sin(t),产生周期为2p,幅值为±1的方波。

x=square(t,duty);产生指定周期的矩形波,其中duty用于指定脉冲宽度与整个周期的比例。

7.rand

功能:产生rand随机信号。

调用格式:

x=rand(n,m);用于产生一组具有n行m列的随机信号。

三、实验原理

1.时域离散信号的概念

  在时间轴的离散点上取值的信号,称为离散时间信号。通常,离散时间信号用x(n)表示,其幅度可以在某一范围内连续取值。

  由于信号处理所使用的设备和装置主要是计算机或专用的信号处理芯片,均以有限的位数来表示信号的幅度,因此,信号的幅度也必须“量化”,即取离散值。我们把时间和幅度上均取离散值的信号称为时域离散信号或数字信号。

在MATLAB语言中,时域的离散信号可以通过编写程序直接生成,也可以通过对连续信号等间隔抽样获得。

  另外,抽样得到的离散信号只有在一定的抽样条件下,才能反映原连续时间信号的基本特征。

四、实验任务

(1)阅读并编写例题程序,理解每一条语句的含义。

(2) 列写调试通过的实验程序,打印或描绘实验程序产生的曲线图形。

改变例题中的有关参数(如信号的频率、周期、幅度、显示时间的取值范围、采样点数等),观察对信号波形有何影响。

2.用MATLAB生成离散信号须注意的问题

1)有关数组与下标

MATLAB中处理的数组,将下标放在变量后面的小扩号内,且约定从1开始递增。例如x=[5,4,3,2,1,0],表示x(1)=5,x(2)=4,x(3)=3,x(4)=2,x(5)=1,x(6)=0。

要表示一个下标不由1开始的数组x(n),一般应采用两个矢量,如:

n=[-3:5];

x=[1,-1,3,2,0,-2,-1,2,1];

这表示了一个含9个采样点的矢量。n为一组时间矢量,对应x有:x(-3)=1,x(-2)=-1,x(-1)=3,…,x(5)=1,如图2-1所示。

图2-1 基本的离散时间序列

  1. 信号的图形绘制
  2. 从本质上讲,MATLAB及其任何计算机语言处理的信号都是离散信号。当我们把信号的样点值取得足够密,作图时采用特殊的指令,就可以把信号处理成连续信号。
  3. 在MATLAB中,离散信号与连续信号有时在程序编写上是一致的,只是在作图时选用不同的绘图函数。
  4. 连续信号作图使用plot函数,绘制线性图;离散信号作图则使用stem函数,绘制脉冲杆图。

3.常用的时域离散信号及其程序

  常用的时域离散信号主要有单位抽样序列、单位阶跃序列、实指数序列、复指数序列、正(余)弦序列、锯齿波序列、矩形波序列以及随机序列等典型信号。

有些信号的生成方法不止一种,下面对常用的时域离散信号进行介绍。

1)单位抽样序列

  单位抽样序列的表示式为

下面的例2-1、例2-2介绍了两种不同的产生d(n)信号的方法。d(n-k)的求解在实验3中讨论。

 例2-1 用MATLAB的关系运算式来产生单位抽样序列d(n)。

MATLAB程序如下:

n1=-5;n2=5;n0=0;%在起点为n1、终点为n2的范围内,于n0处产生冲激

n=n1:n2;%生成离散信号的时间序列

x=[n==n0];%生成离散信号x(n)

stem(n,x,¢filled¢);%绘制脉冲杆图,且圆点处用实心圆表示

axis([n1,n2,0,1.1*max(x)]); %确定横坐标和纵坐标的取值范围

title(¢单位脉冲序列¢);

xlabel(¢时间(n)¢);ylabel(¢幅度x(n)¢);

n1=-5;n2=5;n0=0;%在起点为n1、终点为n2的范围内,于n0处产生冲激

n=n1:n2;%生成离散信号的时间序列

x = [n == n0];%生成离散信号x(n)

stem(n,x,'filled');%绘制脉冲杆图,且圆点处用实心圆表示

axis([n1,n2,0,1.1*max(x)]); %确定横坐标和纵坐标的取值范围

title('单位脉冲序列');

xlabel('时间(n)');

ylabel('幅度x(n)');

图2-2 例2-1、例2-2生成的d(n)

例2-2 用zeros函数和抽样点直接赋值来产生单位抽样序列d(n)

  解 MATLAB程序如下(运行结果同图2-2):

n1=-5;n2=5;k=0;       %位移为k

n=n1:n2;

nt=length(n);%求样点n的个数

nk=abs(k-n1)+1;%确定k在n序列中的位置

x=zeros(1,nt);%对所有样点置0

x(nk)=1;%对抽样点置1

下面作图部分的程序同例2-1。

2)单位阶跃序列

  单位阶跃序列的表示式为

下面用两种不同的方法产生单位阶跃序列u(n)。u(n-k)的求解在实验3中讨论。

例2-3 用MATLAB的关系运算式来产生单位阶跃序列u(n)。

解 MATLAB程序如下:

n1=-2;n2=8;n0=0;

n=n1:n2;       %生成离散信号的时间序列

x=[n>=n0]; %生成离散信号x(n)

stem(n,x,¢filled¢);

axis([n1,n2,0,1.1*max(x)]);

title(¢单位阶跃序列¢);

label(¢时间(n)¢);ylabel(¢幅度x(n)¢);

运行结果如图2-3所示。

n1=-2;n2=8;n0=0;

n=n1:n2;   %生成离散信号的时间序列

x=[n>=n0];  %生成离散信号x(n)

stem(n,x,'filled');

axis([n1,n2,0,1.1*max(x)]);

title('单位阶跃序列');

xlabel('时间(n)');

ylabel('幅度x(n)');

图2-3 例2-3、例2-4生成的u(n)

例2-4 用zeros和ones函数来产生单位阶跃序列u(n)。

  解 MATLAB程序如下(运行结果同图2-3):

n1=-2;n2=8;k=0;

n=n1:n2;

nt=length(n);        %求样点n的个数

nk=abs(k-n1)+1;%确定k在n序列中的位置

%生成离散信号x(n)。对前nk-1点置0,从nk点至n2点置1

x=[zeros(1,nk-1),ones(1,nt-nk+1)];

下面作图部分的程序同例2-3。

3)实指数序列

实指数序列的表示式为

x(n)=an 其中a为实数当|a|<1时,x(n)的幅度随n的增大而减小,序列逐渐收敛;当|a|>1时,x(n)的幅度随n的增大而增大,序列逐渐发散。

例2-5 编写产生a=1/2和a=2实指数连续信号和离散序列的程序。

  解 MATLAB程序如下:

n1=-10;n2=10;a1=0.5;a2=2;

na1=n1:0;x1=a1.^na1;

na2=0:n2;x2=a2.^na2;

subplot(2,2,1),plot(na1,x1);

title(¢实指数原信号(a<1)¢);

subplot(2,2,3),stem(na1,x1,¢filled¢);

title(¢实指数序列(a<1)¢);

subplot(2,2,2),plot(na2,x2);

title(¢实指数原信号(a>1)¢);

subplot(2,2,4),stem(na2,x2,¢filled¢);

title(¢实指数序列(a>1)¢);

运行结果如图2-4所示。

n1=-10;n2=10;a1=0.5;a2=2;

na1=n1:0;x1=a1.^na1;

na2=0:n2;x2=a2.^na2;

subplot(2,2,1),plot(na1,x1);

title('实指数原信号(a<1)');

subplot(2,2,3),stem(na1,x1,'filled');

title('实指数序列(a<1)');

subplot(2,2,2),plot(na2,x2);

title('实指数原信号(a>1)');

subplot(2,2,4),stem(na2,x2,'filled');

title('实指数序列(a>1)');

图2-4 例2-5生成|a|<1和|a|>1的实指数连续信号与离散序列

4)复指数序列

 复指数序列的表示式为

当w=0时,x(n)为实指数序列;当s=0时,x(n)为虚指数序列,即

ejwn=cos(wn)+jsin(wn)

由上式可知,其实部为余弦序列,虚部为正弦序列。

例2-6编写产生s=-0.1、w=0.6复指数连续信号离散序列的程序

解 MATLAB程序如下:

n1=30;a=-0.1;w=0.6;

n=0:n1;

x=exp((a+j*w)*n);

subplot(2,2,1),plot(n,real(x));

title(¢复指数原信号的实部¢);

subplot(2,2,3),stem(n,real(x),¢filled¢);

title(¢复指数序列的实部¢);

subplot(2,2,2),plot(n,imag(x));

title(¢复指数原信号的虚部¢);

subplot(2,2,4),stem(n,imag(x),¢filled¢);

title(¢复指数序列的虚部¢);

  运行结果如图2-5所示。

n1=30;a=-0.1;w=0.6;

n=0:n1;

x=exp((a+j*w)*n);

subplot(2,2,1),plot(n,real(x));

title('复指数原信号的实部');

subplot(2,2,3),stem(n,real(x),'filled');

title('复指数序列的实部');

subplot(2,2,2),plot(n,imag(x));

title('复指数原信号的虚部');

subplot(2,2,4),stem(n,imag(x),'filled');

title('复指数序列的虚部');

图2-5 例2-6复指数连续信号与离散序列的实部和虚部

5)正(余)弦序列

正(余)弦序列的表示式为x(n)=Umsin(w0n+q)

连续时间信号与离散时间信号的联系可由下例程序清楚地反映出来。

例2-7 已知一时域周期性正弦信号的频率为1 Hz,振幅值幅度为1 V。

在窗口上显示2个周期的信号波形,并对该信号的一个周期进行32点采样获得离散信号。试显示原连续信号和其采样获得的离散信号波形。

解 MATLAB程序如下:

f=1;Um=1;nt=2;;   %输入信号频率、振幅显示周期数

N=32;T=1/f; %N为信号一个周期的采样点数,T为信号周期

dt=T/N; %采样时间间隔

n=0:nt*N-1;%建立离散信号的时间序列

tn=n*dt; %确定时间序列样点在时间轴上的位 置

x=Um*sin(2*f*pi*tn);

subplot(2,1,1);plot(tn,x);     %显示原连续信号

axis([0nt*T1.1*min(x)1.1*max(x)]);%限定横坐标和纵坐标的显示范围

ylabel(¢x(t)¢);

subplot(2,1,2);stem(tn,x);%显示经采样的信号

axis([0nt*T1.1*min(x)1.1*max(x)]);

ylabel(¢x(n)¢);

  结果如图2-6所示。

f=1;Um=1;nt=2;%输入信号频率、振幅和显示周期数

N=32;T=1/f; %N为信号一个周期的采样点数,T为信号周期

dt=T/N;%采样时间间隔

n=0:nt*N-1;%建立离散信号的时间序列

tn=n*dt;    %确定时间序列样点在时间轴上的位置

x=Um*sin(2*f*pi*tn);

subplot(2,1,1);plot(tn,x);     %显示原连续信号

axis([ 0 nt*T 1.1*min(x) 1.1*max(x)]);%限定横坐标和纵坐标的显示范围

ylabel('x(t)');

subplot(2,1,2);stem(tn,x);%显示经采样的信号

axis([ 0 nt*T 1.1*min(x) 1.1*max(x)]);

ylabel('x(n)');

图2-6 时域连续的正弦信号与经采样获得的离散序列

6)锯齿波(三角波)序列

将sawtooth表示式中的t转换成n,且n取整数,则可以获得锯齿波或三角波序列。

例2-8 一个连续的周期性锯齿波信号频率为10 Hz,信号幅度在-1 V到+1 V之间,在窗口上显示3个周期的信号波形,用FS=150 Hz的频率对连续信号进行采样。试显示原连续信号和其采样获得的离散信号波形。

解 MATLAB程序如下:

f=10;Um=1;nt=3;  %输入信号频率、振幅和显示周期个数

Fs=150;N=Fs/f; %输入采样频率,求采样点数N

T=1/f; %T为信号的周期

 dt=T/N; %采样时间间隔

n=0:nt*N-1; %建立离散信号的时间序列

tn=n*dt;  %确定时间序列样点在时间轴上的位置

x=Um*sawtooth(2*f*pi*tn); %产生时域信号

  作图部分的程序参考例2-7。

  结果如图2-7所示。

f=10;Um=1;nt=3;  %输入信号频率、振幅和显示周期个数

Fs=150; N=Fs/f; %输入采样频率,求采样点数N

T=1/f;          %T为信号的周期

dt=T/N;     %采样时间间隔

n=0:nt*N-1; %建立离散信号的时间序列

tn = n*dt;%确定时间序列样点在时间轴上的位置

x = Um*sawtooth(2*f*pi*tn); %产生时域信号

subplot(2,1,1);plot(tn,x);     %显示原连续信号

axis([ 0 nt*T 1.1*min(x) 1.1*max(x)]);%限定横坐标和纵坐标的显示范围

ylabel('x(t)');

subplot(2,1,2);stem(tn,x);%显示经采样的信号

axis([ 0 nt*T 1.1*min(x) 1.1*max(x)]);

ylabel('x(n)');

 

注意:直接用sawtooth子函数产生的信号波形,其幅度在-1~+1之间,因此本例在程序上不用做任何处理。

图2-7 周期性锯齿波信号与其经采样获得的离散序列

7)矩形波序列

将square表示式中的t转换成n,且n取整数,则可以获得矩形信号序列。

例2-9 一个连续的周期性矩形波信号频率为5 kHz,信号幅度在0~2 V之间,脉冲宽度与周期的比例为1∶4,且要求在窗口上显示其2个周期的信号波形,并对信号的一个周期进行16点采样来获得离散信号。试显示原连续信号和其采样获得的离散信号波形。

解 MATLAB程序如下:

f=5000;nt=2;

N=16;T=1/f;

dt=T/N;

n=0:nt*N-1;

tn=n*dt;

x=square(2*f*pi*tn,25)+1;%产生时域信号,且幅度在0~2V之间

  作图部分的程序参考例2-7。

  结果如图2-8所示。

f=5000;nt=2;

N=16;T=1/f;

dt=T/N;

n=0:nt*N-1;

tn=n*dt;

x=square(2*f*pi*tn, 25)+1;%产生时域信号,且幅度在0~2V之间

subplot(2,1,1);plot(tn,x);     %显示原连续信号

axis([ 0 nt*T 1.1*min(x) 1.1*max(x)]);%限定横坐标和纵坐标的显示范围

ylabel('x(t)');

subplot(2,1,2);stem(tn,x);%显示经采样的信号

axis([ 0 nt*T 1.1*min(x) 1.1*max(x)]);

ylabel('x(n)');

注意:直接用square子函数产生的信号波形,其幅度在-1~+1之间。为使信号幅度改变为0~2 V之间,在程序上做了处理。

图2-8 周期性矩形波信号与其经采样获得的离散序列

10)rand函数

在实际系统的研究和处理中,常常需要产生随机信号。MATLAB提供的rand函数可以为我们生成随机信号。

例2-12 试生成一组41点构成的连续随机信号和与之相应的随机序列。

解 MATLAB程序如下:

tn=0:40;

N=length(tn);

x=rand(1,N);

subplot(1,2,1),plot(tn,x);

subplot(1,2,2),stem(tn,x);

  结果如图2-11所示。

tn=0:40;

N=length(tn);

x=rand(1,N);

subplot(1,2,1),plot(tn,x);

subplot(1,2,2),stem(tn,x);

 

图2-11 随机信号与随机序列

标签:subplot,tn,运算,数字信号,离散,信号,序列,n1
From: https://blog.csdn.net/m0_60469045/article/details/140645734

相关文章

  • C++ 运算符重载的注意事项
    C++的运算符重载是一种强大的特性,它允许开发者为已存在的运算符赋予新的含义,以适应特定数据类型的需求。在使用运算符重载时,需要注意以下几点:不改变运算符原有语义:运算符重载应保持运算符原有的基本含义,避免引起混淆。例如,重载加法运算符+时,应确保其结果与常规加法操作相符。......
  • java学习--运算符
    运算符算术运算符混合运算当进行多类型混合运算时,结果是参与运算的最大类型当只有byteshortintchar四种类型中任意一种或多种进行运算,结果一定是int类型关系运算位运算/逻辑运算位运算进阶 //&也支持两边是数字,转换为二进制进行每位比较,都是1则取1......
  • 计算机组成实验——运算器的设计
    要求采用原理图输入方式设计顶层文件,实现ALU与寄存器组的集成。将8位ALU和寄存器组设计文件分别进行编译,将ALU和寄存器组设计文件生成两个模块符号。新建一个原理图设计文件,调入ALU和寄存器组的符号模块,把这两个模块进行连接,加上输入端和输出端,实现二者的集成。ALU......
  • Python的运算符与条件表达式
    一、运算符Python数据是通过使用运算符来进行操作的,与数学运算符类似,主要运用于数字计算,比较大小和逻辑运算。Python中的运算符主要包括算术运算符、赋值运算符、比较运算符、逻辑运算符和位运算符。1.算术运算符算术运算符用在数字表达式中,作用和在数学中是一样的。Python......
  • 数字信号处理 实验一 系统响应及系统稳定性 免费附上机实验报告和原程序
    (1)编制程序,包括产生输入信号、单位脉冲响应序列的子程序,以及用filter函数或conv函数求解系统输出响应的主程序。程序中要有绘制信号波形的功能。(2)给定一个低通滤波器的差分方程为输入信号分别求出和的系统响应,并画出其波形。求出系统的单位脉冲响应,画出其波形。(3)给定系统......
  • Python面试题:使用NumPy进行高效数组运算
    NumPy是Python中进行高效数组运算的基础库。以下是一些示例,展示了如何使用NumPy进行高效的数组运算,包括创建数组、数组操作、数学运算以及一些高级操作。安装NumPy如果你还没有安装NumPy,可以通过以下命令进行安装:pipinstallnumpy示例代码1.创建数组import......
  • 异或运算(XOR)的可交换性证明
    异或运算(XOR)的可交换性是指:若\(a\oplusb=c\),那么有\(a\oplusc=b\)且\(b\oplusc=a\)证明:不失一般性,我们只需证明第一个等式\(a\oplusc=b\)。首先:按位异或运算有以下几个重要性质:交换律:\(a\oplusb=b\oplusa\)结合律:\(a\oplus(b\oplusc)......
  • 【保姆级讲解C语言中的运算符的优先级!】
    ......
  • 题解 B3694 数列离散化
    link简而言之,离散化就是把一个数列转化为由小到大的排名来缩小范围。离散化需要这个题不用数字本身。举个例子:-200244879914993235793离散化后就是:15243\(-2002\)最小,所以它对应\(1\)\(448799\)最大,所以它对应\(5\)实现考虑如何实现。首先由于离散化前后......
  • 位运算知识点概览
    前言计算机位运算是处理整数值的基本操作,直接在二进制位上进行操作。理解位运算的要点对于编程和优化代码非常有用。以下是位运算的主要操作和一些常见的应用:1.基本位运算操作与运算(AND)&将两个数的对应位进行逻辑与操作。例子:0101&0011=0001或运算(OR)|将两个数的对......