Cutoff frequency variable LPF and HPF by IIR 6th-order Butterworth filter for ST Nucleo F401RE.

Dependencies:   UITDSP_ADDA UIT_ACM1602NI UIT_AQM1602 UIT_IIR_Filter mbed

Committer:
MikamiUitOpen
Date:
Fri Sep 11 09:54:45 2015 +0000
Revision:
0:33908268d9ea
1

Who changed what in which revision?

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