FFT によるスペクトル解析器
Dependencies: Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real DSP_ADDA
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
Generated on Fri Jul 15 2022 00:11:09 by 1.7.2