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

Dependencies:   DSProcessingIO mbed

Committer:
CQpub0Mikami
Date:
Tue Jul 29 06:55:48 2014 +0000
Revision:
1:5ece9454ba73
Parent:
0:398107c96b1b
ver.2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CQpub0Mikami 0:398107c96b1b 1 //--------------------------------------------------------------
CQpub0Mikami 0:398107c96b1b 2 // IIR filter ---- Cascade structure
CQpub0Mikami 0:398107c96b1b 3 // Copyright (c) 2014 MIKAMI, Naoki, 2014/07/15
CQpub0Mikami 0:398107c96b1b 4 //--------------------------------------------------------------
CQpub0Mikami 0:398107c96b1b 5
CQpub0Mikami 0:398107c96b1b 6 #ifndef IIR_CASCADE_HPP
CQpub0Mikami 0:398107c96b1b 7 #define IIR_CASCADE_HPP
CQpub0Mikami 0:398107c96b1b 8
CQpub0Mikami 0:398107c96b1b 9 #include "mbed.h"
CQpub0Mikami 0:398107c96b1b 10 #include "Biquad.hpp"
CQpub0Mikami 0:398107c96b1b 11
CQpub0Mikami 0:398107c96b1b 12 namespace Mikami
CQpub0Mikami 0:398107c96b1b 13 {
CQpub0Mikami 0:398107c96b1b 14 // IIR filter -- Cascade structure
CQpub0Mikami 0:398107c96b1b 15 template<int order> class IirCascade
CQpub0Mikami 0:398107c96b1b 16 {
CQpub0Mikami 0:398107c96b1b 17 private:
CQpub0Mikami 0:398107c96b1b 18 Biquad hk_[order]; // Elements of cascade structure
CQpub0Mikami 0:398107c96b1b 19 const float G0_; // gain factor
CQpub0Mikami 0:398107c96b1b 20
CQpub0Mikami 0:398107c96b1b 21 IirCascade(const IirCascade&);
CQpub0Mikami 0:398107c96b1b 22 IirCascade& operator=(const IirCascade&);
CQpub0Mikami 0:398107c96b1b 23
CQpub0Mikami 0:398107c96b1b 24 public:
CQpub0Mikami 0:398107c96b1b 25 IirCascade(float g0, const Biquad::Coefs ck[])
CQpub0Mikami 0:398107c96b1b 26 : G0_(g0)
CQpub0Mikami 0:398107c96b1b 27 {
CQpub0Mikami 0:398107c96b1b 28 for (int k=0; k<order; k++)
CQpub0Mikami 0:398107c96b1b 29 hk_[k] = Biquad(ck[k]);
CQpub0Mikami 0:398107c96b1b 30 }
CQpub0Mikami 0:398107c96b1b 31
CQpub0Mikami 0:398107c96b1b 32 float Execute(float xn)
CQpub0Mikami 0:398107c96b1b 33 {
CQpub0Mikami 0:398107c96b1b 34 float yn = G0_*xn;
CQpub0Mikami 0:398107c96b1b 35 for (int k=0; k<order; k++)
CQpub0Mikami 0:398107c96b1b 36 yn = hk_[k].Execute(yn);
CQpub0Mikami 0:398107c96b1b 37
CQpub0Mikami 0:398107c96b1b 38 return yn;
CQpub0Mikami 0:398107c96b1b 39 }
CQpub0Mikami 0:398107c96b1b 40
CQpub0Mikami 0:398107c96b1b 41 void Clear()
CQpub0Mikami 0:398107c96b1b 42 {
CQpub0Mikami 0:398107c96b1b 43 for (int k=0; k<order; k++)
CQpub0Mikami 0:398107c96b1b 44 hk_[k].Clear();
CQpub0Mikami 0:398107c96b1b 45 }
CQpub0Mikami 0:398107c96b1b 46 };
CQpub0Mikami 0:398107c96b1b 47 }
CQpub0Mikami 0:398107c96b1b 48 #endif // IIR_CASCADE_HPP
CQpub0Mikami 0:398107c96b1b 49