FFT によるスペクトル解析器
Dependencies: Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real DSP_ADDA
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
Generated on Fri Jul 15 2022 00:11:09 by 1.7.2