実データ離散フーリエ変換配列様式


 実データの離散フーリエ変換出力(r2c変換)は、対称性を持つ。つまり、原則的には、2倍の冗長性を持つ(4.7節What FFTW Really Computes参照)。(逆c2r変換の入力も、同様)。実際のところ、これらの冗長性の排除を、効果的かつ理解しやすい形式(多次元変換の一般化するもの)で行うことを、完全に実現することは不可能である。その代わりに、r2c変換の出力は、対応する複素変換の出力の半分をわづかに超える。データはいかなる方法でも”圧縮”せず、通常のfftw_complex値の配列として、格納している。実際のところ、このデータは対応する複素変換の配列の一部分である。

 具体的にいえば、d(=ランク)次元の n1 x n2 x n3 x ... x nd の実変換では、複素データは、fftw_complex値で、n1 x n2 x n3 x ... x (nd/2 + 1)の行メジャー形式の配列である(割り算の余りは切り捨て)。つまり、我々は通常の複素変換で得られるデータの最後の次元の、小さいほうの半分(非負周波数)、に加えて1要素しか保存していません。(他の次元を半分にすることも可能でしたが、実装が最も簡単だったため、最後の次元を半分にしました)。

 入出力が異なる、アウトオブレイス変換では、実データは単なる配列で、物理次元 n1 x n2 x n3 x ... x nd(列メジャー形式)となっています。

 入出力が同じである、インプレイス変換では、いくつか複雑な問題が生じます。というのも、複素データは、実データより僅かに大きいためです。このケースでは、実データの最後の次元は、必ず余白がとられている必要があり、そこには追加の余分な値が格納されます。--最後の次元が偶数であれば、2つの追加、奇数であれば1つの追加データです。
つまり、実データの最後の次元は、物理的に 2(nd + 1)個のdouble値である必要があります(複素データを格納するのに過不足ないサイズ)。しかしながら、この物理的配列サイズは、論理的な配列サイズは変更しません。ndの値だけが、実際に最後の次元に格納され、ndがプランナーに渡される最後の次元となります。

タグ:

array format
最終更新:2009年07月04日 23:13