离散时间信号的表示与运算

实验一 离散时间信号的表示与运算

一 实验目的

1、熟悉MATLAB 的绘图函数;

2、掌握单位取样序列、单位阶跃序列、矩形序列和正余弦序列的产生方法;

3、掌握离散时间信号基本运算的MATLAB 实现;

4、掌握离散时间信号线性卷积和运算的MATLAB 实现。

二 实验设备

1、计算机

2、MA TLAB R2007a 仿真软件

三 实验原理

1)序列相加和相乘

设有序列)(1n x 和)(2n x ,它们相加和相乘如下:

)

()()()()()(2121n x n x n x n x n x n x ?=+=

注意,序列相加(相乘)是对应序列值之间的相加(相乘),因此参加运算的两个序列必须具有相同的长度,并且保证位置相对应。如果不相同,在运算前应采用zeros 函数将序列左右补零使其长度相等并且位置相对应。在MATLAB 中,设序列用x1和x2表示,序列相加的语句为:x=x1+x2;然而要注意,序列相乘不能直接用x=x1*x2,该式表示两个矩阵的相乘,而不是对应项的相乘。对应项之间相乘的实现形式是点乘“.*”,实现语句为:x=x1.*x2。 2)序列翻转

设有序列:)()(n x n y -=,在翻转运算中,序列的每个值以n=0为中心进行翻转,需要注意的是翻转过程中序列的样值向量翻转的同时,位置向量翻转并取反。MATLAB 中,翻转运算用fliplr 函数实现。设序列)(n x 用样值向量x 和位置向量nx 表述,翻转后的序列

)(n y 用样值向量y 和位置向量ny 描述。

3)序列的移位

移位序列)(n x 的移位序列可表示为:)()(0n n x n y -=,其中,00>n 时代表序列右移

0n 个单位;00

是位置向量的增减。MA TLAB 中没有固定函数实现移位运算。设序列)(n x 用样值向量x 和位置向量nx 描述移位0n 后的序列)(n y 用样值向量y 和位置向量ny 描述。 4)序列的线性卷积和

线性卷积和运算是离散时间信号的一种重要运算,两个有限长序列的线性卷积可以用conv 函数实现。设x(n)和y(n)分别用样值向量x 和y 表示,线性卷积g(n)用样值向量g 表示,则调用方式为),(y x conv g =,conv 函数并未考虑到位置向量,默认所有的序列都从n=0开始。如果把位置向量考虑在内,则需要对位置向量作额外处理。设x(n)和y(n)的位置向量分别是nx:[ns1,nf1]和ny:[ns2,nf2]表示,线性卷积的位置向量用ng:[ns3,nf3]表示。

四 实验内容

1、上机实验前,认真阅读实验原理,掌握离散时间信号表示和运算的方法;

2、掌握离散时间信号表示及运算的MATLAB 实现。 实例1:产生单位采样序列)(n δ

在MATLAB 中,函数zeros(1,N)产生一个N 个令的列向量,利用它可以实现在有限的区间上的单位采样序列。按照前面所述的方法,将下列文件输入到Command Window 窗口中。

n=0:49; %定义横轴坐标

x=zeros(1,50); %matlab 中数组下标从1开始 x(1)=1;

stem(n,x); %绘制离散序列数据 title('单位采用信号序列')

按回车键,将产生如下图所示的序列。

在MATLAB 中,函数ones(1,N)产生一个N 个1的行向量,利用它可以实现在有限区间上的单位阶跃序列。按照前面所述方法,将下列指令编辑到“exlstep.m ”文件中。 n=0:49; %定义横轴坐标

x=ones(1,50); %matlab 中数组下标从1开始 x(1)=1;

stem(n,x); %绘制离散序列数据 title('单位阶跃信号序列'3

文件编辑后保存,然后单击Debug →Run ,运行“exlstep.m ”,将产生如下图所示序列。

实例3:产生矩形阶跃序列)(R N n

其他

1n 00

1n)(R N

-≤≤???=N 在MATLAB 中,函数sign(x)产生在x 大于0时其值为1;在等于0时其值为0,在x 小于0时其值为-1。利用它可以实现窗长度为N 的矩形序列。按照前面所述方法,将下列指令编辑到“exlrectang.m ”文件中。

N=10;

n=0:49; %定义横轴坐标 x=sign(sign(N-1-n)+1);

stem(n,x); %绘制离散序列数据

title('矩形序列')

文件编辑后保存,然后单击Debug →Run ,运行“exlrectang.m ”,将产生如下图所示序列。

+∞<≤∞-=n n A n x )sin()(ω +∞

<≤∞-=n n A n y )

(cos )(ω

将下列指令编辑到“exlsincos.m ”文件中。 N=50; %采样50个点

A=1; %正余弦波的幅值为1 f=50; %信号频率为50Hz fs=500; %采样频率为500Hz n=0:N-1;

x=A*sin(2*pi*f*n/fs); %获得采样点的值 y=A*cos(2*pi*f*n/fs);

subplot(1,2,1); %子图分割函数,参数一表示列,参数二表示行, stem(n,x); %参数三表示绘图序号 title('正弦序列') subplot(1,2,2); stem(n,y);

title('余弦序列')

文件编辑后保存,然后单击Debug →Run ,运行“exlsincos.m ”,将产生如下图所示序列。

实例5:已知两个离散序列?

???

??

---==↑

3,2,1,0,1,2,3)(0

1

k k f ,?

???

??--==↑

2,1,0,1,2)(0

2k k f ,用MATLAB 绘出)()()(21k f k f k f +=的波形。源程序如下:

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

k1=-3:3;

a2=[-2,-1,0,1,2]; k2=-2:2;

k=min([k1:k2]):max([k1,k2]); f1=zeros(1,length(k)); f2=zeros(1,length(k));

f1(find((k>=min(k1))&(k<=max(k1))==1))=a1; f2(find((k>=min(k2))&(k<=max(k2))==1))=a2; f=f1+f2;

stem(k,f,'filled');

运行结果如下图所示。

实例6:已知离散序列k

k f 32)(?=,利用MATLAB 绘出其翻转信号,源程序如下: k1=-3:3; f1=2*3.^k; f=fliplr(f1); k=-fliplr(k1); stem(k,f);

运行结果如下图所示。

实例7: 已知离散信号{}3,2,1,0,1,2,3)(---=k f ,利用MA TLAB 绘出)3(+k f 波形,源程序波形如下:

a0=[-3,-2,-1,0,1,2,3]; k0=-3:3; k1=3; k=k0+k1; f=a0;

stem(k,f,'filled');

运行结果如下图所示。

实例8:已知两个离散序列?

?????==↑3,3,3,1)(0

1

k k f ,??????==↑4,3,3,2,1)(0

2k k f ,利用MATLAB 绘出原信号及其卷积)(*)()(21k f k f k f =,源程序如下:

f1=[1,3,3,3];

k1=0:3;

f2=[1,2,3,3,4]; k2=0:4;

f=conv(f1,f2); subplot(3,1,1); stem(k1,f1); ylabel('f1(k)'); subplot(3,1,2); stem(k2,f2); ylabel('f2(k)'); subplot(3,1,3);

stem(0:length(f)-1,f); xlabel('k'); ylabel('f(k)');

运行结果如下图所示。

五 实验报告要求

1、简述实验目的和实验原理;

2、编程实现实验内容,要求附上详细的源程序和清晰的截图;

3、总结实验中的主要结论。

相关主题
相关文档
最新文档