Matlab 为什么频域乘法卷积会产生意想不到的结果?
我试图通过傅里叶变换,平方,然后逆傅里叶变换来卷积一个矩形脉冲。我意识到有一个conv()函数,但我更愿意在频域中执行,以解决将来更复杂的问题。我的问题是,当我这样做时,它不会像预期的那样产生一个三角形函数。我使用的代码如下:Matlab 为什么频域乘法卷积会产生意想不到的结果?,matlab,fft,convolution,frequency-domain,Matlab,Fft,Convolution,Frequency Domain,我试图通过傅里叶变换,平方,然后逆傅里叶变换来卷积一个矩形脉冲。我意识到有一个conv()函数,但我更愿意在频域中执行,以解决将来更复杂的问题。我的问题是,当我这样做时,它不会像预期的那样产生一个三角形函数。我使用的代码如下: clc clear all x=-5:.01:5; y=rectangularPulse(x); Y=fft(y); H=Y.^2; h=ifft(H); plot(x,h) 为了确保卷积是线性的,您需要调零。当前正在执行循环卷积。试着这样做: y = o
clc
clear all
x=-5:.01:5;
y=rectangularPulse(x);
Y=fft(y);
H=Y.^2;
h=ifft(H);
plot(x,h)
为了确保卷积是线性的,您需要调零。当前正在执行循环卷积。试着这样做:
y = ones(100,1);
N = length(y);
Nfft = 2*length(y) - 1;
Y=fft(y,Nfft);
H=Y.^2;
h=ifft(H);
plot(h);
您可能只是需要一个
fftshift
,这里或那里仅仅因为MATLAB是区分大小写的,并不意味着只区分大小写的单字母变量是一个好主意。我建议yn
,Yf
,Hf
,hn
,这样就不会产生混淆。这会产生一个三角形脉冲,但它的中心是100,振幅是100。它应该以0为中心,振幅为1。我怎样才能做到这一点?还要记住,Y的幂应该是任意的,不一定是2。我没有费心定义时间轴,因为不需要回答你的问题。我只是简单地把东西画成样本数的函数。至于振幅,三角形的峰值将等于矩形脉冲中的面积。因为我没有规范化结果,所以它将等于1*100=100。我觉得你不太明白什么是卷积。我建议你重新阅读你的文章,如果你还有任何问题,请稍后发回这里。我完全理解卷积是什么,是的,定义一个x轴实际上是回答我的问题所必需的,否则三角形函数不会像应该的那样以0为中心。同样在您的回答中,您没有正确定义y,因为它应该是宽度为1而不是100的rect函数。@DavidWebb您的问题是为什么会得到意外的结果。我告诉过你为什么,还举了一个例子说明你做错了什么。如果你不喜欢它,就不要使用它。另外,如果你明白什么是卷积,我们就不会讨论这个问题了。祝你好运