UpDate

FIR型フィルタは、周波数による遅延量を一定にして周波数応答のみ変化させられるという、アナログフィルタにはない特性があります。現在、ほとんどの音源がデジタル化となっているので、たとえば3wayスピーカーのチャンネルデバイダーに応用して減衰特性は-18db/octで遅延量は一定としたり、高音スピーカと低音スピーカの距離分、高音スピーカを遅延させ、各スピーカーのつながりを良くするなど考えられます。

では、設計をしてみましょう。

周波数特性

まず設計するフィルタの周波数応答を考え、サンプリング周波数までをN分割してそれぞれの振幅をg[n]に代入します。たとえば、FS=10kHz N=10 とすると 1kHzずつとなり、LPFで振幅が下がり始める周波数を3kHzとした場合、gの実数部はg[0]=1,g[1]=1,g[2]=1,g[3]=1,g[4]=0,g[5]=0,g[6]=1,g[7]=1,g[8]=1,g[9]=1 となります。直線位相特性(周波数による遅延特性は一定)とするのでgの虚数部は0です。周波数特性はfs/2を中心に左右対称となります。

インパルス応答を計算

インパルス応答とは、非常に短い単発の矩形波を入力したときの応答を表します。

周波数応答を逆DFT変換するとインパルス応答が得られます。

フィルタ係数を得る。

インパルス応答をTAP数分取り出して図のようにシフトさせるとフィルタ係数となります。

使用している係数の数(タップ数)-1がフィルタの次数となります。

カイザー窓

実際には、リップルが生じないように、フィルタ係数にカイザー窓関数を掛け合わせる。

図中のAはdB単位です。

カイザー窓適用後のフィルタ係数は

 hh2[n]=hh[n]*wm[n]

窓関数はいろいろなものがあります。

フィルタの周波数特性のチェック

では、設計できたフィルタの周波数特性をチェックしてみましょう。

フィルタ係数をDFT処理すれば、周波数特性が算定できます。

フィルタを設計する簡単なプログラム

Borland C++ 5.5(フリーコマンドライン版)

Visual C++ 5

でコンパイルして実行できました。

H16.12.27版にパラメータの保存機能を追加しました。保存すると実行フォルダにpara.csvファイルが作成されます。

fir.lzh H18.1.2

実行画面

z変換

サンプリングされたデーターがである場合、 z変換は以下のように定義される。

たとえば、 0,1,2,3,4<>というサンプリングされたデーターがある場合、

z 変換すると