フーリエ級数を利用したFIRフィルタの設計
FIRフィルタの代表的な設計方法に、フーリエ級数を利用する方法がある。
伝達関数のタップ係数とフーリエ級数の展開係数とを一致させる手法。
今回は、フィルタ次数Mが偶数次の場合について話を進めていく。
FIRフィルタの伝達関数は、一般に下式で表される。
ここで、
よって、
FIRフィルタの周波数特性は、下記のようになる。
...式(1)
フーリエ係数とは?
一般に、周期Pを有する周期関数C(x)は、下式のように複素形式のフーリエ級数和で表現されることが分かっている。
...式(2)
ここで、cmは、フーリエ係数と呼ばれ、下記の計算式で算出され、一般的に複素数である。
...式(3)
そこで、変数xを正規化周波数Ωとし、C(x)に相当する周期P=2πの周波数関数は、式(2)、式(3)より、
...式(4)
ただし、
...(式5)
とフーリエ級数展開出来る。
ただし、フーリエ係数cmをFIRフィルタで実現しようとすると、以下の二点で不可能なことが明白である。
① フーリエ係数は、理論上インパルス応答が無限に続く
② インパルス応答が負の時間領域にも存在しているため、因果性を満たしていない。
そのため、フーリエ係数を有限項で表す、つまり無限時間のインパルス応答を有限時間で打ち切り、
加えて因果性を満たすように一定量の遅延時間を与え、有限時間のインパルス応答とすることで、FIRフィルタの設計が可能となる。
式(1)のFIRフィルタの周波数特性と
...式(1)
式(4)のフーリエ級数展開とを比べると、
...式(4)
FIRフィルタのタップ係数が、フーリエ係数を、-M/2<=m<=M/2の範囲で打ち切ったものに一致することが分かる。
因果性を満たすように一定量の遅延時間を与えるため、
とし、フーリエ係数としてのFIRフィルタのインパルス応答をM/2サンプルだけ遅らせることによって、因果性を満足するよう
に位相を付与する。
式(1)で示したFIRフィルタの周波数特性は、変数zを用いて、
...式(1)
と表現され、
最終的に、FIRフィルタの伝達関数H(z)は、フーリエ係数を用いて、
...式(5)※線形位相LPFと呼ぶ。
ただし、...式(6)※零位相LPFと呼ぶ。
と求めることが出来る。
ローパス形FIRフィルタの設計
サンプリング周波数ft=100[Hz]、遮断周波数fc=20[Hz]、次数M=18[次]とするFIRフィルタを設計する。
今、理想的なゼロ位相ローパス特性を上図のように定義する。 -Ωc <= Ω <= -Ωc は、通過域の範囲を示す。
理想的なローパスフィルタの周波数特性は、上図、淡色表示したように、
と表され、式(5)で示したフーリエ係数算出式に代入すると、
...(式5)
となり、この定積分式を解くと、下記を得る。
これを元に、FIRフィルタのタップ係数を与えることが出来る。
scilabコマンド
-->sfrq=100;T=1/sfrq;
-->fc=20;oc=2*%pi*fc/sfrq;
-->jisu=18;
-->mm=-jisu/2:1:jisu/2;
-->moc=mm*oc;
-->moc=moc+(moc==0)*%eps;
-->cm=oc/%pi*(sin(moc) ./moc);
-->hz0=p^mm*cm'
hz0 =
2 3 4 5 6 7
- 0.0336367 - 0.0233872z + 0.0267283z + 0.0504551z - 1.559D-17z - 0.0756827z - 0.0623660z + 0.0935489z
8 9 10 11 12 13 14 15
+ 0.3027307z + 0.4z + 0.3027307z + 0.0935489z - 0.0623660z - 0.0756827z - 1.559D-17z + 0.0504551z
16 17 18
+ 0.0267283z - 0.0233872z - 0.0336367z
---------------------------------------------------------------------------------------------------------
9
z
-->pfspec(hz0,1);
-->hz=z^(-jisu/2)*hz0;
-->pfspec(hz,2);
結果表示
ゼロ位相 H0(z)の利得表示(赤色)、実数部(黄緑)、位相(黄緑)表示
線形位相 H(z)の利得表示(赤色)、実数部(黄緑)、位相(黄緑)表示