我可以使用单个FFT执行不同长度的变换吗?

是。

存在使用FFT的标准,其中需要两个或更多个不同的变换长度或点数。可以实例化两个或更多个不同的FFT,每个FFT对应一个点。

但是,还有一种使用单个FFT的方法。生成FFT的点数必须是最大点数。然后,FFT也可以执行较小的变换。您必须在正确的位置外部填充输入存储器0,如下所述。

该方法的优点是仅需要一个FFT。缺点是每次变换都需要最长的变换。

示例:如果要使用16点FFT的实例化执行4点变换:

对于4点变换,您的4个输入值将是:
真实:1 2 1 1
想象:1 2 1 1

输出将是
真实:5 1 -1 -1
imag:5 -1 -1 1

在你的16点FFT上,你必须提供
real:1 0 0 0 2 0 0 0 1 0 0 0 1 0 0 0
imag:1 0 0 0 2 0 0 0 1 0 0 0 1 0 0 0

即,您需要在数据值之间输入0,直到达到所需的点数。
然后你会得到
实:5 1 -1 -1 5 1 -1 -1 5 1 -1 -1 5 1 -1 -1
imag:5 -1 -1 1 5 -1 -1 1 5 -1 -1 1 5 -1 -1 1

其中前4个点与上述4点变换的结果相同。

更一般地说:如果你的FFT实例化是针对N个点,并且你想要执行M点变换,其中M <N,你可以使用以下算法从原始输入数据中生成新的输入数据new_real和new_imag real和imag :

因为I = 0到M.
new_real(I * N / M)=真实(I)
new_imag(I * N / M)= imag(I)
对于J = 1到N / M-1
new_real(I * N / M + J)= 0
new_imag(I * N / M + J)= 0
结束
结束
编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-08-04 14:32:07 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它