V001. 2017_11_30 10:21 Working code from Tuesday's lab session.

Dependencies:   mbed-rtos mbed

Fork of 2017_11_28_ELEC347_Coursework by Chris Hills

DSP Coursework ELEC347 2017-2018 Group members: Matthew Thewsey, Thomas Morris, Samuel Waggett, Christopher Hills .

Committer:
mwthewsey
Date:
Tue Nov 28 09:51:30 2017 +0000
Revision:
2:f6e49378dd8a
Parent:
1:b088b771a591
Child:
6:a2737b51424c
Working Working version;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mwthewsey 0:d39a06ca6bf1 1 #include "Filter.hpp"
mwthewsey 2:f6e49378dd8a 2 #include <math.h>
mwthewsey 0:d39a06ca6bf1 3
mwthewsey 2:f6e49378dd8a 4 #define PI 3.14159
mwthewsey 2:f6e49378dd8a 5
mwthewsey 2:f6e49378dd8a 6 FILTER::FILTER(int Fs, int Fo, double Boost, int Q) //Constuctor
mwthewsey 0:d39a06ca6bf1 7 {
mwthewsey 2:f6e49378dd8a 8 this-> _Fs = Fs;
mwthewsey 0:d39a06ca6bf1 9 this-> _Fo = Fo;
mwthewsey 0:d39a06ca6bf1 10 this-> _Boost = Boost;
mwthewsey 0:d39a06ca6bf1 11 this-> _Q = Q;
mwthewsey 0:d39a06ca6bf1 12
mwthewsey 0:d39a06ca6bf1 13
mwthewsey 0:d39a06ca6bf1 14 _centreTap = 1;
mwthewsey 0:d39a06ca6bf1 15 _G = 0;
mwthewsey 0:d39a06ca6bf1 16 _k = 0;
mwthewsey 0:d39a06ca6bf1 17 _Wo = 0;
mwthewsey 2:f6e49378dd8a 18 _Wo_d = 0;
mwthewsey 2:f6e49378dd8a 19 _Wo_d2 = 0;
mwthewsey 2:f6e49378dd8a 20 _Com_Den = 0;
mwthewsey 2:f6e49378dd8a 21 _NC0 = 0;
mwthewsey 2:f6e49378dd8a 22 _NC1 = 0;
mwthewsey 2:f6e49378dd8a 23 _NC2 = 0;
mwthewsey 2:f6e49378dd8a 24 _DC1 = 0;
mwthewsey 2:f6e49378dd8a 25 _DC2 = 0;
mwthewsey 0:d39a06ca6bf1 26
mwthewsey 2:f6e49378dd8a 27 _xn = 0; //This value is the input value
mwthewsey 0:d39a06ca6bf1 28 _xnm1 = 0;
mwthewsey 0:d39a06ca6bf1 29 _xnm2 = 0;
mwthewsey 0:d39a06ca6bf1 30
mwthewsey 0:d39a06ca6bf1 31 _yn = 0;
mwthewsey 0:d39a06ca6bf1 32 _ynm1 = 0;
mwthewsey 0:d39a06ca6bf1 33 _ynm2 = 0;
mwthewsey 0:d39a06ca6bf1 34 }
mwthewsey 0:d39a06ca6bf1 35
mwthewsey 0:d39a06ca6bf1 36 FILTER::~FILTER() {}
mwthewsey 0:d39a06ca6bf1 37
mwthewsey 2:f6e49378dd8a 38 void FILTER::setvalue(float RAW_input)
mwthewsey 0:d39a06ca6bf1 39 {
mwthewsey 0:d39a06ca6bf1 40
mwthewsey 0:d39a06ca6bf1 41 _xn = RAW_input;
mwthewsey 2:f6e49378dd8a 42 _centreTap = _xn*_b0 + _xnm1*_b1 + _xnm2*_b2; //IIR Filter
mwthewsey 2:f6e49378dd8a 43 _yn = _centreTap*_a0 - _a1*_ynm1 - _a2*_ynm2; //Result in yn
mwthewsey 0:d39a06ca6bf1 44
mwthewsey 2:f6e49378dd8a 45 _FilterOutput=_yn+0.5f; //Output resultant to DAC. Again MBED uses 0.0 to 1.0 float!!!!!! and Offset to give 0 to 3V3 range
mwthewsey 0:d39a06ca6bf1 46
mwthewsey 0:d39a06ca6bf1 47 //THESE NEED TO BE LOADED IN THIS ORDER OTHERWISE ALL xnm VALUES WILL BECOME THE SAME AS xn
mwthewsey 0:d39a06ca6bf1 48 _xnm2 = _xnm1;
mwthewsey 0:d39a06ca6bf1 49 _xnm1 = _xn;
mwthewsey 0:d39a06ca6bf1 50
mwthewsey 0:d39a06ca6bf1 51 //THESE NEED TO BE LOADED IN THIS ORDER OTHERWISE ALL ynm VALUES WILL BECOME THE SAME AS yn
mwthewsey 0:d39a06ca6bf1 52 _ynm2 = _ynm1;
mwthewsey 0:d39a06ca6bf1 53 _ynm1 = _yn;
mwthewsey 0:d39a06ca6bf1 54
mwthewsey 0:d39a06ca6bf1 55 }
mwthewsey 0:d39a06ca6bf1 56
mwthewsey 0:d39a06ca6bf1 57 float FILTER::getvalue(void)
mwthewsey 0:d39a06ca6bf1 58 {
mwthewsey 2:f6e49378dd8a 59 return _FilterOutput;
mwthewsey 0:d39a06ca6bf1 60 }
mwthewsey 0:d39a06ca6bf1 61
mwthewsey 2:f6e49378dd8a 62 void FILTER::Define_Filter()//Define the filter coefficients
mwthewsey 2:f6e49378dd8a 63 {
mwthewsey 2:f6e49378dd8a 64 _G = pow(10,_Boost/20.0);
mwthewsey 2:f6e49378dd8a 65 _k = 3 * ((_G - 1) / (_G+1));
mwthewsey 2:f6e49378dd8a 66 _Wo = 2 * PI * _Fo;
mwthewsey 2:f6e49378dd8a 67 _Wo_d = tan(_Wo / (2*_Fs));
mwthewsey 2:f6e49378dd8a 68 _Wo_d2 = (_Wo_d * _Wo_d); //Omega-Dash-Naught-Squared
mwthewsey 2:f6e49378dd8a 69 _Com_Den = 1 + ((3-_k)*_Wo_d/_Q) + _Wo_d2;
mwthewsey 2:f6e49378dd8a 70 _NC0 = 1 + ((3+_k)*_Wo_d/_Q) + _Wo_d2;
mwthewsey 2:f6e49378dd8a 71 _NC1 = -2 + (2 * _Wo_d2);
mwthewsey 2:f6e49378dd8a 72 _NC2 = 1 - ((3+_k)*_Wo_d/_Q) + _Wo_d2;
mwthewsey 2:f6e49378dd8a 73 _DC1 = _NC1;
mwthewsey 2:f6e49378dd8a 74 _DC2 = 1 - ((3-_k)*_Wo_d/_Q) + _Wo_d2;
mwthewsey 2:f6e49378dd8a 75
mwthewsey 2:f6e49378dd8a 76 //Calculate Coefficients
mwthewsey 2:f6e49378dd8a 77
mwthewsey 2:f6e49378dd8a 78 _b0 = _NC0 / _Com_Den;
mwthewsey 2:f6e49378dd8a 79 _b1 = _NC1 / _Com_Den;
mwthewsey 2:f6e49378dd8a 80 _b2 = _NC2 / _Com_Den;
mwthewsey 2:f6e49378dd8a 81 _a0 = 1.0000;
mwthewsey 2:f6e49378dd8a 82 _a1 = _DC1 / _Com_Den;
mwthewsey 2:f6e49378dd8a 83 _a2 = _DC2 / _Com_Den;
mwthewsey 2:f6e49378dd8a 84 }
mwthewsey 2:f6e49378dd8a 85