我刚刚完成了信号类中的卷积,并且一直在使用convMATLAB 中的函数,但有些东西我不太明白。假设我有两个离散信号,和采样。随着,结果的幅度增加。由于卷积积分只是
为什么产生的卷积似乎取决于我对的价值?通过降低采样率,我不应该有一个更好的近似值吗?
我刚刚完成了信号类中的卷积,并且一直在使用convMATLAB 中的函数,但有些东西我不太明白。假设我有两个离散信号,和采样。随着,结果的幅度增加。由于卷积积分只是
为什么产生的卷积似乎取决于我对的价值?通过降低采样率,我不应该有一个更好的近似值吗?
非常非正式地,您可以将被积函数视为和微分的乘积。在 Matlab 中,您可以通过将离散卷积乘以采样间隔来近似此值,如下例所示:
% sample rate is 0.01 seconds
dt = 0.01;
t = 0:dt:1;
f = exp(-t/2);
h = ones(1,length(t));
c = dt*conv(f,h);
% sample rate is now 0.001 seconds
dt2 = 0.001;
t2 = 0:dt2:1;
f2 = exp(-t2/2);
h2 = ones(1,length(t2));
c2 = dt2*conv(f2,h2);
% confirm that the two convolutions are the same
plot(t,c(1:length(t)),t2,c2(1:length(t2)))
请注意,您尝试做的是使用离散信号处理来近似连续信号处理的结果。通常,正如本例所示,您必须小心。当试图估计信号的能量或其傅里叶变换时,也会出现类似的情况。
最后一点,正如 CMDoolittle 所提到的,正确的离散卷积由 计算conv(f,h),不包括dt。
您的计算机不计算连续积分,而是计算离散卷积,这只是每个时间步的乘积之和。当您增加 dt 时,您会在每个信号向量中获得更多点,这会增加每个时间步的总和。您必须根据所涉及向量的长度对 conv() 的结果进行归一化。