flt.h

説明を見る。
00001 #pragma once
00002 #include <filter.h>
00003 #include <shortfract>
00004 /** フィルター・クラス・ヘッダーファイル
00005 * \file flt.h
00006 * fltクラス・ライブラリの宣言を行うヘッダ。フィルタ・クラスを使う場合には必ず見込む。名前空間はflt。
00007 */
00008 
00009 /** フィルター・クラスの名前空間
00010 * IIRフィルタ、FIRフィルタなどのクラスを提供する名前空間。
00011 */
00012 namespace flt{  
00013 /** フィルタクラス
00014 *
00015 */
00016     class CFilter{
00017     protected:
00018     /** ディレイライン割付フラグ
00019      * 外部からディレイ・ラインが割り付けられたときに1にしておく。
00020      */
00021         short givenDelayLine;
00022     public:
00023 /** 便宜上のデストラクタ
00024 *
00025 * このデストラクタは何もしない。しかし、すべての子孫のクラスのデストラクタを
00026 * 仮想デストラクタにするために、ここで便宜上virtual宣言を行う。
00027 */
00028         virtual ~CFilter(){};
00029 /** 純粋仮想フィルタ・メソッド
00030  * \param input shortfract型の入力配列。フィルタへの入力をここに与える。
00031  * \param output shortfract型の出力配列。フィルタの実行結果がここに格納される。
00032  * \param count input引数の要素数
00033 *
00034 * input[]で受け取ったデータ列にフィルタ処理を施して、outpu[]に出力する。
00035 * 処理を行うデータ個数はcountで指定する。
00036 *
00037 * このメソッドは純粋仮想メソッドであるため実際には何も実装しない。
00038 * 実装は子孫のクラスが行う。
00039 */
00040         virtual void run( const shortfract input[], shortfract output[], int count )=0;
00041 
00042     };
00043 
00044 
00045 /** FIRフィルタクラス
00046 *
00047 * CFirFilterは、16bit固定小数点によるFIRフィルタのクラスである。VisauDSP++の
00048 * fir_fr16()関数のラッパーとして働く。
00049 */
00050     class CFIRFilter : public CFilter{
00051     protected:
00052     /** 内部変数
00053     *
00054     * この変数はVisualDSP++に用意されている関数、fir_fr16用の内部変数である。
00055     * 構造体になっており、係数配列へのポインタ、タップ数、ディレイラインへの
00056     * ポインタなどを収める。
00057     */  
00058         fir_state_fr16 state;
00059     public:
00060     /** 内部変数を初期化
00061     * @param h 伝達関数H(係数配列)を与える。
00062     * @param tap フィルタのタップ数を与える
00063     * @param d ディレイラインへのポインタを与える。
00064     *
00065     * このコンストラクタは内部変数stateの初期化を行う。
00066     *
00067     * 伝達関数である係数配列とディレイラインには外部から与えられるポインタをそのまま使う。
00068     * ディレイラインを与える引数が省略された場合には、内部で割り付けて使う。
00069     */
00070         CFIRFilter( const shortfract h[], int tap, shortfract d[] = 0 );
00071     /** デストラクタ
00072     *
00073     * コンストラクタが確保した*(state.d)の領域を開放する。
00074     */
00075         virtual ~CFIRFilter();
00076     /** フィルタ実行メソッド
00077      * \param input shortfract型の入力配列。フィルタへの入力をここに与える。
00078      * \param output shortfract型の出力配列。フィルタの実行結果がここに格納される。
00079      * \param count input引数の要素数
00080      * 
00081      * VisualDSP++のfir_fr16のラッパーメソッドとして働く。
00082     */
00083         virtual void run( const shortfract input[], shortfract output[], int count );
00084 
00085     };
00086     
00087 /** バイクワッドIIRフィルタクラス
00088 *
00089 * CIIRFilterは、16bit固定小数点によるIIRフィルタのクラスである。VisauDSP++の
00090 * iir_fr16()関数のラッパーとして働く。VisualDSP++ 4.0 ( July 2006 update )の
00091 * iir_fr16()関数は、転置直接型IIのバイクワッドIIRフィルタである。コンストラクタ
00092 * の引数によって、何段のバイクワッド・フィルタを縦続接続するのか指定できる。
00093 */
00094     class CIIRFilter : public CFilter{
00095     protected:
00096     /** 内部変数
00097     *
00098     * この変数はVisualDSP++に用意されている関数、iir_fr16用の内部変数である。
00099     * 構造体になっており、係数配列へのポインタ、ステージ数、ディレイラインへの
00100     * ポインタなどを収める。
00101     */  
00102         iir_state_fr16 state;
00103     public:
00104     /** 内部変数を初期化
00105     * @param coeff 伝達関数Hの係数列(係数配列)を与える。
00106     * @param stage バイクワッド・フィルタの縦続段数を与える
00107     * @param d ディレイラインへのポインタを与える。
00108     *
00109     * このコンストラクタは内部変数stateの初期化を行う。
00110     *
00111     * 伝達関数である係数配列とディレイラインには外部から与えられるポインタをそのまま使う。
00112     * ディレイラインを与える引数が省略された場合には、内部で割り付けて使う。
00113     *
00114     * バイクワッド・フィルタの伝達関数H(z)は次のようにあらわす
00115     *
00116     * H(z) = B0 + B1*z^-1 + B1*z^-2 / A0 + A1*(z^-1) + A2*(z^-2)
00117     *
00118     * ここでcoeff[]には、先頭からA2,A1,B2,B1,B0の順で格納する。A0は常に
00119     * 1であると仮定しており、不要である。2段のバイクワッド・フィルタの
00120     * 場合には続けて二段目の係数を格納する。
00121     *
00122     * 伝達関数の式およびA,Bの符号の表現方法は文献により異なる。
00123     * くれぐれも注意すること。
00124     */
00125         CIIRFilter( const shortfract coeff[], int stage, shortfract d[] = 0 );
00126     /** デストラクタ
00127     *
00128     * コンストラクタが確保した*(state.d)の領域を開放する。
00129     */
00130         virtual ~CIIRFilter();
00131     /** フィルタ実行メソッド
00132      * \param input shortfract型の入力配列。フィルタへの入力をここに与える。
00133      * \param output shortfract型の出力配列。フィルタの実行結果がここに格納される。
00134      * \param count input引数の要素数
00135      * 
00136      * VisualDSP++のiir_fr16のラッパーメソッドとして働く。
00137     */
00138         virtual void run( const shortfract input[], shortfract output[], int count );
00139     };
00140     
00141 /** デシメーター・クラス
00142 *
00143 * CDecimatorは、16bit固定小数点によるIIRフィルタのクラスである。VisauDSP++の
00144 * fir_decima_fr16()関数のラッパーとして働く。
00145 */
00146     class CDecimator : public CFIRFilter{
00147     public:
00148     /** 内部変数を初期化
00149     * @param h 伝達関数H(係数配列)を与える。
00150     * @param tap フィルタのタップ数を与える
00151     * @param ratio デシメーション比を与える
00152     * @param d 内部ディレイライン
00153     *
00154     * このコンストラクタは内部変数stateの初期化を行う。ただし、
00155     * 多くの初期化をCFIRFilter::CFIRFilterから継承しているので
00156     * 実際にはデシメーション比を内部変数に格納しているだけである。
00157     *
00158     * 伝達関数である係数配列とディレイラインには外部から与えられる
00159     * ポインタhをそのまま使う。ディレイラインの長さはtapである。
00160     * ディレイラインを与える引数が省略された場合には、内部で割り付けて使う。
00161     */
00162         CDecimator( const shortfract h[], int tap, int ratio, shortfract d[] = 0 );
00163     /** フィルタ実行メソッド
00164      * \param input shortfract型の入力配列。フィルタへの入力をここに与える。
00165      * \param output shortfract型の出力配列。フィルタの実行結果がここに格納される。
00166      *         サイズはcount/デシメーション比。
00167      * \param count input引数の要素数。この値はCDecimator::CDecimatorで与えたデシメーション比の
00168      * 整数倍でなければならない
00169      *
00170      * VisualDSP++のfir_decima_fr16のラッパーメソッドとして働く。
00171     */
00172         virtual void run( const shortfract input[], shortfract output[], int count );
00173     };
00174     
00175 /** インターポレーター・クラス
00176 *
00177 * CDecimatorは、16bit固定小数点によるIIRフィルタのクラスである。VisauDSP++の
00178 * fir_interp_fr16()関数のラッパーとして働く。
00179 */
00180     
00181     class CInterpolator : public CFIRFilter{
00182     public:
00183     /** 内部変数を初期化
00184     * @param h 伝達関数H(係数配列)を与える。
00185     * @param tap フィルタのタップ数を与える。インターポレーション比の整数倍でなければならない。
00186     * @param ratio インターポレーション比を与える
00187     * @param d 内部ディレイライン
00188     *
00189     * このコンストラクタは内部変数stateの初期化を行う。ただし、
00190     * 多くの初期化をCFIRFilter::CFIRFilterから継承している。
00191     * ディレイラインとして与える配列の長さはtap/ratioにする。
00192     * ディレイラインを与える引数が省略された場合には、内部で割り付けて使う。
00193     *
00194     * 
00195     */
00196         CInterpolator( const shortfract h[], int tap, int ratio, shortfract d[] = 0 );
00197     /** フィルタ実行メソッド
00198      * \param input shortfract型の入力配列。フィルタへの入力をここに与える。
00199      * \param output shortfract型の出力配列。フィルタの実行結果がここに格納される。
00200      *         サイズはcount*インターポレーション比。
00201      * \param count input引数の要素数。
00202      *
00203      * VisualDSP++のfir_interp_fr16のラッパーメソッドとして働く。
00204     */
00205         virtual void run( const shortfract input[], shortfract output[], int count );
00206     };
00207 }; // namespace flt

FIR filter sample by wrapper classに対してTue Dec 19 23:23:06 2006に生成されました。  doxygen 1.5.1-p1