#include <flt.h>
flt::CIIRFilterExに対する継承グラフ
CIIRFilterExは、16bit固定小数点によるIIRフィルタのクラスである。VisauDSP++の iir_fr16_ex()関数のラッパーとして働く。VisualDSP++ 4.0 ( July 2006 update )の iir_fr16_ex()関数は、転置直接型IIのバイクワッドIIRフィルタである。コンストラクタ の引数によって、何段のバイクワッド・フィルタを縦続接続するのか指定できる。
Public メソッド | |
CIIRFilterEx (const shortfract coeff[], const short scale[], int stage, shortfract d[]=0) | |
内部変数を初期化 | |
virtual void | run (const shortfract input[], shortfract output[], int count) |
フィルタ実行メソッド | |
Protected 変数 | |
const short * | scaleFactor |
スケールファクタへのポインタ 外部から与えられるスケールファクターの配列へのポインタを格納する。 |
flt::CIIRFilterEx::CIIRFilterEx | ( | const shortfract | coeff[], | |
const short | scale[], | |||
int | stage, | |||
shortfract | d[] = 0 | |||
) | [inline] |
内部変数を初期化
coeff | 伝達関数Hの係数列(係数配列)を与える。 | |
stage | バイクワッド・フィルタの縦続段数を与える | |
scale | 係数の補正量を与える配列 | |
d | ディレイラインへのポインタを与える。 |
伝達関数である係数配列とディレイラインには外部から与えられるポインタをそのまま使う。 ディレイラインを与える引数が省略された場合には、内部で割り付けて使う。
バイクワッド・フィルタの伝達関数H(z)は次のようにあらわす
H(z) = B0 + B1*z^-1 + B1*z^-2 / A0 + A1*z^-1 + A2*z^-2
ここでcoeff[]には、先頭からA02/k0,A01/k0,B02/k0,B01/k0,B00/k0, A12/k1,A11/k1,B12/k1,B11/k1,B10/k1,の順で格納する。An0は常に 1であると仮定しており、不要である。
上記の伝達関数に於いてkは係数の補正を行う係数である。バイクワッド の各段は固有の係数kを持つことができる。n段目のバイクワッドの係数 knは次の式でもとめる。 kn=2^pn。ここでpnは、引数scaleに与える n番目の値である。たとえば、scaleが { 0, 2 }であれば、2段の バイクワッドの係数補正量kは初段が0、次段が4である。
伝達関数の式およびA,Bの符号の表現方法は文献により異なる。 くれぐれも注意すること。
参照先 scaleFactor.
00181 : CIIRFilter( coeff, stage, d ){ scaleFactor = scale;}
void flt::CIIRFilterEx::run | ( | const shortfract | input[], | |
shortfract | output[], | |||
int | count | |||
) | [virtual] |
フィルタ実行メソッド
input | shortfract型の入力配列。フィルタへの入力をここに与える。 | |
output | shortfract型の出力配列。フィルタの実行結果がここに格納される。 | |
count | input引数の要素数 |
flt::CIIRFilterを再定義しています。
参照先 scaleFactor・flt::CIIRFilter::state.
00147 { 00148 _iir_fr16_ex( // VisualDSP++のフィルタ関数 00149 (fract16 *)input, 00150 (fract16 *)output, 00151 count, 00152 &state, 00153 scaleFactor 00154 ); 00155 }