FFT によるスペクトル解析器

Dependencies:   Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real DSP_ADDA

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 // 2020/11/04, Copyright (c) 2020 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     //      係数は構造体 Ceofs で与える
00021     Biquad(const Coefs ck = (Coefs){0, 0, 0, 0})
00022         : a1_(ck.a1), a2_(ck.a2), b1_(ck.b1), b2_(ck.b2),
00023           un1_(0), un2_(0) {}       
00024 
00025     // 係数を個別に与えるコンストラクタ
00026     Biquad(float a1, float a2, float b1, float b2)
00027         : a1_(a1), a2_(a2), b1_(b1), b2_(b2), un1_(0), un2_(0) {}
00028 
00029     virtual ~Biquad() {}
00030 
00031     // 2 次のフィルタを実行する
00032     float Execute(float xn)
00033     {
00034         float un = xn + a1_*un1_ + a2_*un2_;
00035         float yn = un + b1_*un1_ + b2_*un2_;
00036     
00037         un2_ = un1_;
00038         un1_ = un;
00039     
00040         return yn;
00041     }
00042 
00043     // 係数を設定する
00044     void SetCoefs(const Coefs ck)
00045     {
00046         a1_ = ck.a1;
00047         a2_ = ck.a2;
00048         b1_ = ck.b1;
00049         b2_ = ck.b2;
00050     }
00051 
00052     // 内部変数(遅延器)のクリア
00053     void Clear() { un1_ = un2_ = 0; }
00054 
00055 private:
00056     float a1_, a2_, b1_, b2_;   // フィルタの係数
00057     float un1_, un2_;           // 遅延器
00058 
00059     // コピー・コンストラクタ禁止
00060     Biquad(const Biquad&);
00061 };
00062 #endif  // IIR_BIQUAD_HPP