FIRフィルタ

WEB上の設計ツールを使って、FIRフィルタを作成し、試験信号で確認します。

ソースコードやプロジェクトファイルのダウンロードはこちら →fir.zip

(1)雑音入り正弦波による試験用のプログラムです。
ブロック図
プログラム
coef = "fir_coef.csv";        // FIRフィルタ係数ファイル
dim = 31;                     // FIRフィルタ段数
dtMsec=1;                     // 演算周期(ミリ秒)
proc 
{ 
    signal = Ain( 0, 0, 1 );                     // アナログ入力ch0
    test = w_sin( period, 0, 1 ) + gauss( sd );  // 試験信号

    if mode>0 { FIRin = signal; }     // mode>0 ならアナログ入力 
    else      { FIRin = test; }       // mode=0 ならシミュレーション

    FIRout = fir( FIRin, dim, coef ); // FIRフィルタ

    Aout( 0, 0, 1, FIRout );     // アナログ出力ch0:フィルタ出力 
    Aout( 1, 0, 1, test );       // アナログ出力ch1:試験信号出力
} 
記号

以下の関数、信号、パラメータを使っています。 ソースコードで宣言したパラメータの値を操作パネルから変更はできません。

関数
(予約語)
 Ainアナログ入力ポートの電圧を数値化する関数です。
 Aoutアナログ出力ポートへ電圧を発生させる関数です。
 w_sin正弦波発生関数です。
 gauss白色正規雑音を発生させる関数です。
 firFIRフィルタ関数です。
信号 inputアナログ入力です
 signal試験用信号です
 FIRinフィルタ入力です
 FIRoutフィルタ出力です
パラメータ coef FIRフィルタの係数ファイル名です
 dimFIRフィルタの段数です。
 dtMsec予約語です。演算周期を1msに固定します。
 period試験用信号の周期です。
 sd試験用信号のノイズの標準偏差です。
 mode入力信号の切換に使います。
例えば、m=0なら試験信号 test がフィルタの入力となり、 m=1ならアナログ入力した信号 signal がフィルタの入力になります。

説明

石川高専山田洋二研究室ホームページ http://dsp.jpn.org/dfdesign/のメニューから 「FIRフィルタ設計」の「窓関数法」を選択し、下図左のように設計パラメータを入力して「設計する」ボタンを押しますと、下図右のような結果が得られます。

この計算結果の、Nを除く31個の数値をそのままテキストファイルに貼り付け、 "fir_coef.csv"という名前でプロジェクトファイルのあるフォルダに保存します。

宣言したパラメータ dim の値は、フィルタ長 N=31 と一致させねばなりません。

設定例
記録例


 

(2)試験部を削除した実用のプログラムです。
ブロック図
プログラム
coef = "fir_coef.csv";        // FIRフィルタ係数ファイル
dim = 31;                     // FIRフィルタ段数
dtMsec=1;                     // 演算周期(ミリ秒)
proc 
{ 
    FIRin  = Ain( 0, 0, 1 );	// アナログ入力ch0
    FIRout = fir( FIRin, dim, coef );// FIRフィルタ
    Aout( 0, 0, 1, FIRout );	// アナログ出力ch0:フィルタ出力
}