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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers IIR_Cascade.hpp Source File

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