为什么matlab得到的卷积与理论上得到的不同?

Vik*_*ash 2 matlab signal-processing convolution

指数函数与正弦函数卷积的理论结果如下所示。

在此处输入图片说明

当我直接使用 matlab 绘制函数时,我得到了这个, 分析结果的直接绘图

然而 Matlab conv 命令产生了这个, 从 Matlab 获得的绘图

这两个图看起来很相似,但它们并不相同,请参见比例尺。matlab 良率是理论结果的十倍。为什么?

matlab 代码在这里。

clc;
clear all;
close all;
t = 0:0.1:50;
x1 = exp(-t);
x2 = sin(t);
x = conv(x1,x2);
x_theory = 0.5.*(exp(-t) + sin(t) - cos(t));

figure(1)
subplot(313), plot(t, x(1:length(t))); subplot(311), plot(t, x1(1:length(t))); subplot(312), plot(t, x2(1:length(t)))

figure(2)
subplot(313), plot(t, x_theory); subplot(311), plot(t, x1(1:length(t))); subplot(312), plot(t, x2(1:length(t)))
Run Code Online (Sandbox Code Playgroud)

And*_*uri 6

conv离散时间卷积,它不做数学积分函数。从数字上讲,这基本上意味着将两个信号的结果相乘和相加多次,每个点一次,其中一个信号有一个小的偏移。

如果您考虑这一点,您就会意识到信号的采样会产生影响。即,如果每 0.1 个值或 0.001 个值有一个点,则乘以的点数不同,因此结果的值不同(不是形状)。

因此,每次进行数值卷积时,总是需要乘以采样率,以“规范化”操作。

只需更改您的代码即可

sampling_rate= 0.1;
t = 0:sampling_rate:50;
x = conv(x1,x2)*sampling_rate;
Run Code Online (Sandbox Code Playgroud)

  • @Vikash 改变采样率。尝试 0.5。现在尝试 0.01。数值解始终只是解析解的近似值。对于所有数值近似都是如此,而不仅仅是卷积。(幸运的是,这就是数学家仍然有工作的原因:D) (5认同)
  • @Vikash正确的采样率为“0”,即无限采样点。显然这是不可能的。任何更大的东西总会有一些错误。这就是为什么通常需要问题的分析解决方案。 (4认同)
  • @Vikash:您的正弦函数可以正确采样,每个周期仅需要两个以上的样本。但指数函数无法采样,你总是会出错。傅里叶分析显示有多少信号功率因混叠而损失。这使您可以选择应用中功率损失可接受的采样率。 (3认同)