实验一 离散序列的基本运算
一、实验目的
(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 基本的离散时间序列
- 信号的图形绘制
- 从本质上讲,MATLAB及其任何计算机语言处理的信号都是离散信号。当我们把信号的样点值取得足够密,作图时采用特殊的指令,就可以把信号处理成连续信号。
- 在MATLAB中,离散信号与连续信号有时在程序编写上是一致的,只是在作图时选用不同的绘图函数。
- 连续信号作图使用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