为了回答我自己的问题,我对分裂基FFT(SR-FFT)做了一些研究,发现了Anthony Blake的一篇有趣的论文等等. 标题:“南方最快的傅立叶变换”
https://www.cs.waikato.ac.nz/~ihw/papers/13-AMB-IHW-MJC-FastFourier.pdf。本文概述了用SR-FFT加速FFT的方法,并参考了Blake博士论文https://www.cs.waikato.ac.nz/~ihw/PhD_theses/Anthony_Blake.pdf。这包含了附录B清单25中SR-FFT的C代码,如下所示:typedef complex float data_t;
#define W(N,k) (cexp(-2.0f * M_PI * I * (float)k / (float)N))
data_t *LUT1;
data_t *LUT3;
void splitfft(data_t *in, data_t *out, int log2stride, int stride, int N) {
if(N == 1) {
out[0] = in[0];
}else if(N == 2) {
out[0] = in[0] + in[stride];
out[N/2] = in[0] - in[stride];
}else{
splitfft(in, out, log2stride+1, stride << 1, N >> 1);
splitfft(in+stride, out+N/2, log2stride+2, stride << 2, N >> 2