drfftmr.dll (倍精度離散型混合基数実フーリエ変換) Ver. 1.0
dcfftmr.dll (倍精度離散型混合基数複素フーリエ変換) Ver. 1.0
Oct. 1999, Copuright (C) Hiroshi KOBAYASHI
(A) drfftmr.dll (倍精度離散型混合基数実フーリエ変換)
DRFFTMR(x, n, isn, icon)
|
|
A1. 機能
|
- 1次元(項数n)の実時系列データ { x j } が与えられたときに、倍精度離散型実フーリエ変換またはその逆変換を混合基数を用いた高速手法(FFT)により行います。項数nは2のべき乗に限りません。
- (1) フーリエ変換
- { x j } を入力しフーリエ係数 { n*ak } 、{ n*bk } を求めます。
- --- nが偶数のとき ---
-
n-1
n*ak = 2 Σ xj*cos(2πkj/n) ( k = 0, 1, ..., n/2)
j=0
n-1
n*bk = 2 Σ xj*sin(2πkj/n) ( k = 1, 2, ..., n/2-1)
j=0
- --- nが奇数のとき ---
-
n-1
n*ak = 2 Σ xj*cos(2πkj/n) ( k = 0, 1, ..., (n-1)/2)
j=0
n-1
n*bk = 2 Σ xj*sin(2πkj/n) ( k = 1, 2, ..., (n-1)/2)
j=0
- (2) フーリエ逆変換
- { ak } 、{ bk } を入力しフーリエ級数の値 { 2*x j } を求めます。
- --- nが偶数のとき ---
-
n/2-1
2*xj = a0 + 2Σ(ak*cos(2πkj/n)+bk*sin(2πkj/n))+ an/2*cos(πj)
k=1
( j = 0, 1, ..., n-1)
- --- nが奇数のとき ---
-
(n-1)/2
2*xj = a0 + 2Σ(ak*cos(2πkj/n)+bk*sin(2πkj/n))
k=1
( j = 0, 1, ..., n-1)
|
A2. パラメータ DRFFTMR(x, n, isn, icon)
|
- x……
- 入力 --- { x j } または { ak } 、{ bk }
- 出力 --- { n*ak } 、{ n*bk } または { x j }
- 下限が0で大きさがnの1次元配列 x(0:n-1)
- 図1を参照してください。
- n……
- 入力 --- 変換の項数n。
- isn……
- 入力 --- 変換か逆変換かを指定する
- 変換 : isn = +1
- 逆変換: isn = −1
- icon……
- 出力 --- コンディションコード
- 表1を参照してください。
図1
---------- nが偶数の場合 ----------
|
{ x j } |
x0 |
x1 |
x2 |
x3 |
x4 |
x5 |
………… |
xn-2 |
xn-1 |
|
←―
|
n(x(0:n-1)なる1次元配列)
|
―→
|
{ a k }, { b k } |
a0 |
an/2 |
a1 |
b1 |
a2 |
b2 |
………… |
an/2-1 |
bn/2-1 |
|
(注意){ n*a k }, { n*b k } は { a k }, { b k } に準じます
|
|
---------- nが奇数の場合 ----------
|
{ x j } |
x0 |
x1 |
x2 |
x3 |
x4 |
x5 |
………… |
xn-2 |
xn-1 |
|
←―
|
n(x(0:n-1)なる1次元配列)
|
―→
|
{ a k }, { b k } |
a0 |
a1 |
b1 |
a2 |
b2 |
a3 |
………… |
a(n-1)/2 |
b(n-1)/2 |
|
(注意){ n*a k }, { n*b k } は { a k }, { b k } に準じます
|
表1
コード
|
意味
|
0
|
エラー無し
|
1
|
nが1以下
|
2
|
isnが+1または−1ではなかった
|
|
A3. 注意事項
|
A1. 機能 の欄の通り、このプログラムはフーリエ係数 { a k }, { b k } に対して { n*a k }, { n*b k } を、{ x j } に対しては { 2*x j } を求めますので結果の正規化は必要に応じて行ってください。ちなみに本プログラムによって変換・逆変換を正規化せずに連続して実行すると入力データの各要素は 2*n 倍されて出力されます。
|
(B) dcfftmr.dll (倍精度離散型混合基数複素フーリエ変換)
DCFFTMR(cr, ci, n, isn, icon)
|
|
B1. 機能
|
- 1次元(項数n)の実時系列データ { c j } が与えられたときに、離散型複素フーリエ変換またはその逆変換を混合基数を用いた高速手法(FFT)により行います。項数nは2のべき乗に限りません。
- (1) フーリエ変換
- { c j } を入力しフーリエ係数 { n*αk } を求めます。
-
n-1
n*αk = Σ cj*exp(-2πi/n*(kj)) ( k = 0, 1, ..., n-1)
j=0
- (2) フーリエ逆変換
- { αk } 、を入力しフーリエ級数の値 { c j } を求めます。
-
n-1
cj = Σ αk*exp(2πi/n*(kj)) ( j = 0, 1, ..., n-1)
k=0
|
B2. パラメータ DCFFTMR(cr, ci, n, isn, icon)
|
- cr……複素数の実部
- 入力 --- { Re( c j ) } または { Re( αk ) }
- 出力 --- { Re( n*αk ) } または { Re( cj ) }
- 下限が0で大きさがnの1次元配列 cr(0:n-1)
- 図1を参照してください。
- ci……複素数の虚部
- 入力 --- { Im( c j ) } または { Im( αk ) }
- 出力 --- { Im( n*αk ) } または { Im( cj ) }
- 下限が0で大きさがnの1次元配列 ci(0:n-1)
- 図2を参照してください。
- n……
- 入力 --- 変換の項数n。
- isn……
- 入力 --- 変換か逆変換かを指定する
- 変換 : isn = +1
- 逆変換: isn = −1
- icon……
- 出力 --- コンディションコード
- 表1を参照してください。
図1 cr について
{ Re( cj ) } |
Re(c0) |
Re(c1) |
Re(c2) |
………… |
Re(cn-2) |
Re(cn-1) |
|
←―
|
n(cr(0:n-1)なる1次元配列)
|
―→
|
{ Re( α k ) }, |
Re(α0) |
Re(α1) |
Re(α2) |
………… |
Re(αn-2) |
Re(αn-1) |
|
(注意){ n*α k } は { α k } に準じます
|
図2 ci について
{ Im( cj ) } |
Im(c0) |
Im(c1) |
Im(c2) |
………… |
Im(cn-2) |
Im(cn-1) |
|
←―
|
n(ci(0:n-1)なる1次元配列)
|
―→
|
{ Im( α k ) }, |
Im(α0) |
Im(α1) |
Im(α2) |
………… |
Im(αn-2) |
Im(αn-1) |
|
(注意){ n*α k } は { α k } に準じます
|
表1
コード
|
意味
|
0
|
エラー無し
|
1
|
nが1以下
|
2
|
isnが+1または−1ではなかった
|
|
B3. 注意事項
|
B1. 機能 の欄の通り、このプログラムはフーリエ係数 { α k } に対して { n*α k } を求めますので結果の正規化は必要に応じて行ってください。ちなみに本プログラムによって変換・逆変換を正規化せずに連続して実行すると入力データの各要素は n 倍されて出力されます。
|