任意の長さのデータについて高速フーリエ変換をおこなう サブルーチンパッケージ. NCARの数値計算ライブラリより移植した.
サブルーチンの説明の中の「定義」の節では, 入出力パラメータの数学的解説に関して次のような表記法をとる: 処理する配列X(長さN)の第i番目 (i=1, ..., N) の 配列要素について,入力時の値をx_i(小文字), 出力時の値をX_i(大文字)と書く.
以下の7つのサブルーチン群の中で初期化をおこなうサブルーチン (サブルーチン名がIで終わる)は,そのサブルーチン群に属する 変換ルーチンを用いる際,かならず最初に1回呼ばなければならない. ただしそれ以後は,異なるデータ数を指定するときに限って 初期化ルーチンを呼べばよい. なお,初期化ルーチンが用いる作業領域は,同じサブルーチン群に 属する変換ルーチンを用いている間変更してはならない. (この作業領域には,因数と三角関数表が格納されている).
周期実数値データのフーリエ変換をおこなうサブルーチン群.
RFFTI(N,WSAVE) 初期化をおこなう. RFFTF(N,R,WSAVE) フーリエ順変換をおこなう. RFFTB(N,R,WSAVE) フーリエ逆変換をおこなう.
RFFTI, RFFTF, RFFTBの簡易型サブルーチン群.
EZFFTI(N,WSAVE) 初期化をおこなう. EZFFTF(N,R,A0,A,B,WSAVE) フーリエ順変換をおこなう. EZFFTB(N,R,A0,A,B,WSAVE) フーリエ逆変換をおこなう.
奇の周期データのSINE変換をおこなうサブルーチン群.
SINTI(N,WSAVE) 初期化をおこなう. SINT(N,X,WSAVE) SINE変換をおこなう.
偶の周期データのCOSINE変換をおこなうサブルーチン群.
COSTI(N,WSAVE) 初期化をおこなう. COST(N,X,WSAVE) COSINE変換をおこなう.
奇数波数成分のみのSIN変換をおこなうサブルーチン群.
SINQI(N,WSAVE) 初期化をおこなう. SINQF(N,X,WSAVE) SINE順変換をおこなう. SINQB(N,X,WSAVE) SINE逆変換をおこなう.
偶数波数成分のみのCOSINE変換をおこなうサブルーチン群.
COSQI(N,WSAVE) 初期化をおこなう. COSQF(N,X,WSAVE) COSINE順変換をおこなう. COSQB(N,X,WSAVE) COSINE逆変換をおこなう.
周期複素数データのフーリエ変換をおこなうサブルーチン群.
CFFTI(N,WSAVE) 初期化をおこなう. CFFTF(N,C,WSAVE) フーリエ順変換をおこなう. CFFTB(N,C,WSAVE) フーリエ逆変換をおこなう.
周期実数値データのフーリエ変換をおこなう. RFFTIは初期化をおこなう; RFFTFはフーリエ順変換をおこなう; RFFTBはフーリエ逆変換をおこなう.
N が偶数のとき N' = N/2-1 , N が奇数のとき N' = (N-1)/2 とおく.
順変換は次のように定義される. [ R_1 = Σ_i=1^Nr_i, ] [ R_2k = Σ_i=1^Nr_i 2π (i-1)kN, R_2k+1 = - Σ_i=1^Nr_i 2π (i-1)kN ( k = 1, ..., N' ). ] ただし N が偶数のとき, [ R_N = Σ_i=1^N(-1)^i-1r_i. ]逆変換は次のように定義される.
N が偶数のとき, [ R_i = r_1 + (-1)^i-1r_N + 2 Σ_k=1^N' ( r_2k 2π (i-1)kN - r_2k+1 2π (i-1)kN) ( i = 1, ..., N ). ] N が奇数のとき, [ R_i = r_1 + 2 Σ_k=1^N' ( r_2k 2π (i-1)kN - r_2k+1 2π (i-1)kN) ( i = 1, ..., N ). ]
CALL RFFTI(N,WSAVE)
CALL RFFTF(N,R,WSAVE)
CALL RFFTB(N,R,WSAVE)
N (I) 処理するデータの長さ. WSAVE (R) 作業用配列.長さは少なくとも 2N+15以上でなければならない. R (R) 処理する実数型配列. 入力パラメータでもあり出力パラメータでもある. (上記定義参照).
RFFTI, RFFTF, RFFTBの簡易型サブルーチン. EZFFTIは初期化をおこなう; EZFFTFはフーリエ順変換をおこなう; EZFFTBはフーリエ逆変換をおこなう.
順変換は次のように定義される. ( N が偶数のとき N' = N/2-1 , N が奇数のとき N' = (N-1)/2 とおく.) [ A_0 = 1N Σ_i=1^Nr_i, ] [ A_k = 2N Σ_i=1^Nr_i 2π (i-1)kN, B_k = 2N Σ_i=1^Nr_i 2π (i-1)kN ( k = 1, ..., N' ). ] ただし N が偶数のとき, [ A_N/2 = 1NΣ_i=1^N(-1)^i-1r_i, B_N/2 = 0. ]逆変換は次のように定義される. ( N が偶数のとき N' = N/2 , N が奇数のとき N' = (N-1)/2 とおく.) [ R_i = a_0 + Σ_k=1^N' ( a_k 2π (i-1)kN + b_k 2π (i-1)kN) ( i = 1, ..., N ). ]
CALL EZFFTI(N,WSAVE)
CALL EZFFTF(N,R,A0,A,B,WSAVE)
CALL EZFFTB(N,R,A0,A,B,WSAVE)
N (I) 処理するデータの長さ. WSAVE (R) 作業用配列.長さは少なくとも 3N+15以上でなければならない. R (R) 処理する実数型配列. EZFFTFにおいては入力パラメータ, EZFFTBにおいては出力パラメータである. A0 (R) 上記定義における A_0 および a_0 . A, B (R) Nが偶数のとき N/2, Nが奇数のとき(N-1) /2の長さの 実数型配列(上記定義参照).
奇の周期データのSINE変換をおこなう. SINTIは初期化をおこなう; SINTはSINE変換をおこなう.
順変換は次のように定義される. [ X_k = 2Σ_i=1^Nx_i π ikN+1, ( k = 1, ..., N ). ]逆変換は順変換と同じである.
CALL SINTI(N,WSAVE)
CALL SINT(N,R,WSAVE)
N (I) 処理するデータの長さ. WSAVE (R) 作業用配列.長さは少なくとも 2.5N+15以上でなければならない. R (R) 処理する実数型配列. 入力パラメータでもあり出力パラメータでもある (上記定義参照).
偶の周期データのCOSINE変換をおこなう. COSTIは初期化をおこなう; COSTはCOSINE変換をおこなう.
順変換は次のように定義される. [ X_k = x_1 + (-1)^k-1x_N + 2Σ_i=2^Nx_i π (i-1)(k-1)N-1, ( k = 1, ..., N ). ]逆変換は順変換と同じである.
CALL COSTI(N,WSAVE)
CALL COST(N,R,WSAVE)
N (I) 処理するデータの長さ. WSAVE (R) 作業用配列.長さは少なくとも 3N+15以上でなければならない. R (R) 処理する実数型配列. 入力パラメータでもあり出力パラメータでもある (上記定義参照).
奇数波数成分のみのSIN変換をおこなう. SINQIは初期化をおこなう; SINQFはSINE順変換をおこなう; SINQBはSINE逆変換をおこなう.
順変換は次のように定義される. [ X_k = (-1)^k-1x_N + 2 Σ_i=1^N-1r_i π (2k-1)i2N ( k = 1, ..., N ). ]逆変換は次のように定義される. [ X_i = 4 Σ_k=1^Nr_k π (2k-1)i2N ( i = 1, ..., N ). ]
CALL SINQI(N,WSAVE)
CALL SINQF(N,R,WSAVE)
CALL SINQB(N,R,WSAVE)
N (I) 処理するデータの長さ. WSAVE (R) 作業用配列.長さは少なくとも 3N+15以上でなければならない. R (R) 処理する実数型配列. 入力パラメータでもあり出力パラメータでもある (上記定義参照).
偶数波数成分のみのCOSSINE変換をおこなう. COSQIは初期化をおこなう; COSQFはCOSINE順変換をおこなう; COSQBはCOSINE逆変換をおこなう.
順変換は次のように定義される. [ X_k = x_1 + 2 Σ_i=2^Nr_i π (2k-1)(i-1)2N ( k = 1, ..., N ). ]逆変換は次のように定義される. [ X_i = 4 Σ_k=1^Nr_k π (2k-1)(i-1)2N ( i = 1, ..., N ). ]
CALL COSQI(N,WSAVE)
CALL COSQF(N,R,WSAVE)
CALL COSQB(N,R,WSAVE)
N (I) 処理するデータの長さ. WSAVE (R) 作業用配列.長さは少なくとも 3N+15以上でなければならない. R (R) 処理する実数型配列. 入力パラメータでもあり出力パラメータでもある (上記定義参照).
周期複素数データのフーリエ変換をおこなう. CFFTIは初期化をおこなう; CFFTFはフーリエ順変換をおこなう; CFFTBはフーリエ逆変換をおこなう.
以下では i = √-1 とする.
順変換は次のように定義される. [ C_k = Σ_j=1^Nc_j (-i2π (j-1)(k-1)N) ( k = 1, ..., N ). ]逆変換は次のように定義される. [ C_j = Σ_k=1^Nc_k (i2π (j-1)(k-1)N) ( j = 1, ..., N ). ]
CALL CFFTI(N,WSAVE)
CALL CFFTF(N,C,WSAVE)
CALL CFFTB(N,C,WSAVE)
N (I) 処理するデータの長さ. WSAVE (R) 作業用配列.長さは少なくとも 4N+15以上でなければならない. C (C) 処理する複素数型配列. 入力パラメータでもあり出力パラメータでもある (上記定義参照).
このパッケージにはこのほかに以下の下位ルーチンがある. ここではサブルーチン名をあげるにとどめる.
cfftb1 cfftf1 cffti1 cosqb1. cosqf1. ezfft1. passb. passb2 .f .f .f f f f f .f passb3 passb4 passb5 passf. passf2. passf3. passf4. passf5 .f .f .f f f f f .f pimach radb2. radb3. radb4. radb5. radbg. radf2. radf3. .f f f f f f f f radf4. radf5. radfg. rfftb1. rfftf1. rffti1. sint1. f f f f f f f
NUMAGUTI Atusi <a1n@gfdl.gov> Last Modified: Thu Aug 31 13:02:25 EDT 1995