2

私は、独自の混合基数デシメーション イン タイム高速フーリエ変換の理解と実装に時間を費やしてきました。私は主に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 の計算でこれを行う必要があるのはなぜですか?

4

1 に答える 1

1

ベクトル複素共役による計算の前に、IFFT に同じ基数 4 の計算カーネルを使用できます。または、先行する別のベクトル複素共役操作をスキップして、共役が組み込まれている別の基数 4 計算カーネルを使用することもできます。

共役組み込みで基数 4 を実行すると、一部のプロセッサ アーキテクチャでレジスタの再利用が改善される場合があります。

IFFT を FFT に関連付ける式には、2 つの複素共役が含まれていることに注意してください。ひねり要素を逆回転させると、そのうちの 1 つだけが処理されます。

于 2016-02-15T21:03:06.453 に答える