アルゴリズム (IIRフィルタ)

IIR(Infinite Impulse Response、無限インパルス応答)フィルタは次の図のように、フィードバックを行うデジタルフィルタです。

Image:IIR_Filter_1.png

デジタルフィルタはよく、差を表す数式で表記され、入力シグナルと出力シグナルの関係を定義します。

b_0*x(n)+b_1*x(n-1)+ \cdots +b_N*x(n-N)-a_0*y(n)-a_1*y(n-1)- \cdots -a_M*y(n-M) = 0

このように変形します。

y(n) = \frac{1}{a_0} \left ( b_0*x(n)+b_1*x(n-1)+ \cdots +b_N*x(n-N)-a_1*y(n-1)-a_2*y(n-2)- \cdots -a_M*y(n-M) \right ) = \frac{1}{a_0} \left ( \sum_{i=0}^N b_i*x(n-i) - \sum_{j=1}^M a_j*y(n-j) \right )

 a_0 \ne 0 の中で、Nはフィードフォワードフィルタの順番、 b_i はフィードフォワードの係数、Mはフィードバックフィルタの順番、 a_i はフィードバックの係数、x(n)は入力シグナル、y(n)は出力シグナルを表します。 \sum_{j=1}^M a_j*y(n-j)  の表記がフィードバックを表します。

デジタルフィルタ表現

OriginではIIRフィルタの出力表現が4種類あります。

IIRフィルタを設計するには

IIRフィルタを設計する一般的な手順は次の通りです。

  1. まず、フィルタの仕様を指定します。
  2. ローパスアナログフィルタのプロトタイプを指定します。OriginでサポートされているプロトタイプはButterworth、Chebyshev Type I、Chebyshev Type II、Ellipticです。
    手法 大きさの二乗の反応関数 アナログフィルタの転嫁関数
    Butterworth |H_a(j \Omega)|^2 = \frac{1}{1+ \Omega^{2N}} H_a(s) = \frac{q(s)}{p(s)} = \frac{g}{(s-p_1)(s-p_2)\cdots (s-p_N)} = \frac{g}{\prod_{k=1}^N (s-p_k)}
    Chebyshev Type I |H_a(j \Omega)|^2 = \frac{1}{1+ \varepsilon^2 T_N^2(\Omega)} H_a(s) = \frac{q(s)}{p(s)} = \frac{g}{(s-p_1)(s-p_2)\cdots (s-p_N)} = \frac{g}{\prod_{k=1}^N (s-p_k)}
    Chebyshev Type II |H_a(j \Omega)|^2 = \frac{1}{1+ (\varepsilon^2 T_N^2(\frac{1}{\Omega}))^{-1}} = \frac{\varepsilon^2 T_N^2(\frac{1}{\Omega})}{1+ \varepsilon^2 T_N^2(\frac{1}{\Omega})} H_a(s) = \frac{q(s)}{p(s)} = g \frac{(s-q_1)(s-q_2)\cdots (s-q_N)}{(s-p_1)(s-p_2)\cdots (s-p_N)} = g \prod_{k=1}^N \frac{(s-q_k)}{(s-p_k)}
    Elliptic |H_a(j \Omega)|^2 = \frac{1}{1+ \varepsilon^2 U_N^2(\Omega)} H_a(s) = \frac{q(s)}{p(s)} = g \frac{(s-q_1)(s-q_2)\cdots (s-q_N)}{(s-p_1)(s-p_2)\cdots (s-p_N)} = g \frac{\prod_{i=1}^N (s-q_i)}{\prod_{j=1}^N (s-p_j)}

    上記表で、 \Omegaは周波数、Nはフィルタの順番、 \varepsilonは通過帯域の周波数反応内での最大振幅、T_NはChebyshev多項式、U_NはJacobian楕円関数、gはスケーラゲイン、sはラプラス変換の面、q_kまたはq_iはゼロ、そしてp_kまたはp_jは極を表します。

  3. アナログフィルタのための周波数変換

    ローパスフィルタをハイパス、バンドパス、バンドストップフィルタに変換するには希望のカットオフ周波数を使用します。Originでは、状態空間法が周波数変換計算において使用されます。ローパスフィルタの元の変換関数はH(s')として仮定され、返還後の変換関数はH(s)になります。

    • ローパスからローパスへは、アナログローパスフィルタをカットオフ周波数1ラジアン/秒でローパスフィルタに流し込み、そのうえで特定のカットオフ周波数を使用して変換します。
      H(s)= H(s')|_{s'=s/\omega_0}
    • ローパスからハイパス
      H(s) = H(s')|_{s'=\omega_0/s}
    • ローパスからバンドパス
      H(s) = H(s')|_{s'= \frac{\omega_0}{B_{\omega}} \frac{(s/\omega_0)^2+1}{s/\omega_0}}
    • ローパスからバンドストップ
      H(s) = H(s')|_{s'= \frac{B_{\omega}}{\omega_0} \frac{s/\omega_0}{(s/\omega_0)^2+1}}

    ここで、 \omega_0 = sqrt(\omega_1*\omega_2)は中央の周波数、B_\omega = \omega_2 - \omega_1はバンド幅、\omega_1\omega_2は下側と上側のハンド幅の角になります。

  4. アナログフィルタをデジタルフィルタに変換します。

    アナログフィルタをデジタルフィルタに変換するのに、Originは次式で定義される双線形変換で定義します。

    s = \frac{1-z^{-1}}{1+z^{-1}}

前方と後方フィルタリング

Originは前方と後方フィルタリングを行う事ができ、これはゼロ段階歪みとしいう結果になります。まず、これはデータを前方でフィルタリングし、それからフィルタをかけたデータを逆順にしてからフィルタを通過させます。