不韋 呂 / F746_MySoundMachine

Dependencies:   F746_GUI F746_SAI_IO FrequencyResponseDrawer SD_PlayerSkeleton UIT_FFT_Real

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers IIR_Cascade.hpp Source File

IIR_Cascade.hpp

00001 //------------------------------------------------------------------------------
00002 //  縦続形 IIR フィルタのクラス
00003 //
00004 //  2017/04/07, Copyright (c) 2017 MIKAMI, Naoki
00005 //------------------------------------------------------------------------------
00006 
00007 #ifndef IIR_CASCADE_HPP
00008 #define IIR_CASCADE_HPP
00009 
00010 #include "Biquad.hpp"
00011 #include "Array.hpp"
00012 
00013 namespace Mikami
00014 {
00015     class IIR_Cascade
00016     {
00017     public:
00018         // コンストラクタ
00019         IIR_Cascade(int order, const Biquad::Coefs ck[], float g0)
00020             : ORDER2_(order/2), G0_(g0), hk_(ORDER2_)
00021         {
00022             if ((order % 2) != 0)
00023             {
00024                 fprintf(stderr, "\r\nOrder is not even number.\r\n");
00025                 while (true) {}
00026             }
00027             for (int n=0; n<order/2; n++) hk_[n] = Biquad(ck[n]);
00028             Clear();
00029         }
00030 
00031         // デストラクタ
00032         ~IIR_Cascade() {}
00033 
00034         // 過去の計算結果を格納する遅延器のクリア
00035         void Clear()
00036         {
00037             for (int k=0; k<ORDER2_; k++) hk_[k].Clear();
00038         }
00039 
00040         // フィルタ処理の実行
00041         float Execute(float xn)
00042         {
00043             float yn = G0_*xn;
00044             for (int k=0; k<ORDER2_; k++) yn = hk_[k].Execute(yn);
00045             return yn;
00046         }
00047 
00048     private:
00049         const int ORDER2_;      // 次数/2
00050         const float G0_;        // 利得定数
00051 
00052         Array<Biquad> hk_;      // 2 次の IIR フィルタのオブジェクトの配列
00053 
00054         // disallow copy constructor and assignment operator
00055         IIR_Cascade(const IIR_Cascade&);
00056         IIR_Cascade& operator=(const IIR_Cascade&);
00057     };
00058 }
00059 #endif  // IIR_CASCADE_HPP