Matthew Thewsey
/
ELEC347_Coursework_NonVariable
Non-variable (TESTEDandWORKING)
Fork of ELEC347_Coursework by
Filter.cpp
- Committer:
- mwthewsey
- Date:
- 2017-11-28
- Revision:
- 1:b088b771a591
- Parent:
- 0:d39a06ca6bf1
- Child:
- 2:f6e49378dd8a
File content as of revision 1:b088b771a591:
#include "Filter.hpp" FILTER::FILTER(int Fs, int Fo, int Boost, int Q) //Constuctor { _Fs = Fs; this-> _Fo = Fo; this-> _Boost = Boost; this-> _Q = Q; // B - Upnominator coefficients _b0 = 0.0201; _b1 = 0.0; _b2 = -0.0402; _b3 = 0.0; _b4 = 0.0201; // A - Denominator coefficients _a0 = 1.0000; _a1 = -2.5494; _a2 = 3.2024; _a3 = -2.0359; _a4 = 0.6414; _centreTap = 1; _G = 0; _k = 0; _Wo = 0; _xn = 0; //this value is the input value _xnm1 = 0; _xnm2 = 0; _xnm3 = 0; _xnm4 = 0; _yn = 0; _ynm1 = 0; _ynm2 = 0; _ynm3 = 0; _ynm4 = 0; } FILTER::~FILTER() {} void FILTER::setvalue(int RAW_input) { _xn = RAW_input; _centreTap = _xn*_b0 + _xnm1*_b1 + _xnm2*_b2 + _xnm3*_b3 + _xnm4*_b4; //IIR Filter _yn = _centreTap*_a0 - _a1*_ynm1 - _a2*_ynm2 - _a3*_ynm3 - _a4*_ynm4; //Result in yn 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 //THESE NEED TO BE LOADED IN THIS ORDER OTHERWISE ALL xnm VALUES WILL BECOME THE SAME AS xn _xnm4 = _xnm3; _xnm3 = _xnm2; _xnm2 = _xnm1; _xnm1 = _xn; //THESE NEED TO BE LOADED IN THIS ORDER OTHERWISE ALL ynm VALUES WILL BECOME THE SAME AS yn _ynm4 = _ynm3; _ynm3 = _ynm2; _ynm2 = _ynm1; _ynm1 = _yn; } float FILTER::getvalue(void) { return FilterOutput; } https://os.mbed.com/users/thomasmorris/code/ELEC347_CourseWork/