yn(n)= 其中4,k=1,2,··,N是特征方程 =0 0 的N个根。特征方程在确定系统稳定性时是很重要的。如果这些根满足下述条件: lzk|<1,k=1,2,.,N (2.20) 则由(2.19)描述的因果系统是稳定的。特解部分y(n)由(2.18)式的行端确定。在第四 章中将讨论用z变换解差分方程的方法。 MATLAB实现 有一个称为lter的子程序专用来在给定输入和差分方程系数时求差分方程的数值解。 F程序调用的最简单形式为: y=filter(b,a,x) 其中 b=[b0,bl,.,bM];a=[a0,al,.,aN]; 是山方程(2.18)中给出的系数数组,而x则是输入序列数组。输出y和输入x的长度一 样,必领保证系数α0不为零。我们用下列例子来说明其用法。 C}例2.9给出如下差分方程: y(n)-y(n-1)+0.9y(n-2)=x(n):Vn a.计算并画出脉冲响应h(n),n=-20,·,100. b.计算并画出阶跃响应s(n),n=-20,..,100 c,由此h(n)规定的系统是否稳定? 解:由给定的差分方程可知,其系数数组为: a.MATLAB程序 >>b=[1l;a=[1,-1,0.9l; 26
>>x=impseq(0,-20,120):n=|-20:1201: >h=filter(b,a,x) >subplo(2,1,1);stem(n,h) >>axis([-20,120,-1.1,1.1」) >>title('脉冲响应');xlabel('n'):ylabel('h(n)) 脉冲响应的波形见图2.9。 b.MATLAB程序 >>x=stepseq(0,-20,I20): >>s=filter(b,a,x) >>subplot(2,1,2);stem(n,s) >>axis([-20,120,-.5,2.5]) >>title('阶跃响应');xlabel('n');ylabel('s(n)') 阶跃响应的波形见图2.9。 歌冲响应 0.5 -0.5 -20 0 20 40 60 80 100 120 粉慨响应 0 -20 20 40 60 80 100 120 n 图2.9例2.9中的脉冲响应和阶跃响应 c.为了确定系统的稳定性,我们必须对所有的n求出h(n)。虽然我们还没有介绍一种 解差分方程的方法,但可以从其脉冲响应曲线中观察到当n>120时,h()实际上为零。因 和∑Ih(n)可以用如下MATLAB程序求得: >>sum(abs(h)) ans-14.8785 27
这意味若系统是稳定的。另-·种方法是利用稳定条件(2.20),先用TLAB 的求根函 数r0ots: >z=roots(a); >magz abs(z) magz=0.9487 0.9487 因为这两个根的模都小于-一,系统是稳定的。 在前一节中,注意两个序列中只要有一个是无限长的,就不能使用co¥函数。实际上如 果有·个序列是有限长的,还是可能用MATLAB来对其卷积进行数值估计。这时应当用l- ter函数,这可从下面的例子中看到。 □例2.10我们来考虑例2.5中给出的卷积。输人是有限序列: x(n)=u(n)-u(n-10) 而球冲响应是无限序列: h(n)=(0.9)nu(n) 求y(n)=x(n)*h(n)a 解:如果由脉冲响应h(n)给出的LTI系统能用差分方程描述,则y(n)可由fter函数求 得。由h(n)的表示式 (0.9)h(n-1)=(0.9)(0.9)n-1u(n-1)=(0.9)nu(n-1) 或 h(n)-(0.9)h(n-1)=(0.9)"u(n)-(0.9)u(n-1) -(0.9)r[u(n)-u(n-1)]=(0.9)8(n) =8(n) 最后一步是因为8(n)只在n=0处非零。根据定义,h(n)是输人为8(n)时LT1系统的 输出。因此可把8(n)换成x(n),h(n)换成y(n),差分方程成为: y(n)-.0.9y(n-1)=x(n) 现在MATL.AB的filter函数以间接用来计算卷积了。 28 -。一一一一-
>>b=[1];a=[l,-0.9]: >>n=-5:50;x=stepseq(0,-5,50)-stepseq(10,-5,50); >>y=filter(b,a,x); subplot(1,1,1); >>subplot(2,1,2);stcm(n,y);ille('输出序列') >>xlabel('n'):ylabel('y(n)');axis([-5,50,-0.5,8]) 输出的波形见图2.10,它和图2.6的结果完全一样。 输出序列 6 3 2 T1门TT1T安空 10 20 30 40 50n 图2.10例2.10的输出序列 在例2,10中,脉冲响应是一个可以找到它的差分方程表达式的单边指数序列。这意味着 并非所有无限长脉冲响应都能变换成差分方程的。然而上述分析可以扩展到单边指数序列的 线性组合,它对应于高阶差分方程。我们将在第四章讨论这个从一种表示式转换为另一形式 的论题。 零输入和零状态响应 在数字信号处理中差分方程通常是从n=0开始按时间向前求解的。内此需要x(n)和 y(n)的初始条件才能求得n≥0处的输出。于是差分方程为: yn)=之ba(a-m-之ey(m-k:n≥0 (2.21) 三自 k-1 初妃条件为: {y(n);-N<=n<=-1}及x(n):-M<=n<=-1f (2.21)的解可写成下面的形式: y(n)=yzi(n)+yzs(n) 其中yz(n)称为零输入解,它是由初始条件(假定它存在)独立造成的解:而零状态解 29
vzs(n)则是由输人x(n)独立产生的解(假定初始条件为零)。在MATLAB中filter函数的另 种形式可以用来在给定初始条件下解差分方程。我们将在第四章说明这种形式的用法。 数字滤波器 滤波器是设汁来进行频率选择或频率分辨任务的线性时不变系统的通用名称。因此离散 时间IT1系统也称为数字滤波器。它可分为两类。 FR滤波器 如果一个LTI系统的单位脉冲响应长度有限,则此系统称为有限长度脉冲响应(或FIR) 滤波器。因此对-·个FIR滤波器,在n<n;和n>2时,h(n)=0。差分方程(2.18)中的下 列部分描述了·个因果FIR滤波器。 y(n)= bmx(n-m) (2.22) m-0 而h(0)=bo,h(1)-b1,.·,h(M)=bM。而所有其他的h(n)为0。FIR滤波器也称为非递 推或滑动平均(MA)滤波器。在MATLAB中,FIR滤波器既可用脉冲响应的值五(n)也可用 差分方程的系数{b}和}ao=1}表示。因此要实现FiR滤波器我们既可用conv(x,h)函数 (及我们讨论过的其修改形式)或fter(b,1,x)函数。需要注意这两种方法的输出有一个差 别。由conv(x,h)函数产生的输出的长度比x(n)和h(n)序列都要长。另一方面,由filter (b,1,x)函数产生的输出序列的长度拾好与x()序列的长度相同。实际上(特别是为处理信 号),我们鼓励使用filter函数。 IR滤波器 如果一个LTI系统的脉冲响应具有无限长度,测此系统称为无限长脉冲响应(或IR)滤 波器。差分方程(2.18)的下列部分: ar(n-k)=x(n) (2.23) =0 描述了个递推滤波器,其中输出y()可用其以前算得的值递推计算而得,所以也称为自回 归(AR)滤波器。这样的滤波器的脉冲响应是无限长的因而表示为IR滤波器。通用方程(2. 18)也抽述了一个IIR滤波器。它有两个部分:一个AR部分和-·个MA部分。这样的滤波器 称为白回归滑动平均,或ARMA滤波器。在MATLAB中IIR滤波器是用差分方程的系数 {bm!和}a:}来描述并由filter(b,a,x)来实现的。 习 题 题2.1用MATT,AB产生并画出(用s1em函数)下列序列的样本: a.x1(n)=y9o(m+1[8(n-2m)-òn-2m-I],0≤n≤25. b.x2(n)=n2[u(n+5)-u(n-6)]+108(n)+20(0.5)[u(n-4)-u(n-10)]. c.x3(n)=(0.9)"cos(0.2πn+r/3),0≤h≤20. 30