The experiment using this program is introduced on "Interface" No.3, CQ publishing Co.,Ltd, 2015. 本プログラムを使った実験は,CQ出版社のインターフェース 2015年3月号で紹介しています.

Dependencies:   DSProcessingIO mbed

Committer:
CQpub0Mikami
Date:
Sat Dec 27 07:01:43 2014 +0000
Revision:
2:0b15cd2b79e3
Parent:
0:a5a171eda3f8
3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CQpub0Mikami 0:a5a171eda3f8 1 //--------------------------------------------------------------
CQpub0Mikami 0:a5a171eda3f8 2 // Biquad filter for IIR filter of cascade structure
CQpub0Mikami 0:a5a171eda3f8 3 // Copyright (c) 2014 MIKAMI, Naoki, 2014/07/15
CQpub0Mikami 0:a5a171eda3f8 4 //--------------------------------------------------------------
CQpub0Mikami 0:a5a171eda3f8 5
CQpub0Mikami 0:a5a171eda3f8 6 #ifndef IIR_BIQUAD_HPP
CQpub0Mikami 0:a5a171eda3f8 7 #define IIR_BIQUAD_HPP
CQpub0Mikami 0:a5a171eda3f8 8
CQpub0Mikami 0:a5a171eda3f8 9 #include "mbed.h"
CQpub0Mikami 0:a5a171eda3f8 10
CQpub0Mikami 0:a5a171eda3f8 11 namespace Mikami
CQpub0Mikami 0:a5a171eda3f8 12 {
CQpub0Mikami 0:a5a171eda3f8 13 // 2nd order IIR filter
CQpub0Mikami 0:a5a171eda3f8 14 class Biquad
CQpub0Mikami 0:a5a171eda3f8 15 {
CQpub0Mikami 0:a5a171eda3f8 16 public:
CQpub0Mikami 0:a5a171eda3f8 17 struct Coefs { float a1, a2, b1, b2; };
CQpub0Mikami 0:a5a171eda3f8 18
CQpub0Mikami 0:a5a171eda3f8 19 Biquad() {} // Default constructore
CQpub0Mikami 0:a5a171eda3f8 20
CQpub0Mikami 0:a5a171eda3f8 21 Biquad(const Coefs ck)
CQpub0Mikami 0:a5a171eda3f8 22 : a1_(ck.a1), a2_(ck.a2), b1_(ck.b1), b2_(ck.b2)
CQpub0Mikami 0:a5a171eda3f8 23 { Clear(); }
CQpub0Mikami 0:a5a171eda3f8 24
CQpub0Mikami 0:a5a171eda3f8 25 float Execute(float xn)
CQpub0Mikami 0:a5a171eda3f8 26 {
CQpub0Mikami 0:a5a171eda3f8 27 float un = xn + a1_*un1_ + a2_*un2_;
CQpub0Mikami 0:a5a171eda3f8 28 float yn = un + b1_*un1_ + b2_*un2_;
CQpub0Mikami 0:a5a171eda3f8 29
CQpub0Mikami 0:a5a171eda3f8 30 un2_ = un1_;
CQpub0Mikami 0:a5a171eda3f8 31 un1_ = un;
CQpub0Mikami 0:a5a171eda3f8 32
CQpub0Mikami 0:a5a171eda3f8 33 return yn;
CQpub0Mikami 0:a5a171eda3f8 34 }
CQpub0Mikami 0:a5a171eda3f8 35
CQpub0Mikami 0:a5a171eda3f8 36 void Clear() { un1_ = un2_ = 0; }
CQpub0Mikami 0:a5a171eda3f8 37
CQpub0Mikami 0:a5a171eda3f8 38 private:
CQpub0Mikami 0:a5a171eda3f8 39 float a1_, a2_, b1_, b2_;
CQpub0Mikami 0:a5a171eda3f8 40 float un1_, un2_;
CQpub0Mikami 0:a5a171eda3f8 41
CQpub0Mikami 0:a5a171eda3f8 42 Biquad(const Biquad&);
CQpub0Mikami 0:a5a171eda3f8 43 };
CQpub0Mikami 0:a5a171eda3f8 44 }
CQpub0Mikami 0:a5a171eda3f8 45 #endif // IIR_BIQUAD_HPP