原创 MATLAB卷积函数改进

2010-2-25 21:48 12022 12 12 分类: 软件与OS

虽然在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条评论)

登录后参与讨论
我要评论
0
12
关闭 站长推荐上一条 /2 下一条