![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Demo program of digital signal processing: Variable LPF/HPF, Vocal canceller, Pitch shifter, Reverbrator. ディジタル信号処理のデモプログラム. 遮断周波数可変 LPF/HPF,ボーカルキャンセラ,ピッチシフタ,残響生成器.
Dependencies: Array_Matrix F446_AD_DA UIT_AQM1602 mbed
IIR_Cascade.hpp
00001 //-------------------------------------------------------------- 00002 // IIR filter ---- Cascade structure 00003 00004 // 2017/01/26, Copyright (c) 2017 MIKAMI, Naoki 00005 //-------------------------------------------------------------- 00006 00007 #ifndef IIR_CASCADE_HPP 00008 #define IIR_CASCADE_HPP 00009 00010 #include "mbed.h" 00011 #include "Biquad.hpp" 00012 #include "Array.hpp" 00013 using namespace Mikami; 00014 00015 namespace Mikami 00016 { 00017 // IIR filter -- Cascade structure 00018 class IirCascade 00019 { 00020 public: 00021 IirCascade(int order, float g0 = 1, 00022 const Biquad::Coefs ck[] = NULL) 00023 : ORDER2_(order/2), hk_(order/2) 00024 { 00025 if (ck != NULL) SetCoefs(g0, ck); 00026 else g0_ = g0; 00027 } 00028 00029 void SetCoefs(float g0, const Biquad::Coefs ck[]) 00030 { 00031 g0_ = g0; 00032 for (int k=0; k<ORDER2_; k++) hk_[k].SetCoefs(ck[k]); 00033 } 00034 00035 void GetCoefs(float &g0, Biquad::Coefs ck[]) 00036 { 00037 g0 = g0_; 00038 for (int k=0; k<ORDER2_; k++) hk_[k].GetCoefs(ck[k]); 00039 } 00040 00041 float Execute(float xn) 00042 { 00043 float yn = g0_*xn; 00044 for (int k=0; k<ORDER2_; k++) 00045 yn = hk_[k].Execute(yn); 00046 00047 return yn; 00048 } 00049 00050 void Clear() 00051 { 00052 for (int k=0; k<ORDER2_; k++) 00053 hk_[k].Clear(); 00054 } 00055 00056 private: 00057 const int ORDER2_; 00058 Array<Biquad> hk_; // Elements of cascade structure 00059 float g0_; // gain factor 00060 00061 // disallow copy constructor and assignment operator 00062 IirCascade(const IirCascade&); 00063 IirCascade& operator=(const IirCascade&); 00064 }; 00065 } 00066 #endif // IIR_CASCADE_HPP
Generated on Tue Jul 19 2022 05:39:48 by
![doxygen](doxygen.png)