CQ出版社セミナ,2021/12/07開催「実習・C++言語によるArmマイコンのプログラミング」で使うプログラム.

Dependencies:   Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real

Committer:
MikamiUitOpen
Date:
Thu Apr 02 01:12:34 2020 +0000
Revision:
5:5e55a5f440c0
Parent:
0:a80f730d32a8
6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:a80f730d32a8 1 //--------------------------------------------------------------
MikamiUitOpen 0:a80f730d32a8 2 // 縦続形 IIR フィルタの構成要素として使う 2 次の IIR フィルタ
MikamiUitOpen 0:a80f730d32a8 3 // b0 は 1 と仮定している
MikamiUitOpen 0:a80f730d32a8 4 //
MikamiUitOpen 0:a80f730d32a8 5 // u[n] = x[n] + a1*u[n-1] + a2*u[n-2]
MikamiUitOpen 0:a80f730d32a8 6 // y[n] = u[n] + b1*u[n-1] + b2*u[n-2]
MikamiUitOpen 0:a80f730d32a8 7 //
MikamiUitOpen 0:a80f730d32a8 8 // 2019/11/22, Copyright (c) 2019 MIKAMI, Naoki
MikamiUitOpen 0:a80f730d32a8 9 //--------------------------------------------------------------
MikamiUitOpen 0:a80f730d32a8 10
MikamiUitOpen 0:a80f730d32a8 11 #ifndef IIR_BIQUAD_HPP
MikamiUitOpen 0:a80f730d32a8 12 #define IIR_BIQUAD_HPP
MikamiUitOpen 0:a80f730d32a8 13
MikamiUitOpen 0:a80f730d32a8 14 #include "mbed.h"
MikamiUitOpen 0:a80f730d32a8 15
MikamiUitOpen 0:a80f730d32a8 16 // 2 次の IIR フィルタ
MikamiUitOpen 0:a80f730d32a8 17 class Biquad
MikamiUitOpen 0:a80f730d32a8 18 {
MikamiUitOpen 0:a80f730d32a8 19 public:
MikamiUitOpen 0:a80f730d32a8 20 // デフォルト・コンストラクタ
MikamiUitOpen 0:a80f730d32a8 21 Biquad() {}
MikamiUitOpen 0:a80f730d32a8 22
MikamiUitOpen 0:a80f730d32a8 23 // 係数を個別に与えるコンストラクタ
MikamiUitOpen 0:a80f730d32a8 24 Biquad(float a1, float a2, float b1, float b2)
MikamiUitOpen 0:a80f730d32a8 25 : a1_(a1), a2_(a2), b1_(b1), b2_(b2), un1_(0), un2_(0) {}
MikamiUitOpen 0:a80f730d32a8 26
MikamiUitOpen 0:a80f730d32a8 27 // 2 次のフィルタを実行する
MikamiUitOpen 0:a80f730d32a8 28 float Execute(float xn)
MikamiUitOpen 0:a80f730d32a8 29 {
MikamiUitOpen 0:a80f730d32a8 30 float un = xn + a1_*un1_ + a2_*un2_;
MikamiUitOpen 0:a80f730d32a8 31 float yn = un + b1_*un1_ + b2_*un2_;
MikamiUitOpen 0:a80f730d32a8 32
MikamiUitOpen 0:a80f730d32a8 33 un2_ = un1_;
MikamiUitOpen 0:a80f730d32a8 34 un1_ = un;
MikamiUitOpen 0:a80f730d32a8 35
MikamiUitOpen 0:a80f730d32a8 36 return yn;
MikamiUitOpen 0:a80f730d32a8 37 }
MikamiUitOpen 0:a80f730d32a8 38
MikamiUitOpen 0:a80f730d32a8 39 private:
MikamiUitOpen 0:a80f730d32a8 40 float a1_, a2_, b1_, b2_;
MikamiUitOpen 0:a80f730d32a8 41 float un1_, un2_;
MikamiUitOpen 0:a80f730d32a8 42
MikamiUitOpen 0:a80f730d32a8 43 // コピー・コンストラクタ禁止
MikamiUitOpen 0:a80f730d32a8 44 Biquad(const Biquad&);
MikamiUitOpen 0:a80f730d32a8 45 };
MikamiUitOpen 0:a80f730d32a8 46
MikamiUitOpen 0:a80f730d32a8 47 #endif // IIR_BIQUAD_HPP
MikamiUitOpen 0:a80f730d32a8 48
MikamiUitOpen 0:a80f730d32a8 49