CQエレクトロニクス・セミナで使用する遮断周波数可変の LPF/HPF のプログラム

Dependencies:   mbed SerialTxRxIntr DSP_MultirateLinearphase

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/02/19, Copyright (c) 2022 MIKAMI, Naoki
00006 //--------------------------------------------------------------
00007 
00008 #ifndef IIR_BIQUAD_HPP
00009 #define IIR_BIQUAD_HPP
00010 
00011 #include "mbed.h"
00012 
00013 namespace Mikami
00014 {
00015     class Biquad
00016     {
00017     public:
00018         // フィルタの係数をまとめて扱うための構造体
00019         struct Coefs { float a1, a2, b1, b2; };
00020 
00021         // デフォルト・コンストラクタ
00022         //      係数は構造体 Ceofs で与える
00023         Biquad(const Coefs ck = (Coefs){0, 0, 0, 0})
00024             : c_(ck), vn1_(0), vn2_(0) {}
00025 
00026         // 2 次のフィルタを実行する
00027         float Execute(float xn)
00028         {
00029             float vn = xn + c_.a1*vn1_ + c_.a2*vn2_;
00030             float yn = vn + c_.b1*vn1_ + c_.b2*vn2_;
00031         
00032             vn2_ = vn1_;
00033             vn1_ = vn;
00034  
00035             return yn;
00036         }
00037 
00038         // 係数を設定する
00039         void SetCoefs(const Coefs ck) { c_ = ck; }
00040 
00041         // 内部変数(遅延器)のクリア
00042         void Clear() { vn1_ = vn2_ = 0; }
00043 
00044     private:
00045         Coefs c_;
00046         float vn1_, vn2_;
00047 
00048         // コピー・コンストラクタ禁止のため
00049         Biquad(const Biquad&);
00050     };
00051 }
00052 #endif  // IIR_BIQUAD_HPP