?

Committer:
phungductung
Date:
Tue Jun 04 21:58:08 2019 +0000
Revision:
0:cacfc9e25452
?;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
phungductung 0:cacfc9e25452 1 //------------------------------------------------------------------------------
phungductung 0:cacfc9e25452 2 // Design of Butterworth LPF and HPF using bilinear transform -- Header
phungductung 0:cacfc9e25452 3 //
phungductung 0:cacfc9e25452 4 // 2016/03/31, Copyright (c) 2016 MIKAMI, Naoki
phungductung 0:cacfc9e25452 5 //------------------------------------------------------------------------------
phungductung 0:cacfc9e25452 6
phungductung 0:cacfc9e25452 7 #ifndef BILINEAR_BUTTERWORTH_HPP
phungductung 0:cacfc9e25452 8 #define BILINEAR_BUTTERWORTH_HPP
phungductung 0:cacfc9e25452 9
phungductung 0:cacfc9e25452 10 #include "mbed.h"
phungductung 0:cacfc9e25452 11 #include <complex> // requisite
phungductung 0:cacfc9e25452 12
phungductung 0:cacfc9e25452 13 namespace Mikami
phungductung 0:cacfc9e25452 14 {
phungductung 0:cacfc9e25452 15 typedef complex<float> Complex; // define "Complex"
phungductung 0:cacfc9e25452 16
phungductung 0:cacfc9e25452 17 class BilinearDesign
phungductung 0:cacfc9e25452 18 {
phungductung 0:cacfc9e25452 19 public:
phungductung 0:cacfc9e25452 20 struct Coefs { float a1, a2, b1, b2; };
phungductung 0:cacfc9e25452 21 enum Type { LPF, HPF };
phungductung 0:cacfc9e25452 22
phungductung 0:cacfc9e25452 23 // Constructor
phungductung 0:cacfc9e25452 24 BilinearDesign(int order, float fs)
phungductung 0:cacfc9e25452 25 : PI_FS_(PI_/fs), ORDER_(order)
phungductung 0:cacfc9e25452 26 {
phungductung 0:cacfc9e25452 27 sP_ = new Complex[order/2];
phungductung 0:cacfc9e25452 28 zP_ = new Complex[order/2];
phungductung 0:cacfc9e25452 29 ck_ = new Coefs[order/2];
phungductung 0:cacfc9e25452 30 }
phungductung 0:cacfc9e25452 31
phungductung 0:cacfc9e25452 32 // Destractor
phungductung 0:cacfc9e25452 33 ~BilinearDesign()
phungductung 0:cacfc9e25452 34 {
phungductung 0:cacfc9e25452 35 delete[] sP_;
phungductung 0:cacfc9e25452 36 delete[] zP_;
phungductung 0:cacfc9e25452 37 delete[] ck_;
phungductung 0:cacfc9e25452 38 }
phungductung 0:cacfc9e25452 39
phungductung 0:cacfc9e25452 40 // Execution of design
phungductung 0:cacfc9e25452 41 void Execute(float fc, Type pb, Coefs c[], float& g);
phungductung 0:cacfc9e25452 42
phungductung 0:cacfc9e25452 43 private:
phungductung 0:cacfc9e25452 44 static const float PI_ = 3.1415926536f;
phungductung 0:cacfc9e25452 45 const float PI_FS_;
phungductung 0:cacfc9e25452 46 const int ORDER_;
phungductung 0:cacfc9e25452 47
phungductung 0:cacfc9e25452 48 Complex* sP_; // Poles on s-plane
phungductung 0:cacfc9e25452 49 Complex* zP_; // Poles on z-plane
phungductung 0:cacfc9e25452 50 Coefs* ck_; // Coefficients of transfer function for cascade form
phungductung 0:cacfc9e25452 51 float gain_; // Gain factor for cascade form
phungductung 0:cacfc9e25452 52
phungductung 0:cacfc9e25452 53 void Butterworth();
phungductung 0:cacfc9e25452 54 void Bilinear(float fc);
phungductung 0:cacfc9e25452 55 void ToCascade(Type pb);
phungductung 0:cacfc9e25452 56 void GetGain(Type pb);
phungductung 0:cacfc9e25452 57 void GetCoefs(Coefs c[], float& gain);
phungductung 0:cacfc9e25452 58 };
phungductung 0:cacfc9e25452 59 }
phungductung 0:cacfc9e25452 60 #endif // BILINEAR_BUTTERWORTH_HPP