为什么我不能让卷积在MATLAB中正常工作?

时间:2014-10-23 01:59:01

标签: matlab convolution

MATLAB中的卷积信号每次都会产生意外的结果。以下面的代码为例,我尝试将rect函数与自身进行卷积:

clc

clear all

x=-5:.01:5;

y=rectangularPulse(x);

C=conv(y,y);

plot(C)

生成三角函数是正确的,但它应该以0为中心,而不是1000,幅度应该是1,而不是100.我确定这只是对{{1}的简单误解函数在MATLAB中工作;如果有一种方法可以产生一个三角形函数,从-1到1的幅度为1,请告诉我如何操作。

1 个答案:

答案 0 :(得分:2)

这里的部分混淆是你正在处理的信号y是离散的,其样本在0.01中间隔x。另外CONV似乎为多项式乘法提供双重任务。来自帮助文档:

  

如果u和v是多项式系数的向量,则对它们进行卷积相当于将两个多项式相乘。

Convolution涉及在相交曲线下滑动时计算相交曲线下方的区域。 CONV通过简单地将重叠的采样点相乘来实现其离散版本,并且基本上假设样本之间的距离值为1(即,矩形条带的宽度接近曲线下面的区域)。要获得真正的卷积,您必须按照0.01的样本间距缩放得到的近似区域。此外,您需要使用'same'参数提取卷积的中心部分,以便您可以将结果与x进行对比,如下所示:

C = 0.01.*conv(y, y, 'same');
plot(x, C);

enter image description here