![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
CQエレクトロニクス・セミナで使用する遮断周波数可変の LPF/HPF のプログラム
Dependencies: mbed SerialTxRxIntr DSP_MultirateLinearphase
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
Generated on Sat Jul 23 2022 01:01:05 by
![doxygen](doxygen.png)