「Real-Data DFTs」の編集履歴(バックアップ)一覧はこちら

Real-Data DFTs」(2009/03/24 (火) 13:10:05) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

[[FFTWマニュアル]] - [[FFTWリファレンス>FFTW Reference]] - [[ベーシックインターフェース>>Basic Interface]] - [[実データ離散フーリエ変換>>Real-Data DFTs]] * 実データ離散フーリエ変換 Real-Data DFTs fftw_plan fftw_plan_dft_r2c_1d( int n, double *in, fftw_complex *out, unsigned flags ); fftw_plan fftw_plan_dft_r2c_2d( int nx, int ny, double *in, fftw_complex *out, unsigned flags ); fftw_plan fftw_plan_dft_r2c_3d( int nx, int ny, int nz, double *in, fftw_complex *out, unsigned flags ); fftw_plan fftw_plan_dft_r2c( int rank, const int *n, double *in, fftw_complex *out, unsigned flags ); 実数入力/複素数出力の0次以上の離散フーリエ変換(DFT)のプランをたてて、fftw_planを返します(4.2節の[[プランの利用>>Using Plans]]参照)。 いったんある変換タイプおよびパラメータのプランを生成すれば、異なる配列に対して、同じタイプおよびパラメータのプランを生成する際に、高速にプランが生成され、定数は共有されます(もし存在すれば)。 プランナーはプランが生成できなかったとき、返り値としてNULLを返します。そして、ベーシックインターフェースでは、FFTWをある制限された変換群をサポートする設定にカスタマイズするか、入出力が異なるout-of-placeのc2r多次元変換でFFTW_PRESERVE_INPUTフラグを使わない限り、返り値としてNULLでない値を返します。 ** 引数 Arguments *** rank ランク(rank)は、変換の次元で(これは配列*nのサイズであるはずです)任意の非負整数を取りえます。'_1d'、'_2d'、'_3d'のプランナーはそれぞれランク(rank)が1,2,3に対応します。ランク(rank)0は、サイズ1の変換、つまり入力から出力への数のコピーに相当します(ただし、0の虚部を伴います)。 *** nまたは、nx/ny/nzまたは、n[rank] nまたは、nx,ny,nzもしくは、n[rank]はそれぞれ変換の次元の&i(){論理的}サイズを与え、任意の非負整数をとりえます。これは一般的に、&i(){物理的}配列次元とはことなります。これについては4.3.4章の[[実データ離散フーリエ変換配列形式>>Real-data DFT Array Format]]に記されています。 - FFTWは配列サイズが$$2^a3^b5^c7^d11^e13^f$$の時に、一番性能が発揮され ます。ただし、e+fは、0か1で他の係数(a,b,c,d)は任意です。他のサイズの時は、一般的なアルゴリズムを用いた遅いアルゴリズムで計算されます(それでも遅くてもO(nlogn)の次元です)。FFTWを違うサイズ用にカスタマイズすることもできるので、必要なら8章のInstallation and Customizationを参照してください。2の階乗のサイズの変換はとりわけ高速に計算でき、それは一般的にr2c/c2r変換の&i(){最後の}次元が偶数であるときに効果があるということになります。 *** in,out inとoutは変換の入力および出力の配列を表し、同じものを取りえます(in-place変換)。これらの配列は、FFTW_ESTIMATEフラグが使われない限り、プラン生成の際に値が上書きされます。(配列は初期化する必要はないが、確保する必要があります)。入出力が同じであるin-place変換の時は、実配列はパディングが必要です。これについては4.3.4章の[[実データ離散フーリエ変換配列様式>>Rea-data DFT Array Format]]に記されています。 *** flags flagはビットごとのORで構成されるゼロ以上のフラグです。24ページの4.3.2章の[[プランナーフラグ>>Planner Flags]]で定義されます。 逆変換については、複素数の入力(エルミート配列の論理的に半分のサイズに非冗長に格納されているもの)をとり、実数を出力とする以下のようなものです。 fftw_plan fftw_plan_dft_c2r_1d( int n, fftw_complex *in, double *out, unsigned flags ); fftw_plan fftw_plan_dft_c2r_2d( int nx, int ny, fftw_complex *in, double *out, unsigned flags ); fftw_plan fftw_plan_dft_c2r_3d( int nx, int ny, int nz, fftw_complex *in, double *out, unsigned flags ); fftw_plan fftw_plan_dft_c2r( int rank, const int *n fftw_complex *in, double *out, unsigned flags ); 引数は、入出力のデータ形式が逆になっているところ以外はr2c変換と、まったく同じです。 &color(red){FFTWの変換結果は正規化されていません}
[[FFTWマニュアル]] - [[FFTWリファレンス>FFTW Reference]] - [[ベーシックインターフェース>>Basic Interface]] - [[実データ離散フーリエ変換>>Real-Data DFTs]] * 実データ離散フーリエ変換 Real-Data DFTs fftw_plan fftw_plan_dft_r2c_1d( int n, double *in, fftw_complex *out, unsigned flags ); fftw_plan fftw_plan_dft_r2c_2d( int nx, int ny, double *in, fftw_complex *out, unsigned flags ); fftw_plan fftw_plan_dft_r2c_3d( int nx, int ny, int nz, double *in, fftw_complex *out, unsigned flags ); fftw_plan fftw_plan_dft_r2c( int rank, const int *n, double *in, fftw_complex *out, unsigned flags ); 実数入力/複素数出力の0次以上の離散フーリエ変換(DFT)のプランをたてて、fftw_planを返します(4.2節の[[プランの利用>>Using Plans]]参照)。 いったんある変換タイプおよびパラメータのプランを生成すれば、異なる配列に対して、同じタイプおよびパラメータのプランを生成する際に、高速にプランが生成され、定数は共有されます(もし存在すれば)。 プランナーはプランが生成できなかったとき、返り値としてNULLを返します。そして、ベーシックインターフェースでは、FFTWをある制限された変換群をサポートする設定にカスタマイズするか、入出力が異なるout-of-placeのc2r多次元変換でFFTW_PRESERVE_INPUTフラグを使わない限り、返り値としてNULLでない値を返します。 ** 引数 Arguments *** rank ランク(rank)は、変換の次元で(これは配列*nのサイズであるはずです)任意の非負整数を取りえます。'_1d'、'_2d'、'_3d'のプランナーはそれぞれランク(rank)が1,2,3に対応します。ランク(rank)0は、サイズ1の変換、つまり入力から出力への数のコピーに相当します(ただし、0の虚部を伴います)。 *** nまたは、nx/ny/nzまたは、n[rank] nまたは、nx,ny,nzもしくは、n[rank]はそれぞれ変換の次元の&i(){論理的}サイズを与え、任意の非負整数をとりえます。これは一般的に、&i(){物理的}配列次元とはことなります。これについては4.3.4章の[[実データ離散フーリエ変換配列形式>>Real-data DFT Array Format]]に記されています。 - FFTWは配列サイズが$$2^a3^b5^c7^d11^e13^f$$の時に、一番性能が発揮され ます。ただし、e+fは、0か1で他の係数(a,b,c,d)は任意です。他のサイズの時は、一般的なアルゴリズムを用いた遅いアルゴリズムで計算されます(それでも遅くてもO(nlogn)の次元です)。FFTWを違うサイズ用にカスタマイズすることもできるので、必要なら8章のInstallation and Customizationを参照してください。2の階乗のサイズの変換はとりわけ高速に計算でき、それは一般的にr2c/c2r変換の&i(){最後の}次元が偶数であるときに効果があるということになります。 *** in,out inとoutは変換の入力および出力の配列を表し、同じものを取りえます(in-place変換)。これらの配列は、FFTW_ESTIMATEフラグが使われない限り、プラン生成の際に値が上書きされます。(配列は初期化する必要はないが、確保する必要があります)。入出力が同じであるin-place変換の時は、実配列はパディングが必要です。これについては4.3.4章の[[実データ離散フーリエ変換配列様式>>Rea-data DFT Array Format]]に記されています。 *** flags flagはビットごとのORで構成されるゼロ以上のフラグです。24ページの4.3.2章の[[プランナーフラグ>>Planner Flags]]で定義されます。 逆変換については、複素数の入力(エルミート配列の論理的に半分のサイズに非冗長に格納されているもの)をとり、実数を出力とする以下のようなものです。 fftw_plan fftw_plan_dft_c2r_1d( int n, fftw_complex *in, double *out, unsigned flags ); fftw_plan fftw_plan_dft_c2r_2d( int nx, int ny, fftw_complex *in, double *out, unsigned flags ); fftw_plan fftw_plan_dft_c2r_3d( int nx, int ny, int nz, fftw_complex *in, double *out, unsigned flags ); fftw_plan fftw_plan_dft_c2r( int rank, const int *n fftw_complex *in, double *out, unsigned flags ); 引数は、入出力のデータ形式が逆になっているところ以外はr2c変換と、まったく同じです。 &color(red){FFTWの演算では規格化がされません}。すなわち、c2r変換を行った後、r2c変換(またははその逆)を行うと、計算結果は元のデータを変換のサイズ倍(配列の論理的次元の積)されます。r2c変換は、同じ入力を用いて、複素離散フーリエ変換のでFFTW_FORWARDとした時と、同じ結果になり、c2r変換はFFTW_BACKWARDに対応します。より詳しい情報は、4.7章の[[What FFTW Really Computes>>What FFTW Really Computes]]を参照してください。

表示オプション

横に並べて表示:
変化行の前後のみ表示: