filter



機能:
時系列のL_Hz〜H_Hz以外の周波数成分のカット

書式:
filter([i],[o],△t(秒),L_Hz,H_Hz)

解説:
次の手順で理想型のバンド・パス・フィルター機能を実現します。
手順1:フーリエ正変換で、入力時系列[i]の数値を周波数空間のものに変換する
手順2:周波数空間で、サンプリング周期dtの時系列数値[i]のL_Hz〜H_Hz以外の周波数成分を除去する(零にクリア)
手順3:フーリエ逆変換で、周波数空間のものを時間空間数値に逆変換し、結果を数値組[o]に出力する
引数L_Hzに零を与えると、ロー・パス・フィルターとなります。
引数H_Hzに十分大きい値を与えると、ハイ・パス・フィルターとなります。
可能な周波数最小刻幅 1/(N・dt)を考慮したうえで周波数バンドパス区間を決めて下さい。
高速フーリエ計算は、使用される数値の個数が、2の整数乗でなくてはいけない性質を持っています。従って、入力数値組のセル総数が2の整数乗個になっていない場合、実際のfft 計算に使用されるのは、入力数値のうちで、先頭部のセル総数を越えない最大の2の整数乗個セルだけです。例えば、入力数値組に[1]を指定し、この組の数値セル総数が120個ある場合、最初の64(64=26<120<27=128)個だけがfft 計算に使用されます。
その他は、関数fft()を参照して下さい。

     [i] ・・・・・・・・・・・・・・・ 時系列数値の入力数値組

     [o] ・・・・・・・・・・・・・・・ 時系列数値の出力数値組

     △t ・・・・・・・・・・・・・・・ 時系列数値のサンプリング周期(単位:秒)

     L_Hz,H_Hz ・・・・・・・・・・・・・・・ バンド・パス周波数の区間(L_Hz<H_Hz)

例1:
filter([2],[7],1/256,1.9,2.1);
例2:
矩形波に対してFFT変換およびフィルタ処理を行って下さい。
理論上では、矩形波が、次式のように、振幅の違い1,3,5,7,9...倍の正弦波によって合成できます。
4/πΣsin(nθ)/n(n = 1,3,5,7,9...)
次の数式では矩形波を作成します。数値個数が256個で、サンプリング周期dtが1/256秒ですので、周波数最小刻幅N・dtがちょうど1Hzになります。
loop(1,256,1){ [20][@] = sign((@+127)%256 - 127.5); };
次の数式では数値組[20]の数値に対して高速フーリエ変換を施し、出力の正変換結果を振幅[6]と位相[6]に変換します。振幅の数値組[6]のデータは、それぞれ矩形波の0,1,2,3,4,5...Hz成分の振幅を表しています。1,3,5...Hzの振幅は、理論値の4/(nπ)とぴったり一致していることも分かります。
tfft([20], [6], [7]);
次の数式では、filter関数を使い、矩形波から0.9〜1.1,2.9〜3.1,4.9〜5.1,6.9〜7.1,8.9〜9.1Hz間の周波数成分を取り出して、さらにこれらの成分を足して矩形波を合成してみました(数値組[19]は合成の矩形波)。
loop(1,5,1){ filter([20], [@], 1/256, @*2-1.1, @*2-0.9); };
[19] = [1]+[2]+[3]+[4]+[5]

return