FFT によるスペクトル解析器

Dependencies:   Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real DSP_ADDA

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers IirCascade.hpp Source File

IirCascade.hpp

00001 //---------------------------------------------------
00002 //  縦続形 IIR フィルタ
00003 //
00004 //  2020/11/04, Copyright (c) 2020 MIKAMI, Naoki
00005 //---------------------------------------------------
00006 
00007 #include "Biquad.hpp"
00008 #include "Array.hpp"    // Array クラスが定義されている
00009 using namespace Mikami;
00010 
00011 #ifndef IIR_CASCADE_HPP
00012 #define IIR_CASCADE_HPP
00013 
00014 class IirCascade
00015 {
00016 public:
00017     // コンストラクタ
00018     IirCascade(int order, const Biquad::Coefs ck[], float g0)
00019         : order_(order), hn_((order+1)/2)
00020     { SetCoefs(order, ck, g0); }
00021 
00022     // コンストラクタ
00023     IirCascade(int order, const Biquad hk[], float g0)
00024         : order_(order), hn_((order+1)/2, hk), g0_(g0) {}
00025 
00026     virtual ~IirCascade() {}
00027 
00028     // フィルタ処理を実行する
00029     float Execute(float xn)
00030     {
00031         float yn = g0_*xn;
00032         for (int k=0; k<(order_+1)/2; k++) yn = hn_[k].Execute(yn);
00033         return yn;
00034     }
00035 
00036     // 係数の設定
00037     void SetCoefs(int order, const Biquad::Coefs ck[], float g0)
00038     {
00039         if (order_ != order)
00040         {
00041             order_ = order;
00042             hn_.SetSize((order+1)/2);
00043         }
00044         g0_ = g0;
00045         for (int k=0; k<(order+1)/2; k++) hn_[k].SetCoefs(ck[k]);
00046     }
00047 
00048     // 内部変数(遅延器)のクリア
00049     void Clear()
00050     {   for (int k=0; k<(order_+1)/2; k++) hn_[k].Clear(); }
00051 
00052 private:
00053     int order_;         // 次数
00054     Array<Biquad> hn_;  // Biquad クラスのオブジェクトの配列
00055     float g0_;          // 利得定数
00056 };
00057 #endif  // IIR_CASCADE_HPP