![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Emg filter function script for a uni project. Made by Teun van der Molen
Dependencies: HIDScope MODSERIAL mbed
main.cpp
- Committer:
- teunman
- Date:
- 2015-09-23
- Revision:
- 8:54f0a76d35f4
- Parent:
- 7:43f2f7039841
- Child:
- 9:2b9240084724
File content as of revision 8:54f0a76d35f4:
#include "mbed.h" #include "HIDScope.h" #include "math.h" // Define the HIDScope and Ticker object HIDScope scope(3); Ticker scopeTimer; Ticker biquadTicker; DigitalOut light(LED2); DigitalIn knop(SW3); double c=5; //calibration value double n = 0; // counter for calibration bool calib = false; //changes into false when calibration is done (reset program for new calibration); double v1=0, v2=0, u=0, y=0, fy=0, fv1=0, fv2=0, fu=0; //const double b0 = 0.9999999999999999,b1 = 1.9999999999999998,b2 = 0.9999999999999999, a1 = 1.9999999999999998 ,a2 = 0.9999999999999998; //low-pass Fc = 50hz fs = 100hz //const double fb0 = 0.02008333102602092 ,fb1 = 0.04016666205204184 ,fb2 = 0.02008333102602092, fa1 = -1.5610153912536877 ,fa2 = 0.6413487153577715; //low-pass Fc = 5hz fs = 100hz //const double b0 = 0.8005910266528649,b1 = -1.6011820533057297,b2 = 0.8005910266528649,a1 = -1.5610153912536877,a2 = 0.6413487153577715; //high-pass Fc = 5hz fs = 100hz //const double b0 = 0.007820199259120319,b1 = 0.015640398518240638,b2 = 0.007820199259120319,a1 = -1.7347238224240125,a2 = 0.7660046194604936; //low-pass Fc = 3hz fs = 100hz //const double b0 = 0.0009446914586925257,b1 = 0.0018893829173850514,b2 = 0.0009446914586925257,a1 = -1.911196288237583,a2 = 0.914975054072353; //low-pass Fc = 1hz fs = 100hz //const double b0 = 0.956542835577484, b1 = -1.913085671154968, b2 = 0.956542835577484, a1 = -1.911196288237583, a2 = 0.914975054072353; //high-pass Fc = 1hz fs = 100hz const double b0 = 0.00008765553769759188,b1 = 0.00017531107539518376,b2 = 0.00008765553769759188,a1 = -1.9733440008737442,a2 = 0.9736946230245347;//low-pass Fc = 3Hz fs = 1000hz //const double b0 = 0.00034604125149151127,b1 = 0.0006920825029830225, b2 = 0.00034604125149151127 ,a1 = -1.9466970561224466 ,a2 = 0.9480812211284125; //low-pass Fc = 6Hz fs = 1000hz //const double fb0 = 0.9149684297741606, fb1 = -1.8299368595483212, fb2 = 0.9149684297741606 ,fa1 = -1.8226935021735358, fa2 = 0.8371802169231065; // High-pass Fc = 20Hz fs = 1000hz //const double fb0 = 0.8948577513857248 ,fb1 = -1.7897155027714495, fb2 = 0.8948577513857248,fa1 = -1.7786300789392977,fa2 = 0.8008009266036016; // High-pass Fc = 25Hz fs = 1000Hz //const double b0 = 0.005542711916075981,b1 = 0.011085423832151962,b2 = 0.005542711916075981,a1 = -1.7786300789392977,a2 = 0.8008009266036016; //Low-pass Fc = 25Hz fs=1000Hz //const double fb0 = 0.9780302754084559,fb1 = -1.9560605508169118,fb2 = 0.9780302754084559,fa1 = -1.9555778328194147,fa2 = 0.9565432688144089; //high-pass Fc = 6hz fs = 1000hz const double fb0 = 0.9911535113858849,fb1 = -1.9823070227717698,fb2 = 0.9911535113858849,fa1 = -1.9822287623675816,fa2 = 0.982385283175958; //High-pass Fc = 2Hz fs = 1000Hz //const double fb0 = 0.0036216786873927774,fb1 = 0.007243357374785555,fb2 = 0.0036216786873927774,fa1 = -1.8226935021735358,fa2 = 0.8371802169231065; ///Low-pass Fc = 20 Hz Fs = 1000Hz // Read the analog input AnalogIn an_in(A0); AnalogOut an_out(DAC0_OUT); // The data read and send function void scopeSend() { scope.set(0,c); scope.set(1,fy); scope.set(2,n); scope.send(); while(calib == true and n <= 2000.00) { c = c + fy; n ++; } } void computeBiquad(){ double v = an_in - a1*v1 - a2*v2; y= b0*v + b1*v1 +b2*v2; v2=v1; v1=v; y = abs(y); double fv = y - fa1*fv1 - fa2*fv2; fy= fb0*fv + fb1*fv1 + fb2*fv2; fv2=fv1; fv1=fv; fy = abs(fy); } int main() { light = 1; // Attach the data read and send function at 1000 Hz scopeTimer.attach_us(&scopeSend, 1e5); //scopeTimer.attach_us(&calibrate, 1e5); biquadTicker.attach(&computeBiquad,0.0001f); //float i = 1; while(1) { if (fy >= c and calib == false){ light = 0; } else if (knop == 0){ light = 0; calib = true; c = 0; n = 0; wait(5); light = 1; calib = false; c = c/n; } else{ light = 1; } } }