#1 楼
这取决于。从理论上讲,您可以用基数4保存一些乘数,因为基数4的蝴蝶数量为1/4,每个蝴蝶3 mpy + 8个加法(如果结构正确),基数2的蝴蝶为1 mpy + 2个加法。所以就乘法而言,它要好一些,但是在代码结构,异常处理,系数管理,寄存器管理,数字反向寻址等方面,复杂度更高。
因此,如果mpy的数量是限制因素,这只是一个优势,但对于当今的大多数硬件而言,情况并非如此。
#2 楼
这里!您可以找到两种FFT算法之间主要区别的解释。在文档末尾有一些表,其中可能会指出,如果数据大小增加,radix-4 fft的性能将优于radix-2。 >
#3 楼
查看基数4 FFT的一种简单方法是将一个基数4的蝴蝶视为包含4个基数2的蝴蝶;一张通过2张蝴蝶,随后一张通过2张蝴蝶。旋转因子相同,只是蝴蝶的复杂旋转因子因相位差$ \ frac {\ pi} {2} $而消失。但这意味着将$ \ sin(\ cdot)$与$ \ cos(\ cdot)$交换并交换一些加号和减号。因此您的radix-4 FFT运算法则只需要读入4个复数值,一次装入复数旋转,进行一堆算术,并将4个结果存储一次。您执行一次基数4遍,并完成与两次基数2遍相同的任务。乘积和加法的净数相同,但是基数4的蝴蝶可以全部在处理器寄存器组中完成(我认为大约有16个不同的浮点寄存器,您需要8个用于4个值的实数部分和imag部分,2个用于正弦和余弦旋转的寄存器,可能还有一些或两个其他寄存器用于刮)。这比在内存中执行速度更快。
评论
$ \ begingroup $
我建议解释为什么这会影响算法速度,这从指数值来看并不明显。
$ \ endgroup $
– MBaz
18年6月23日在0:12