IIR Cascade

Dependencies:   DSP_MultirateLinearphase mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Biquad.hpp Source File

Biquad.hpp

00001 //--------------------------------------------------------------
00002 // 縦続形 IIR フィルタの構成要素として使う 2 次の IIR フィルタ
00003 //      b0 は 1 と仮定している
00004 //
00005 // 2022/01/18, Copyright (c) 2022 MIKAMI, Naoki
00006 //--------------------------------------------------------------
00007 
00008 #include "mbed.h"
00009 
00010 #ifndef IIR_BIQUAD_HPP
00011 #define IIR_BIQUAD_HPP
00012 
00013 class Biquad
00014 {
00015 public:
00016     // フィルタの係数に対応する構造体
00017     struct Coefs { float a1, a2, b1, b2; };
00018 
00019     // コンストラクタ
00020     Biquad(const Coefs ck = (Coefs){0, 0, 0, 0})
00021         : a1_(ck.a1), a2_(ck.a2), b1_(ck.b1), b2_(ck.b2),
00022           vn1_(0), vn2_(0) {}       
00023 
00024     // 2 次のフィルタを実行する
00025     float Execute(float xn)
00026     {
00027         float vn = xn + a1_*vn1_ + a2_*vn2_;
00028         float yn = vn + b1_*vn1_ + b2_*vn2_;
00029     
00030         vn2_ = vn1_;
00031         vn1_ = vn;
00032     
00033         return yn;
00034     }
00035 
00036 private:
00037     float a1_, a2_, b1_, b2_;   // フィルタの係数
00038     float vn1_, vn2_;           // 遅延器
00039 };
00040 #endif  // IIR_BIQUAD_HPP