Het totale EMG script

Dependencies:   HIDScope MODSERIAL biquadFilter mbed

Fork of EMGV5 by Laura Veenendaal

Committer:
Margreeth95
Date:
Thu Oct 08 19:15:14 2015 +0000
Revision:
23:624827baffa6
Parent:
22:207d314523ef
Child:
24:6661dd6a1718
EMG uitlezen en filteren werkt, juiste co?ffici?nten nog niet gevonden. M.n. lowpass nog niet goed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vsluiter 0:32bb76391d89 1 #include "mbed.h"
vsluiter 11:ce72ec658a95 2 #include "HIDScope.h"
Margreeth95 19:34456a1effc4 3 #include "MODSERIAL.h"
Margreeth95 19:34456a1effc4 4 #include "biquadFilter.h"
vsluiter 0:32bb76391d89 5
vsluiter 4:8b298dfada81 6 //Define objects
Margreeth95 18:12250e88037f 7 AnalogIn EMG_left(A0); //Analog input
Margreeth95 18:12250e88037f 8 AnalogIn EMG_right(A1);
Margreeth95 18:12250e88037f 9 Ticker SampleEMG;
Margreeth95 18:12250e88037f 10 Ticker ScopeTimer;
Margreeth95 19:34456a1effc4 11 Ticker serial;
Margreeth95 23:624827baffa6 12 HIDScope scope(4);
Margreeth95 19:34456a1effc4 13 DigitalOut led(LED_RED);
Margreeth95 19:34456a1effc4 14 MODSERIAL pc(USBTX, USBRX);
Margreeth95 19:34456a1effc4 15
Margreeth95 18:12250e88037f 16
Margreeth95 19:34456a1effc4 17 // Declaring variables
Margreeth95 18:12250e88037f 18 double EMG_L_f_v1 = 0, EMG_L_f_v2 = 0;
Margreeth95 19:34456a1effc4 19 double EMG_L_fh=0;
Margreeth95 19:34456a1effc4 20 double EMG_left_value;
Margreeth95 22:207d314523ef 21 double EMG_left_f1;
Margreeth95 22:207d314523ef 22 double EMG_left_f2;
Margreeth95 22:207d314523ef 23 double EMG_left_abs;
Margreeth95 22:207d314523ef 24 double EMG_right_value;
Margreeth95 22:207d314523ef 25 double EMG_right_f1;
Margreeth95 22:207d314523ef 26 double EMG_right_f2;
Margreeth95 22:207d314523ef 27 double EMG_right_abs;
Margreeth95 22:207d314523ef 28 double Threshold1 = 0.08;
Margreeth95 23:624827baffa6 29 double Threshold2 = 0.06;
Margreeth95 18:12250e88037f 30
Margreeth95 18:12250e88037f 31 // coëfficiënten
Margreeth95 22:207d314523ef 32 const double BiGainEMG_Lh = 0.723601, BiGainEMG_Ll=0.959332;
Margreeth95 23:624827baffa6 33 const double EMGh_a1 = -1.74355513773*BiGainEMG_Lh, EMGh_a2 = 0.80079826172*BiGainEMG_Lh, EMGh_b0 = 1.0*BiGainEMG_Lh, EMGh_b1 = -1.99697722433*BiGainEMG_Lh, EMGh_b2 = 1.0*BiGainEMG_Lh; //coefficients for high-pass filter
Margreeth95 23:624827baffa6 34 const double EMGl_a1 = 1.91721405106*BiGainEMG_Ll, EMGl_a2 = 0.92055427516*BiGainEMG_Ll, EMGl_b0 = 1.0*BiGainEMG_Ll, EMGl_b1 = 1.99999965990*BiGainEMG_Ll, EMGl_b2 = 1.0*BiGainEMG_Ll; // coefficients for low-pass filter
Margreeth95 23:624827baffa6 35
Margreeth95 20:a0642e983da9 36 // Filter creation
Margreeth95 19:34456a1effc4 37 biquadFilter EMG_highpass (EMGh_a1, EMGh_a2, EMGh_b0, EMGh_b1, EMGh_b2); // creates the high pass filter
Margreeth95 19:34456a1effc4 38 biquadFilter EMG_lowpass (EMGl_a1, EMGl_a2, EMGl_b0, EMGl_b1, EMGl_b2); // creates the low pass filter
Margreeth95 19:34456a1effc4 39
Margreeth95 19:34456a1effc4 40 // EMG filtering function
Margreeth95 22:207d314523ef 41 void EMGfilter() // Both EMG signals are filtered in one function and with the same filters
Margreeth95 19:34456a1effc4 42 {
Margreeth95 19:34456a1effc4 43 EMG_left_value = EMG_left.read();
Margreeth95 22:207d314523ef 44 EMG_left_f1 = EMG_highpass.step(EMG_left_value);
Margreeth95 22:207d314523ef 45 EMG_left_f2 = EMG_lowpass.step(EMG_left_f1);
Margreeth95 22:207d314523ef 46 EMG_left_abs = fabs(EMG_left_f2);
Margreeth95 22:207d314523ef 47
Margreeth95 22:207d314523ef 48 EMG_right_value = EMG_right.read();
Margreeth95 22:207d314523ef 49 EMG_right_f1 = EMG_highpass.step(EMG_right_value);
Margreeth95 22:207d314523ef 50 EMG_right_f1 = EMG_lowpass.step(EMG_right_f1);
Margreeth95 22:207d314523ef 51 EMG_right_abs = fabs(EMG_right_f2);
Margreeth95 19:34456a1effc4 52 }
vsluiter 2:e314bb3b2d99 53
Margreeth95 18:12250e88037f 54 // HIDScope
Margreeth95 18:12250e88037f 55 void ScopeSend()
Margreeth95 18:12250e88037f 56 {
Margreeth95 19:34456a1effc4 57 scope.set(0, EMG_left_value);
Margreeth95 23:624827baffa6 58 scope.set(1, EMG_left_f1);
Margreeth95 23:624827baffa6 59 scope.set(2, EMG_left_f2);
Margreeth95 23:624827baffa6 60 scope.set(3, EMG_left_abs);
Margreeth95 18:12250e88037f 61 scope.send();
Margreeth95 18:12250e88037f 62 }
Margreeth95 18:12250e88037f 63
vsluiter 0:32bb76391d89 64 int main()
vsluiter 0:32bb76391d89 65 {
Margreeth95 18:12250e88037f 66 SampleEMG.attach(&EMGfilter, 0.002);
Margreeth95 18:12250e88037f 67 ScopeTimer.attach(&ScopeSend, 0.002);
Margreeth95 19:34456a1effc4 68 while(1)
Margreeth95 19:34456a1effc4 69 {
Margreeth95 23:624827baffa6 70 if (EMG_left_abs > Threshold1)
Margreeth95 19:34456a1effc4 71 {
Margreeth95 19:34456a1effc4 72 led.write(0);
Margreeth95 19:34456a1effc4 73 }
Margreeth95 19:34456a1effc4 74
Margreeth95 19:34456a1effc4 75 else
Margreeth95 19:34456a1effc4 76 {
Margreeth95 19:34456a1effc4 77 led.write(1);
Margreeth95 19:34456a1effc4 78 }
Margreeth95 19:34456a1effc4 79 }
vsluiter 0:32bb76391d89 80 }