声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1341|回复: 8

[FFT] FFT和卷积的细节处理

[复制链接]
发表于 2015-11-10 16:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
一直听别人说:时域的卷积就是频域的相乘
但是 两个长度均为L的信号,在频域做FFT再做IFFT之后长度还是为L,卷积过后长度却为(2L-1)
问题是来了:
1.该怎么理解这么一回事
2.这里对卷积的结果该怎么截取才能得到和FFT做的一样的结果
谢谢!
回复
分享到:

使用道具 举报

发表于 2015-11-10 18:33 | 显示全部楼层
用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[X(k)H(k)]。

评分

1

查看全部评分

发表于 2015-11-10 19:09 | 显示全部楼层
MATLAB程序示例:

x = [1 2 3 4];
h = [1 2 3 4];
y = ifft(fft(x,7) .* fft(h,7));
发表于 2015-11-10 19:14 | 显示全部楼层
当然,为了调用基-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项,即为线性卷积的结果。
发表于 2015-11-11 09:44 | 显示全部楼层
本帖最后由 TestGuru 于 2015-11-11 09:47 编辑

两个信号FFT或DFT后再相乘是两个信号的周期卷积,按L+M-1补零就把周期卷积变线性卷积了。

评分

1

查看全部评分

 楼主| 发表于 2015-11-11 16:02 | 显示全部楼层
dsp2008 发表于 2015-11-10 19:09
MATLAB程序示例:

x = [1 2 3 4];

如果我不要那个7,程序写成这样子
x = [1 2 3 4];
h = [1 2 3 4];
y = ifft(fft(x) .* fft(h));
这样得到的y就是只有4位,怎么用线性卷积来实现呢?

点评

1、是用FFT来实现线性卷积,而不是用线性卷积来实现别的东西。请务必记住这一点! 2、若要用FFT来实现线性卷积,则必须满足N >= L+M-1的条件。  详情 回复 发表于 2015-11-11 18:32
发表于 2015-11-11 18:32 | 显示全部楼层
Law 发表于 2015-11-11 16:02
如果我不要那个7,程序写成这样子
x = [1 2 3 4];
h = [1 2 3 4];

1、是用FFT来实现线性卷积,而不是用线性卷积来实现别的东西。请务必记住这一点!
2、若要用FFT来实现线性卷积,则必须满足N >= L+M-1的条件。
 楼主| 发表于 2015-11-11 18:53 | 显示全部楼层
dsp2008 发表于 2015-11-11 18:32
1、是用FFT来实现线性卷积,而不是用线性卷积来实现别的东西。请务必记住这一点!
2、若要用FFT来实现线 ...

懂了,我知道我错在哪了。。。圆周卷积也有这个条件
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-17 17:05 , Processed in 0.085414 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表