虽然在MATLAB中我们已经有一个函数来计算两个序列的卷积——conv函数。但其中有个问题,conv函数假定了两个已知序列都是从n=0开始。我们从下面的例子来看看。
>> x = [3,11,7,0,-1,4,2];
>> nx = [-3:3];
>> h = [2,3,0,-5,2,1];
>> nh = [-1:4];
>> conv(x,h)
ans =
6 31 47 6 -51 -5 41 18 -22 -3 8 2
可见,已知的序列x和序列h都是给出了基底的,并不是从n=0开始,所以所得的结果只能说是两者卷积后的值,并不能说是两个序列卷积后得到的序列。因为结果并没有表现出基底来,也就是没有时间信息。所以我们必须对其进行改进。改后的函数定义为conv_m,如下。
function [y,ny] = conv_m(x,nx,h,nh)
nyb = nx(1) + nh(1);
nye = nx(length(x)) + nh(length(h));
ny = [nyb:nye];
y = conv(x,h);
重新计算卷积:
>> [y,ny] = conv_m(x,nx,h,nh)
y =
6 31 47 6 -51 -5 41 18 -22 -3 8 2
ny =
-4 -3 -2 -1 0 1 2 3 4 5 6 7
可以看出,不仅准确的得出了我们所谓的卷积后的值,而且也准确的得出了基底。比较两次的结果如下图。
文章评论(0条评论)
登录后参与讨论