fft



機能:
高速フーリエ正逆変換

書式:
fft([i実],[i虚],[o実],[o虚],正:0/逆:1)

解説:
[i実],[i虚]をそれぞれ実数部、虚数部とする複素数型数値に対して高速フーリエ変換を施し、得られた複素数型の結果を数値組[o実],[o虚]に出力します。
fft計算の数値個数について
高速フーリエ計算は、使用される数値の個数が、2の整数乗でなくてはいけない性質を持っています。従って、入力数値組のセル総数が2の整数乗個になっていない場合、実際のfft計算に使用されるのは、入力数値のうちで、先頭部のセル総数を越えない最大の2の整数乗個セルだけです。例えば、入力数値組に[1]を指定し、この組の数値セル総数が120個ある場合、最初の64(64=26<120<27=128)個だけがfft計算に使用されます。
出力周波数の計算について
正変換の場合は、入力数値のサンプリング周期をdt(秒)、入力数値の総数をN(N=2のn乗:n=1,2,3,...12)とすると、出力数値[o実],[o虚]の周波数は、次のようになります。
セル1:0 [Hz]
セル2:1/(N・dt) [Hz]
セル3:2/(N・dt) [Hz]
.......
セルN/2:(N/2-1)/(N・dt) [Hz]
注意:出力周波数の最小刻み幅が1/(N・dt)ですので、刻み幅より細かい周波数変化やちょうど刻み幅の中に位置する周波数ピークなどは求められません。
例えば、周波数ピークが6Hzの波形の場合、刻み幅を0.8Hzとすると、真の6Hzのピークからはずれた5.6Hzと6.4Hzの周波数情報しか求められません。
出力周波数の最小刻み幅を狭めるには、変換数値の個数を増やさなければなりません。
fft関数の信号とウィンドウ関数について
fft関数では、本来無限時間続く信号を、有限時間の信号の繰り返しとみなして処理します。つまり、有限時間幅の終わりの信号の次に、区間の初めの信号がつながることになります。つながりが不連続になっていると、変換結果に高周波のノイズが入り込んでしまいます。そこで、区間の初めと終りの信号の大きさを小さくし、不連続性を軽減するためには、ウィンドウ関数が使用されるわけです。
数値個数を増やす方法について
基本的に、block_ins()等の数値組演算関数で、元の数値の両端に零値の数値を追加すれば、数値個数は増やされますが、追加数値と元数値の不連続に起因する高周波数のノイズを無くすために、数値個数追加の前、元数値に対しウィンドウ関数による処理をかけるのが普通です。活図では、このようなウィンドウ処理と数値個数追加機能を合わせて行える便利な関数としてwin_left()、win_right()が用意されています。

     [i実],[i虚] ・・・・・・・・・・・・・・・ 実数部と虚数部の入力数値組

     [o実],[o虚] ・・・・・・・・・・・・・・・ 結果の実数部と虚数部の出力数値組

     正:0/逆:1 ・・・・・・・・・・・・・・・ フーリエ変換方向(0:正変換、1:逆変換)

参照:tfft,filter各種のウィンドウ関数

例:fft([1],[2],[6],[7],0);


return