#include <flt.h>
flt::CIIRFilterに対する継承グラフ
CIIRFilterは、16bit固定小数点によるIIRフィルタのクラスである。VisauDSP++の iir_fr16()関数のラッパーとして働く。VisualDSP++ 4.0 ( July 2006 update )の iir_fr16()関数は、転置直接型IIのバイクワッドIIRフィルタである。コンストラクタ の引数によって、何段のバイクワッド・フィルタを縦続接続するのか指定できる。
Public メソッド | |
CIIRFilter (const shortfract coeff[], int stage, shortfract d[]=0) | |
内部変数を初期化 | |
virtual | ~CIIRFilter () |
デストラクタ | |
virtual void | run (const shortfract input[], shortfract output[], int count) |
フィルタ実行メソッド | |
Protected 変数 | |
iir_state_fr16 | state |
内部変数 |
flt::CIIRFilter::CIIRFilter | ( | const shortfract | coeff[], | |
int | stage, | |||
shortfract | d[] = 0 | |||
) |
内部変数を初期化
coeff | 伝達関数Hの係数列(係数配列)を与える。 | |
stage | バイクワッド・フィルタの縦続段数を与える | |
d | ディレイラインへのポインタを与える。 |
伝達関数である係数配列とディレイラインには外部から与えられるポインタをそのまま使う。 ディレイラインを与える引数が省略された場合には、内部で割り付けて使う。
バイクワッド・フィルタの伝達関数H(z)は次の形式である。
H(z) = B0 + B1*z^-1 + B1*z^-2 / A0 + A1*z^-1 + A2*z^-2
ここでcoeff[]には、先頭からA2,A1,B2,B1,B0の順で格納する。A0は常に 1であると仮定しており、不要である。2段のバイクワッド・フィルタの 場合には続けて二段目の係数を格納する。
伝達関数の式およびA,Bの符号の表現方法は文献により異なる。 くれぐれも注意すること。
00058 { 00059 00060 00061 if ( d ) { // ディレイラインが与えられたか 00062 givenDelayLine = 1; // 与えられた 00063 state.d = (fract16 *) d; // ディレイラインの設定 00064 } 00065 else{ 00066 givenDelayLine = 0; // 与えられなかった 00067 state.d = (short *)new shortfract[stage*2]; // ディレイラインの割付 00068 } 00069 00070 state.c = (fract16 *)coeff; // 伝達関数の設定 00071 state.k = stage; // 縦続段数の設定 00072 00073 // ディレイラインの初期化 00074 for ( int i=0; i< stage*2; i++ ) 00075 state.d[i] = 0; 00076 }
flt::CIIRFilter::~CIIRFilter | ( | ) | [virtual] |
デストラクタ
コンストラクタが確保した*(state.d)の領域を開放する。
参照先 flt::CFilter::givenDelayLine・state.
00080 { 00081 if ( ! givenDelayLine ) 00082 delete[] state.d; 00083 }
void flt::CIIRFilter::run | ( | const shortfract | input[], | |
shortfract | output[], | |||
int | count | |||
) | [virtual] |
フィルタ実行メソッド
input | shortfract型の入力配列。フィルタへの入力をここに与える。 | |
output | shortfract型の出力配列。フィルタの実行結果がここに格納される。 | |
count | input引数の要素数 |
flt::CFilterを実装しています。
flt::CIIRFilterExで再定義されています。
参照先 state.
00088 { 00089 iir_fr16( // VisualDSP++のフィルタ関数 00090 (fract16 *)input, 00091 (fract16 *)output, 00092 count, 00093 &state 00094 ); 00095 }
iir_state_fr16 flt::CIIRFilter::state [protected] |
内部変数
この変数はVisualDSP++に用意されている関数、iir_fr16用の内部変数である。 構造体になっており、係数配列へのポインタ、ステージ数、ディレイラインへの ポインタなどを収める。