Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 为什么频域乘法卷积会产生意想不到的结果?_Matlab_Fft_Convolution_Frequency Domain - Fatal编程技术网

Matlab 为什么频域乘法卷积会产生意想不到的结果?

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

我试图通过傅里叶变换,平方,然后逆傅里叶变换来卷积一个矩形脉冲。我意识到有一个conv()函数,但我更愿意在频域中执行,以解决将来更复杂的问题。我的问题是,当我这样做时,它不会像预期的那样产生一个三角形函数。我使用的代码如下:

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您的问题是为什么会得到意外的结果。我告诉过你为什么,还举了一个例子说明你做错了什么。如果你不喜欢它,就不要使用它。另外,如果你明白什么是卷积,我们就不会讨论这个问题了。祝你好运