基础知识
R1:序列的卷积:
c(n)=∑_(m=-∞)^∞▒〖a(m)b(n-m)〗
R2:序列的相关:
c(m)=∑_(n=-∞)^∞▒〖a(n)b(n-m)〗
Matlab计算卷积与相关
(1)详见《数字信号处理教程》第四版P53-P54,序列的卷积与相关。
(2)根据卷积定义,卷积运算分为4步:
翻褶:将b(m)以m=0的垂直轴为对称轴翻褶成b(-m);
移位:将b(-m)移位n,得到b(n-m), n>0时右移,n<0时左移;
相乘:将b(-m)与a(m)在相同的m处对应值相乘;
相加:将以上所有m处的乘积相加,这就得到一个n值下的c(n)。
对不同的n使用以上步骤,即可得到全部的c(n)值。根据该思路(不利用已有Matlab函数conv)编写卷积的Matlab实现函数。
图1 卷积过程及结果
举例:计算序列a(-1)=1,a(0)=1,a(1)=1(其他元素为零)和b(0)=2,b(1)=5,b(2)=1(其他元素为零)的卷积。计算过程和结果如图1所示。
分别利用自己编写的卷积函数与conv函数计算下列两个序列的卷积。
a(n)={-1,▁0,8,9}
b(n)={2,5,▁(-2),7,10}
(1) 利用系统自带conv函数计算卷积
function result = conv_s(x,ux,h,uh)
x_len = length(x);
h_len = length(h);
result = conv(x,h); %直接用系统自带函数conv计算得到卷积
u = ux(1)+uh(1):ux(x_len)+uh(h_len) %求下标
(2) 利用自己编写的函数计算卷积
function result = own_conv1(x,h,ux,uh)
x_len = length(x);
h_len = length(h);
%按照向量法—矩阵乘法进行卷积运算
h_set = zeros(x_len,h_len+x_len-1);
for i = 1:x_len
h_set(i,i:i+h_len-1) = h; %得到H矩阵
end
result = x*h_set; %向量相乘即完成了翻折,移位,相乘,相加四步操作得到卷积结果
u = ux(1