私は、独自の混合基数デシメーション イン タイム高速フーリエ変換の理解と実装に時間を費やしてきました。私は主にkiss_fftとhttp://www.briangough.com/fftalgorithms.pdfを使用して、何が起こっているのかを理解しています。
私が読んだことから、共役回転因子を使用して fft を逆にすることができます。
しかし、kiss_fft のソース コードを読むと、基数 4 の実装では実際に、順変換または逆変換を行っているかどうかがテストされ、わずかに異なる数学が使用されます。
https://github.com/itdaniher/kissfft/blob/master/kiss_fft.c#L77
if(st->inverse) {
Fout[m].r = scratch[5].r - scratch[4].i;
Fout[m].i = scratch[5].i + scratch[4].r;
Fout[m3].r = scratch[5].r + scratch[4].i;
Fout[m3].i = scratch[5].i - scratch[4].r;
}else{
Fout[m].r = scratch[5].r + scratch[4].i;
Fout[m].i = scratch[5].i - scratch[4].r;
Fout[m3].r = scratch[5].r - scratch[4].i;
Fout[m3].i = scratch[5].i + scratch[4].r;
}
使用される fft 計算は、フォワードおよびリバース fft で同じであると考えました (kiss_fft の radix-2、3、および 5 の実装の場合と同様)。
kiss_fft 基数 4 の計算でこれを行う必要があるのはなぜですか?