☐例2.6:给出以下两个序列: x(n)-[3,11,7,0,-1,4,2],-3≤n≤3;h(n)=[2,3,0,-5,2,11,-1≤n≤4 试求其卷积y(n)=x(n)米h(n) 解:在图2.7中给出了四个图。上左图示出原始序列x(k)和五()。上右图示出x(k)和 把h(k)折叠后的(-k)。下左图给出x()和把h(k)折叠并移位-1后的h(-1-k)。于 是: x()(-1-k)=3x(-5)+1x0+7x3+0×2=6=(-) 下右图给出x(k)和把h(k)折叠并移位2后的h(2-)。因而得出: ∑x(k)h(2-k)=11×1+7×2+0×(-5)+(-1)×0+4×3+2×2=41=y(2) 这样我们得出了y(n)的两个值。y()的其他值也可用图解积分法类似地求得。注意y (n)的起始点(第一个非零样本点)为n=-3+(-1)=-4,而终点(未-·个非零点)为 n=3+4=7。完整的输出为: y(n)=16,31,47,6,-51,-5,41,18,-22,-3,8,2} 希望学生来校验上述结果。注意产生的序列y(n)比x(n)和h(n)两个序列都要长。 MATLAB实现 如果任意序列是无限长度的,就不能用MATLAB来直接计算卷积。MATLAB确实提供 了一个内部函数conv来计算两个有限长度序列的卷积。conv函数假定两个序列都从n=0 开始。调用如下: >>y=conv(x,h) 例如,要求例2.5中的卷积,我们可用: >>x=[3,11,7,0,-1,4,2]; >>h=[2,3,0,-5,2,1]: >y=conv(x,h) y= 631476-51-54118-22-382 21
xk)和h() xk)和h(-k) 10 Q实线:x应线: 10 ?实猛班线: 5 5 ● 8 0 0 是西 5 5 5 0 5 0 k)和h(-1-k) )和h2-k) 10 Q实线X应线: 10 Q实线:应线: 5 5 0 0 8n=2 5 2 5 图2.7例2.6的图解卷积 以得到y(n)的正确值。然而,如果序列具有任意基底,函数cov既不给出也不接受任何 时间信息。需要知道什么才能得到y(n)的起点和终点呢?给出有限序列x(n)和h(n),不 难求出这两个点,令 {x(n);nh≤n≤nxe}放{h(n);nhb≤h≤ncf 为有限序列。参考例2.6,可得到y()的起点和终点分别为: nb=nxb+nb及nr=ne+nhe 将函数conv稍加扩展为函数con'_m,它可以对任意基底的序列求卷积。程序如下: function「y,ny」=conv.m(x,nx,h,nh) %信号处理的改进卷积程序 % [y,ny]conv_m(x,nx,h,nh) %[v,ny]=卷积结果 %[x,nx」=第一个信号 张[h,nh]=第二个府号 哦 nyb=nx(1)+nh(1);nyc=nx(length(x))+nh(length(h)); ny =nyb:nye]; 22
y=conv(x,h); 口例2.7用conv_m求例2.6中的卷积。 解:MATLAB程序 >>x=[3,11,7,0,-1,4,2];nx=[-3:3]; >>h=[2,3,0,-5,2,1];ny=[-1:4]; >>[y,ny]conv_m(x,nx,h,nh) y= 631476-51-54118-22-382 ny -4-3-2-101234567 因而和例2.6一样, y(n)=16,31,47,6,-51,-5,41,18,-22,-3,8,2 在MATLAB中还有一种方法可用来求卷积。这个方法利用了矩阵-向量相乘的算法,我 们将在习题2.13中探讨。 再谈序列相关: 如果我们把卷积运算和例2.6中两序列的相关运算作一比较,可以看到非常相似。互相 关可以写成如下形式: Ta(1)=y(l)*x(-) 自相关可以写成如下形式: r(l)=x(1)*x(-1) 由此如果序列具有有限长度的话,这些相关可以用cov函数来求。 ☐例2.8在本例中,我们将演示互相关序列的应用。令 x(n)=[3,11,7,0,-1,4,2] 为一原型序列,令y()为x(n)加入噪声干扰并移位后的序列: y(n)=x(n-2)+o(n) 其中w(n)为具有零均值和单位方差的高斯序列。计算x(n)和y(n)之间的互相关。 23
解:由y(n)的结构可以看出它“相似于”x(n一2),因而它们之间的相关应该在1=2处显 示出最强。为了用MATLAB测试出这一点,用两个不同的噪声来计算其互相关。 %噪声序列】 >>x=[3,11,7,0,-1,4,2];nx=[-3:3]; %给定信号x(n) >>[y,ny]=sigshift(x,nx,2) %得到x(n-2) >>w=randn(1,length(y));nw ny; %产生w(n) >[y,ny]sigadd(y,ny,w,nw); %得到y(n)=x(n-2)+w(n) >[x,nx]sigfold(x,nx); %得到x(-n) >>[rxy,nrxy]=conv_m(y,ny,x,nx); %互相关 >subplot(1,1,1),subplot(2,1,1);stem(nrxy,rxy) >>axis([-5,10,-50,250]);xlabel('迟延量1') >>ylabel('rxy);title('噪声序列】的互相关') % %噪声序列2 >>x=[3,11,7,0,-1,4,2];nx=[-3:3]: %给定x(n) >>[y,ny]=sigshift(x,nx,2); %得到x(n-2) >w=randn(1,length(y));nw ny; %产生w(n) >[y,ny]=sigadd(y,ny,w,nw); %得到y(n)=x(n-2)+w(n) >[x,nx]sigfold(x.nx); %得到x(-n) >[rxy,nrxy]=conv_m(y,ny,x,nx); %互相关 >subplot(2,1,2);stem(nrxy,rxy) >>axis([-5,10,-50,250]);xlabel('迟延量1') >>ylabel('rxy');title('噪声序列2的互相关) 从图2.8我们看到互相关的峰值确实在1=2处。这说明y(n)和x()移位2后相似。 这个方法可以在雀达信号处理中用以对目标进行识别和局部化。 要注意MATLAB的信号处理I工具箱中也提供了,·个称为xcor的函数来进行序列的相 关计算。它的最简单的形式为: >xcorr(x,y) 用以计算向量x和y之问的五相关。而 >xcorr(x) 则用以计算向量x的自相关。在MATL.AB学生版中没有这个函数。它产生的结果和正 确使用conv_m所得结果相同。不过,XCOTT函数不能像conv_m函数那样提供时间(或迟延) 信息,必须辅以其他手段。因此我]还是强调应用cov_m函数。 24
噪声序列1的互相关 200 ?极大值 空100 09 Q 迟延量 4 -2 0 2 4 6 噪声序列2的互相关 令极大值 200 空100 91R 迟延量 2 6 图2.8用两个不同的噪声实现求出的互相关序列 差分方程 LTI离散系统也能用下列形式的线性长系数差分方程来描述: aky(n-k)= bax(n-m),Yn (2,18) 0 如果a,w≠0,则此差分方程是N阶的。本方程描述了根据输人和以前的输出来计算当前 输出的一个递推方法。实际上这个方程是按时间向前推算的,从n=-∞到n=的。因此本 方程的另一个形式为: y(n)= 之bn(n-m)-2ay(n-k) (2.19) 这个方程的解可以写成 y(n)=ya(n)+yp(n) 其通解部分yH(n)为: 25