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,请告诉我如何操作。
答案 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);