3-01 FIRフィルタのEXCELシートの説明

 本章ではFIR型フィルタについて説明します(*1)。このExcelをダウンロードして開いてみましょう。最初のREADMEシート(図3‐01)にEXCELファイルの簡単な説明があります。FIRフィルタは係数の数が多いので、F特や出力の計算にはVBAを使用します。

(*1)Finite Impulse Response、インパルス応答が有限長。通常は数十〜数百個の係数からなる。

  図3-01 最初のシートREADME

●隣のシートにFIRフィルタの係数がある

 
f-responseシートを見ると図3‐02のようにD列にFIRの係数があります。h[0]〜h[139]まで140個、すなわち
140タップ、140次のFIRフィルタになります。これら係数に対する周波数特性をこのシートおよびVBAで計算します。

  図3-02 周波数特性計算シート

●各周波数に対する特性を求める

 A列(freq-base)は0〜70までの連番。
 B列(frequency)はそれに定数(100、図3‐01のB6セル値)を掛けたもので、0〜7000Hz、100Hz刻みの周波数特性を求めます。
 C列(omega)はそれに(2π/サンプリング周波数)を掛けたもので、omega = πになる周波数がナイキスト周波数になります(*2)。

(*2)この例ではサンプリング44100Hz(図3‐01のB4セル値)なので、ナイキストは22050Hz、その周波数でomegaがπ(=3.14)になる。7000Hzは3.14 / 22050 * 7000 = 0.997[rad]になっている。

  図3-03 この例では0〜7000Hzまで、100Hz刻みで求める

●EXCELとVBAのコンビネーションで計算

 FIRフィルタは係数(D列)が140と多いので
VBAを使って周波数特性を求めます。図3‐04のように開発タブからVisual Basicを選択(開発タブが見つからない場合はファイル→オプション→ユーザ設定→開発をチェック)。

  図3-04 Visual Basic for Applicationを使う

●複素数の実数部と虚数部を計算するVBA

 VBAのウインドウから
Module1を開きます。三角マーク(図3‐05)をクリックして実行すると、f-responseシートのE列(AReal1)とF列(AImag1)が計算されます。E列は周波数特性の「実数部」、F列は「虚数部」になります(*3)。

(*3)周波数特性は複素数になります(このページ参照)

  図3-05 係数が140個もあるのでVBAでEXCEL関数を生成して計算

●絶対値をdBでプロットする

 G列(Gain[dB])は複素数の絶対値で、これが「
振幅特性」になります。図3‐06のように対数をとり、dB値にして(*4)横軸を周波数としてプロットします。

(*4)複素数の絶対値の「2乗」なので10*LOGで良い。

 グラフを見るとLPF(Low Pass Filter, 低域通過フィルタ)であることが分かります。2kHzから3kHzにかけて一気に80dB以上減衰しています。タップ数(係数の数)が140もあればこのような急峻な周波数特性を得ることができます。


  図3-06 f-responseシートの右の方にグラフがある

●位相はATAN2関数で求める

 H列(Theta[rad])は複素数の角度で、これが「位相特性」になります。図3-07ではギザギザな特性になっていますが、これはアークタンジェント関数によるもので(*5)、実際は
まっすぐ右下に伸びていくと考えましょう。

(*5)"ATAN"関数は戻り値の範囲が-π/2〜+π/2、"ATAN2"関数は-π〜+πの範囲をとり得る。この範囲を超えると折り返して上から出てくるのでギザギザになる。

  図3-07 このような特性を
直線位相特性という

次のページへ

目次へ戻る