资源描述
线性时不变系统的时域分析
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+下限2
ny_min=min(nx)+min(nh);
% 上限=上限1+上限2
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)]);
结果显示如图2-1所示。
图2-1 例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)
一般来说,对求解可能是复杂的。然而,当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=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;
% 连续信号的近似
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];
% 连续信号及其分段常数函数的波形绘制
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([ny_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所示。从图中可以看出,当抽样间隔缩小后,得到的卷积的数值近似更加接近于理想情况,实际中只要取较小的间隔即可利用离散卷积来对连续卷积进行数值近似。本例给出的是两个有限长序列的卷积,若实际序列的长度很长时,一般将长序列进行分段,有关分段卷积的计算问题将会在“数字信号处理”课程中详细讨论。
图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+下限2
ny_min=min(nx)+min(nh);
% 上限=上限1+上限2
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)]);
2.,
nx=0:3;x=ones(1,length(nx));
nh=0:9;h=0.8.^nh.*ones(1,length(nh));
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)]);
展开阅读全文