1、线性时不变系统的时域分析2.1 离散卷积MATLAB提供了conv函数可用来计算下面的卷积和 (2-1)这里假设和都是有限长序列。如果仅在区间内为非零,仅在区间内为非零,那么就仅在区间内为零值。conv函数具体用法如下:n C = conv(A, B) 计算序列A、B的卷积,C为卷积向量,其长度为length(A)+length(B)-1。例2-1:已知,编程计算卷积。MATLAB代码如下:nx=0:9;x=ones(1,length(nx);nh=0:4;h=ones(1,length(nh);y=conv(x,h);% 下限=下限1+下限2ny_min=min(nx)+min(nh);%
2、上限=上限1+上限2ny_max=max(nx)+max(nh);ny=ny_min:ny_max;subplot(3,1,1);stem(nx,x);xlabel(n);ylabel(x(n);axis(ny_min ny_max 0 max(x);subplot(3,1,2);stem(nh,h);xlabel(n);ylabel(h(n);axis(ny_min ny_max 0 max(h);subplot(3,1,3);stem(ny,y);xlabel(n);ylabel(x(n)*h(n);axis(ny_min ny_max 0 max(y);结果显示如图2-1所示。图2-1
3、例2-1结果图2.2 连续时间卷积的数值近似信号和LTI系统的单位冲激响应的卷积定义为 (2-2)为了用MATLAB向量近似在这个积分中的连续函数,要用到分段常数函数。分段常数函数的卷积产生一个收敛到原连续时间信号卷积的表达式。令为宽度为,高度为1,以t=0为中心的矩形脉冲,如图2-2所示,即 (2-3)图2-2 的波形图一个函数可以用分段函数近似,该由一串高度为,其中k为整数,相距的矩形脉冲所组成 (2-4)如图2-3所示。当时,在极限情况下一大类函数都有。图2-3 和的波形图类似地,也能近似为 (2-5)式(2-2)的卷积积分就可近似表示为分段常数信号的卷积 (2-6)一般来说,对求解可能
4、是复杂的。然而,当t取的整数倍时,求这个卷积值是很简单的,所以将计算这些时刻上的输出,即。 (2-7)从式(2-7)可以看出,可以利用的抽样序列x以及的抽样序列h得到连续卷积的数值近似,具体算法如下: y=conv(x,h)*dt % dt为近似矩形脉冲的宽度即抽样间隔例2-2:采用不同的抽样间隔值,用分段常数函数近似与的卷积,并与卷积的解析表达式进行比较。分析:将抽样间隔用dt表示,首先得到两个连续信号的样值,利用y=conv(x,h)*dt即可得到所求的卷积近似。例题中将同时画出连续信号和离散信号的对比波形。MATLAB代码如下:% 有限长信号的时间范围tx_start=0;tx_end=
5、1;th_start=0;th_end=pi;% 近似矩形脉冲的宽度即抽样间隔dt=0.05;% 序列的长度和时间位置标号Nx=fix(tx_end-tx_start)/dt);Nh=fix(th_end-th_start)/dt);nx=fix(tx_start/dt)+(0:Nx-1);nh=fix(th_start/dt)+(0:Nh-1);% 近似脉冲的高度或样值x=ones(1,Nx);h=sin(nh*dt);% 连续卷积近似y=dt*conv(x,h);ny_min=min(nx)+min(nh);ny_max=max(nx)+max(nh);ny=ny_min:ny_max;%
6、 连续信号的近似dt_ideal=0.001;tx=linspace(tx_start,tx_end,1000);x_ideal=ones(1,length(tx);th=linspace(th_start,th_end,1000);h_ideal=sin(th);t1=0:dt_ideal:1-dt_ideal;t2=1:dt_ideal:pi-dt_ideal;t3=pi:dt_ideal:pi+1;t=t1 t2 t3;y1=1-cos(t1);y2=cos(t2-1)-cos(t2);y3=cos(t3-1)+1;y_ideal=y1 y2 y3;% 连续信号及其分段常数函数的波形绘制
7、subplot(3,1,1); bar(nx*dt,x,1);colormap(cool);hold on;handle1=plot(tx,x_ideal,r);xlabel(t);ylabel(x(t);set(handle1,LineWidth,2);axis(ny_min*dt ny_max*dt 0 max(x)*1.1);subplot(3,1,2);bar(nh*dt,h,1);colormap(cool);hold on;handle2=plot(th,h_ideal,r);xlabel(t);ylabel(h(t);set(handle2,LineWidth,2);axis(n
8、y_min*dt ny_max*dt 0 max(h)*1.1);subplot(3,1,3);bar(ny*dt,y,1);colormap(cool);hold on;handle3=plot(t,y_ideal,r);xlabel(t);ylabel(y(t);set(handle3,LineWidth,2);axis(ny_min*dt ny_max*dt 0 max(y)*1.1);当近似矩形脉冲的宽度(或抽样间隔)分别为和时的MATLAB执行结果如图2-4和图2-5所示。从图中可以看出,当抽样间隔缩小后,得到的卷积的数值近似更加接近于理想情况,实际中只要取较小的间隔即可利用离散卷积
9、来对连续卷积进行数值近似。本例给出的是两个有限长序列的卷积,若实际序列的长度很长时,一般将长序列进行分段,有关分段卷积的计算问题将会在“数字信号处理”课程中详细讨论。图2-4 例2-2当时的卷积结果图图2-5 例2-2当时的卷积结果图习题:计算下列信号和的卷积和。1.; 2., .答案1.; nx=0:9;x=ones(1,length(nx);nh=0:4;h=ones(1,length(nh);y=conv(x,h);% 下限=下限1+下限2ny_min=min(nx)+min(nh);% 上限=上限1+上限2ny_max=max(nx)+max(nh);ny=ny_min:ny_max;
10、subplot(3,1,1);stem(nx,x);xlabel(n);ylabel(x(n);axis(ny_min ny_max 0 max(x);subplot(3,1,2);stem(nh,h);xlabel(n);ylabel(h(n);axis(ny_min ny_max 0 max(h);subplot(3,1,3);stem(ny,y);xlabel(n);ylabel(x(n)*h(n);axis(ny_min ny_max 0 max(y); 2., nx=0:3;x=ones(1,length(nx);nh=0:9;h=0.8.nh.*ones(1,length(nh);
11、y=conv(x,h);ny_min=min(nx)+min(nh);ny_max=max(nx)+max(nh);ny=ny_min:ny_max;subplot(3,1,1);stem(nx,x);xlabel(n);ylabel(x(n);axis(ny_min ny_max 0 max(x);subplot(3,1,2);stem(nh,h);xlabel(n);ylabel(h(n);axis(ny_min ny_max 0 max(h);subplot(3,1,3);stem(ny,y);xlabel(n);ylabel(x(n)*h(n);axis(ny_min ny_max 0 max(y);