【问题标题】:Why can't I get convolution to work properly in MATLAB?为什么我不能让卷积在 MATLAB 中正常工作?
【发布时间】:2023-03-18 13:30:01
【问题描述】:

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

clc

clear all

x=-5:.01:5;

y=rectangularPulse(x);

C=conv(y,y);

plot(C)

产生一个三角形函数是正确的,但是它应该以 0 为中心,而不是 1000,幅度应该是 1,而不是 100。我敢肯定这只是对 conv() 函数工作原理的简单误解MATLAB;如果有一种方法可以产生一个从 -1 到 1 幅度为 1 的三角形函数,请告诉我该怎么做。

【问题讨论】:

    标签: matlab convolution


    【解决方案1】:

    这里的部分混淆是您正在处理的信号y 是离散的,其样本在x 中被0.01 隔开。此外,CONV 似乎对多项式乘法具有双重作用。来自帮助文档:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-07-23
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多