FFT和卷积的细节处理
一直听别人说:时域的卷积就是频域的相乘但是 两个长度均为L的信号,在频域做FFT再做IFFT之后长度还是为L,卷积过后长度却为(2L-1){:{41}:}
问题是来了:
1.该怎么理解这么一回事
2.这里对卷积的结果该怎么截取才能得到和FFT做的一样的结果
谢谢! 用FFT实现卷积的方法是这样的:
1、设序列x(n)的长度为L,h(n)的长度为M;则卷积y(n)的长度为N=L+M-1;
2、将x(n)和h(n)这两个序列都补零,使得补零后的它们的长度都变成N;
3、分别求x(n)和h(n)的FFT,得X(k)和H(k);
4、y(n) = IFFT。 MATLAB程序示例:
x = ;
h = ;
y = ifft(fft(x,7) .* fft(h,7));
当然,为了调用基-2 FFT函数,可将第3行程序改写为:
N = 2 .^ ceil(log((length(x) + length(h))));y = ifft(fft(x,N) .* fft(h,N));
然后,取y中的前length(x) + length(h) - 1项,即为线性卷积的结果。 本帖最后由 TestGuru 于 2015-11-11 09:47 编辑
两个信号FFT或DFT后再相乘是两个信号的周期卷积,按L+M-1补零就把周期卷积变线性卷积了。 dsp2008 发表于 2015-11-10 19:09
MATLAB程序示例:
x = ;
如果我不要那个7,程序写成这样子
x = ;
h = ;
y = ifft(fft(x) .* fft(h));
这样得到的y就是只有4位,怎么用线性卷积来实现呢?
Law 发表于 2015-11-11 16:02
如果我不要那个7,程序写成这样子
x = ;
h = ;
1、是用FFT来实现线性卷积,而不是用线性卷积来实现别的东西。请务必记住这一点!
2、若要用FFT来实现线性卷积,则必须满足N >= L+M-1的条件。 dsp2008 发表于 2015-11-11 18:32
1、是用FFT来实现线性卷积,而不是用线性卷积来实现别的东西。请务必记住这一点!
2、若要用FFT来实现线 ...
懂了,我知道我错在哪了。。。圆周卷积也有这个条件
页:
[1]