#编个MATLAB理解:这两个公式学过信号与系统的一定知道,这就是卷积。
一开始我也不懂,看着上面2个复杂的公式,一脸懵然。于是我也再往上查了很多资料,试图理解到底什么是卷积。网上的资料也很多,中文的英文的我都有看过。慢慢的我懂了。
其实卷积很简单,就是
求和
!
¶
clear;
b=[1];
a=[1 -1 0.5];
signal=[1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];%信号
y=impz(b,a,20); %系统的冲激响应
signal_conv_y=conv(signal,y);%冲激响应与信号卷积
for i=1:20 %提取冲激响应与信号卷积的前20个值,用于对比
signal_conv_y_20(i)=signal_conv_y(i);
end
x=length(y);
for i=2:x %将冲激响应右移1个单位
y_1(i)=y(i-1);
end
for i=3:x %将冲激响应右移2个单位
y_2(i)=y(i-2);
end
for i=1:x %将3个响应叠加起来
y_r(i)=y(i)+y_1(i)+y_2(i);
end
subplot(3,2,1); %绘图
stem(y);title(‘y’);
subplot(3,2,3);
stem(y_1);title(‘y_1’);
subplot(3,2,5);
stem(y_2);title(‘y_2’);
subplot(3,2,2)
stem(y_r);title(‘y_r=y+y_1+y_2’);
subplot(3,2,4)
stem(signal_conv_y_20);title(‘signal * impz’);
subplot(3,2,6)
stem(signal);title(‘signal’);
¶
将第一列的三个响应信号叠加起来就等于信号与冲激响应的卷积。
所以再回过头来看,卷积其实就是求和,而且这个求和很简单。只是这个求和表达式有点复杂而已。所以用*来代替简化表达式。
当然使用卷积是有前提的,那就是:
只有线性时不变系统才能导出卷积公式。
因为冲激响应要乘以某一时刻的信号强度,所以在求和前还有乘积,这就使式子变得复杂。在上面的MATLAB实验中,所有的信号强度都是1,所以好像只是3个冲激响应的求和,其实三个冲激响应是有乘以强度1的。
更进一步,稍作修改,改变下信号的形状,重新实验:
注意到y_6的值是冲激响应的3倍。
这是离散的情况,连续的情况则把求和变为积分。
没有评论:
发表评论
谢谢您的留言^_^