实验二 离散时间系统的表达及计算
一、 实验目的
1. 掌握离散系统的性质、输入输出关系及卷积运算; 2. 掌握离散系统常系数线性差分方程的解法。 二、 实验原理
一个离散时间系统在数学上的定义是将输入序列x(n)映射成输出序列y(n)的唯一性变 换或运算。它的输入是一个序列,输出也是一个序列,其本质是将输入序列转变成输出序列的一个运算。在数字信号处理中,通常研究的离散系统大都为LSI系统。 三、 实验内容
1.求两个序列的卷积(离散线性卷积)
对于一个LSI系统,设其输入序列为x(n)?u(n)?u(n?10),其中?5?n?50。系统为单位冲
?h(n)?0.9n*u(n),编程求出输出序列,并画出图形。 激响应
提示:输出序列应是输入序列和系统单位冲激相应序列的卷积,在Matlab中可用conv函数来实现两个序列的卷积。但是使用conv函数求卷积时,两序列卷积后的输出序列的下标不是任意的(具体是多少,查函数),所以需要自己构造下标。 n=-5:50;
u1=stepseq(0,-5,50);u2=stepseq(10,-5,50); x=u1-u2; h=((0.9).^n).*u1; [y,ny]=conv1(x,n,h,n); stem(ny,y);
function[x,n]=stepseq(n0,n1,n2); if nargin~=3
disp('Usage:Y=stepseq(n0,n1,n2)'); elseif((n0
error('arguments?must?satisfy?n1<=n0<=n2');
End;
n=[n1:n2];x=[(n-n0)>=0];
function[y,ny]=conv1(x,nx,h,nh) if nargin~=4
disp('Usage:Y=conv_m(x,nx,h,nh)'); return; end;
nyb=nx(1)+nh(1); nye=nx(length(x))+nh(length(x)); ny=[nyb:nye]; y=conv(x,h);
76543210-20020406080100
2.求两个序列的卷积(离散周期卷积)
已知序列x(n)?{1,0,1,2,1},y(n)?{1,1,0,1,2},计算它们的周期卷积。
提示:将x(n)和y(n)的主值序列x(n)和y(n)作线性卷积,然后再将线性卷积序列以N为周期进行周期延拓。 clear all;
x=[1,0,1,2,1]; y=[1,1,0,1,2]; z=conv(x,y); m=0:4;
h=[z(6:9),0]; h1=h+z(1:5); h2=[h1 h1 h1]; stem(h2)
~~~~6543210051015
3.已知LSI系统的差分方程为:y(n)?y(n?1)?0.9y(n?2)?x(n),其中?20?n?100 求单位冲激响应h(n),并画出图形。
提示:可以使用filter函数来完成,其调用格式为H?filter(b,a,x),注意b,a,x参数都代表什么,如何设置。 clear all
b=[1]; a=[1 -1 0.9]; n=-20:100; N=120;
x=[zeros(1,20),1,zeros(1,100)]; y=filter(b,a,x); stem(n,y); axis([-20 100 -2 2]);
21.510.50-0.5-1-1.5-2-20020406080100
4.已知LSI系统的差分方程为:y(n)?y(n?1)?0.9y(n?2)?x(n),其中?20?n?100 求单位阶跃响应g(n),并画出图形。
提示:可以使用filter函数来完成,其调用格式为H?filter(b,a,x),注意b,a,x参数都代表什么,如何设置。 b=[1]; a=[1 -1 0.9]; N=120; n=-20:100;
x=[zeros(1,20),1,ones(1,100)]; g=filter(b,a,x); stem(n,g);
2.521.510.50-20020406080100
思考题
1. conv函数来实现两个序列的卷积,其默认下标为?(10分) 2. 离散线性卷积与离散周期卷积的区别?(20分) 3. 解差分方程时,a、b分别代表什么?(10分)
当差分方程为y(n?1)?10/3y(n)?y(n?1)?x(n)时,a、b分别为多少? 4. 解释filter函数?(10分)
实验三 z变换及反变换
一.实验目的
1.通过Matlab编程,熟悉z变换定义及逆z变换常用方法,加深对z变换性质及其收敛域 的理解;
2.通过Matlab编程实现离散信号及系统的z域分析; 3.掌握利用Matlab编程求解差分方程的方法。 二.实验原理
z变换性质、求逆z变换的方法、系统的z域表示方法及差分方程的求解方法。 三.实验内容
1. z正变换:已知序列x1=[1,0,5,6],其中0?n?3;与x2=[1,3,5,2],其中,0?n?3,求其卷积信号x=x1*x2的z变换。
提示:例将序列x1进行Z变换,则根据公式 ?[x1(n)]??x1(n)?z?n?x1(0)?z?0?x1(1)?z?1?x1(2)?z?2?x1(3)?z?3 n?03 ?1?z?0?0?z?1?5?z?2?6?z?3(与序列x1比较) 也就是说,没必要在Matlab命令窗口中显示出完整序列z变换的表达式,通过序列的位置信息和该位置信息上所对应的序列值,即可在报告中将该序列的z变换写出来。 clear all
x1=[1,0,5,6];x2=[1,3,5,2]; syms z;x=conv(x1,x2); s=0; for n=1:length(x) s=s+x(n)*z^(-n+1); End;s
x = 1 3 10 23 43 40 12 s = 3/z + 10/z^2 + 23/z^3 + 43/z^4 + 40/z^5 + 12/z^6 + 1
?12?1X(z)?z?2?3zX(z)?2z?4z?3?5z2. z反变换:已知1与2,求X3(z)?X1(z)?X2(z)的逆z