实验一 离散时间系统的时域分析
一、实验目的
1. 运用MATLAB仿真一些简单的离散时间系统,并研究它们的时域特性。
2. 运用MATLAB中的卷积运算计算系统的输出序列,加深对离散系统的差分方程、冲激响应和卷积分析方法的理解。
二、实验原理
离散时间系统其输入、输出关系可用以下差分方程描述:
当输入信号为冲激信号时,系统的输出记为系统单位冲激响应
N?dkk?0y[n?k]?M?k?0pkx[n?k]?[n]?h[n],则系统响应为如下的卷积计算式:
y[n]?x[n]?h[n]?m????x[m]h[n?m]
? 当h[n]是有限长度的(n:[0,M])时,称系统为FIR系统;反之,称系统为IIR系统。在MATLAB中,可以用函数y=Filter(p,d,x) 求解差分方程,也可以用函数 y=Conv(x,h)计算卷积。 例1
clf; n=0:40; a=1;b=2; x1= 0.1*n;
x2=sin(2*pi*n); x=a*x1+b*x2; num=[1, 0.5,3]; den=[2 -3 0.1];
ic=[0 0]; %设置零初始条件
y1=filter(num,den,x1,ic); %计算输入为x1(n)时的输出y1(n) y2=filter(num,den,x2,ic); %计算输入为x2(n)时的输出y2(n) y=filter(num,den,x,ic); %计算输入为x (n)时的输出y(n) yt= a*y1+b*y2; %画出输出信号 subplot(2,1,1) stem(n,y);
ylabel(‘振幅’);
title(‘加权输入a*x1+b*x2的输出’);
subplot(2,1,2) stem(n,yt);
ylabel(‘振幅’);
title(‘加权输出a*y1+b*y2’);
(一)、线性和非线性系统
对线性离散时间系统,若y1(n)和y2(n)分别是输入序列x1(n)和x2(n)的响应,则输入
x(n)?ax1(n)?bx2(n)的输出响应为y(n)?ay1(n)?by2(n),即符合叠加性,其中对任意
常量a和b以及任意输入x1(n)和x2(n)都成立,否则为非线性系统。 (二)、时不变系统和时变系统
对离散时不变系统,若y1(n)是x1(n)的响应,则输入x(n)=x1(n-n0)的输出响应为y(n)=y1(n-n0),式中n0是任意整数。该输入输出关系,对任意输入序列及其相应的输出成立,若对至少一个输入序列及其相应的输出序列不成立,则系统称之为时变的。 (三)、线性卷积
假设待卷积的两个序列为有限长序列,卷积运算符在MATLAB中可 命令conv实现。例如,可以把系统的冲激响应与给定的有限长输入序列进行卷积,得到有限长冲激响应系统的输出序列。下面的MATLAB程序实现了该方法。 例2
clf;
h=[3 2 1 -2 1 0 -4 0 3];%冲激 x=[1 -2 3 -4 3 2 1 ]; %输入序列 y=conv(h,x); n=0:14; stem(n,y);
xlabel(‘时间序号n’);ylabel(‘振幅’); title(‘用卷积得到的输出’);grid;
三、实验内容与步骤
1. 假定一因果系统为
y(n)-0.4y(n-1)+0.75y(n-2)=2.2403x(n)+2.4908x(n-1)+2.2403x(n-2) 用MATLAB程序仿真该系统,输入三个不同的输入序列:
??0.1n),x2(n)?cos(2??0.4n),x?2x1(n)?3x2(n) x1(n)?cos2(计算并并显示相应的输出y1(n), y2(n)和y(n)。
2. 用MATLAB程序仿真步骤1给出的系统,对两个不同的输入序列x(n)和x(n-10),计算
并显示相应的输出序列y3(n)和y4(n)。
3.用MATLAB程序仿真计算下列两个有限长序列的卷积和并显示图形。
x1(n)??(n)?3?(n?1)?2?(n?2)
x2(n)?u(n)?u(n?3)
四、实验仪器设备
计算机,MATLAB软件
五、实验要求
给出理论计算结果和程序计算结果并讨论。
六、实验结果
实验1:
clf; n=0:40; a=2;b=-3;
x1= cos(2*pi*0.1*n); x2=cos(2*pi*0.4*n); x=a*x1+b*x2; den=[1, -0.4,0.75];
num =[2.2403 2.4908 2.2403];%分子系数 ic=[0 0]; %设置零初始条件
y1=filter(num,den,x1,ic); %计算输入为x1(n)时的输出y1(n) y2=filter(num,den,x2,ic); %计算输入为x2(n)时的输出y2(n)
yn=filter(num,den,x,ic); %计算输入为x (n)时的输出y(n)%画出输出信号 subplot(2,2,1) stem(n,y1); ylabel('振幅'); title('y1输出'); subplot(2,2,2) stem(n,y2); ylabel('振幅'); title('y2输出'); subplot(2,2,3) stem(n,yn); ylabel('振幅'); title('yn输出');
实验2: clf;
n=0:40;n1=0:50;
a=2;b=-3;
x1= cos(2*pi*0.1*n); x2=cos(2*pi*0.4*n); x3=a*x1+b*x2;
x4=[zeros(1,10), x3]; den=[1, -0.4,0.75];
num=[2.2403 2.4908 2.2403]; ic=[0 0]; %设置零初始条件 y3=filter(num,den,x3,ic);
y4=filter(num,den,x4,ic);%计算输入为x (n)时的输出y(n) %画出输出信号 subplot(2,1,1) stem(n,y3); ylabel('振幅'); title('yn输出'); subplot(2,1,2) stem(n1,y4); ylabel('振幅'); title('y1输出');
实验3: clf;
x=[1 3 2];%冲激
u=[1 1 1]; %输入序列 y=conv(u,x); n=0:4; stem(n,y);
xlabel('时间序号n');ylabel('振幅'); title('用卷积得到的输出');grid;
实验二(1) 离散时间信号的DTFT
一、实验目的
1. 运用MATLAB理解Z变换及其绘制H(z)的零极点图。 2. 运用MATLAB计算逆Z变换。
二、实验原理
(一)、MATLAB在ZT中的应用。
线性时不变离散时间系统的冲激响应h(n)的z变换是其系统函数H(z), 在MATLAB中可以利用性质求解Z变换,例如可以利用线性卷积求的Z变换。若H(z)的收敛域包含单位圆,即系统为稳定系统,即系统在单位圆上z?ej?处计算的是系统的频率响应。
(二)、逆Z变换
Z变换对于分析和表示离散线性时不变系统具有重要作用。但是在MATLAB中不能直接计算Z变换,但是对于一些序列可以进行逆Z变换。
已知序列的Z变换及其收敛域, 求序列称为逆Z变换。 序列的Z变换及共逆Z变换表示如下:
X(z)??x(n)z?n,Rx??z?Rx?n???
1n?1x (ndzR x? ) ? ? c X ( z ) z , c ? ( , R x ? )
2?j?通常,直接计算逆Z变换的方法有三种:围线积分法、长除法和部分分式展开法。在实际中,直接计算围线积分比较困难,往往不直接计算围线积分。由于序列的Z变换常为有理函数,因此采用部分分式展开法比较切合实际,它是将留数定律和常用序列的Z变换相结合的一种方法。
设x(n)的Z变换X(z)是有理函数,分母多项式是N阶,分子多项式是M阶,将X(z)展成一些简单的常用的部分分式之和,通过常用序列的Z变换求得各部分的逆变换,再相加即得到原序列x(n)。在MATLAB中提供了函数residuez来实现上述过程,调用格式如下:
[R,P,K]= residuez(B,A)
其中B、A分别是有理函数分子多项式的系数和分母多项式的系数,输出R是留数列向量,P是极点列向量。如果分子多项式的阶数大于分母多项式的阶数,则K返回为常数项的系数。
三、实验内容与步骤
选做一个实验:
1、.运行下面程序并显示它,验证离散时间傅立叶变换DTFT的时移性。
已知两个线性时不变的因果系统,系统函数分别为 H1(z)?1?z?N1?z?N,H2(z)? N?N1?az分别令N=8,a=0.8,计算并图示这两个系统的零、极点图及幅频特性。 程序: