Radix-4 FFT 与 Radix-2

信息处理 fft
2022-01-07 12:45:54

radix-4 实现是否比同等编码的 radix-2 FFT 更快?如果是这样,为什么它会更快?

4个回答

这取决于。从理论上讲,您可以使用 radix-4 保存一些乘法,因为 radix-4 的蝴蝶数量是蝴蝶数量的 1/4,每只蝴蝶有 3 mpy + 8 个加法(如果结构合理的话),而基数 2 每只蝴蝶有 1 mpy + 2 个加法.

所以在乘法方面它会好一点,但是在代码结构、异常处理、系数管理、寄存器管理、数字反向寻址等方面有更高的复杂性。

因此,如果 mpy 的数量是限制因素,而对于当今大多数硬件而言并非如此,那么这只是一个优势。

在这里您可以找到 FFT 的两种算法之间主要区别的解释。在文档的最后有一些表格,可以注意到,如果数据大小增加,radix-4 fft 的性能优于 radix-2。

查看 radix-4 FFT 的一种简单方法是将一个 radix-4 蝴蝶视为包含 4 个 radix-2 蝴蝶;一次通过 2 只蝴蝶,下一次通过 2 只蝴蝶。的相位差但所有这意味着交换并交换一些加号和减号。所以你的 radix-4 FFT alg 只需要读取 4 个复数值一次,加载一次复数旋转,做一堆算术,然后存储 4 个结果一次。你做了一个 radix-4 pass 并且你完成了与两个 radix-2 pass 相同的任务。π2sin()cos()

我认为乘法和加法的净数量是相同的,但是基数 4 蝴蝶可以全部在处理器寄存器组中完成(我认为大约有 16 个不同的浮点寄存器,实部和图像部分需要 8 个在 4 个值中,有 2 个寄存器用于正弦和余弦旋转,可能还有其他一两个寄存器用于暂存)。这比在内存中执行要快。

在基数 2 中,样本数是 2 的幂,但在基数 4 中,样本数是 4 的幂。