Het totale EMG script

Dependencies:   HIDScope MODSERIAL biquadFilter mbed

Fork of EMGV5 by Laura Veenendaal

Committer:
Margreeth95
Date:
Thu Oct 08 17:47:14 2015 +0000
Revision:
22:207d314523ef
Parent:
20:a0642e983da9
Child:
23:624827baffa6
2e EMG signaal toegevoegd, filterco?ffici?nten laagdoorlaatfilter aangepast. Nog niet getest.

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 22:207d314523ef 12 HIDScope scope(5);
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 22:207d314523ef 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 22:207d314523ef 33 const double EMGh_a1 = -1.74355513773*BiGainEMG_Lh, EMGh_a2 = 0.80079826172*BiGainEMG_Lh, EMGh_b0 = 1.0*BiGainEMG_Lh, EMGh_b1 = 1.99999965990*BiGainEMG_Lh, EMGh_b2 = 1.0*BiGainEMG_Lh; //coefficients for high-pass filter
Margreeth95 22:207d314523ef 34 const double EMGl_a1 = 1.91721405106*BiGainEMG_Ll, EMGl_a2 = 0.92055427516*BiGainEMG_Ll, EMGl_b0 = 1.0*BiGainEMG_Ll, EMGl_b1 = 1.99999993582*BiGainEMG_Ll, EMGl_b2 = 1.0*BiGainEMG_Ll; // coefficients for low-pass filter
Margreeth95 20:a0642e983da9 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 22:207d314523ef 58 scope.set(1, EMG_left_f2);
Margreeth95 22:207d314523ef 59 scope.set(2, EMG_left_abs);
Margreeth95 22:207d314523ef 60 scope.set(3, EMG_right_value);
Margreeth95 22:207d314523ef 61 scope.set(4, EMG_right_abs);
Margreeth95 18:12250e88037f 62 scope.send();
Margreeth95 18:12250e88037f 63 }
Margreeth95 18:12250e88037f 64
vsluiter 0:32bb76391d89 65 int main()
vsluiter 0:32bb76391d89 66 {
Margreeth95 18:12250e88037f 67 SampleEMG.attach(&EMGfilter, 0.002);
Margreeth95 18:12250e88037f 68 ScopeTimer.attach(&ScopeSend, 0.002);
Margreeth95 19:34456a1effc4 69 while(1)
Margreeth95 19:34456a1effc4 70 {
Margreeth95 22:207d314523ef 71 if (EMG_left_abs > Threshold)
Margreeth95 19:34456a1effc4 72 {
Margreeth95 19:34456a1effc4 73 led.write(0);
Margreeth95 19:34456a1effc4 74 }
Margreeth95 19:34456a1effc4 75
Margreeth95 19:34456a1effc4 76 else
Margreeth95 19:34456a1effc4 77 {
Margreeth95 19:34456a1effc4 78 led.write(1);
Margreeth95 19:34456a1effc4 79 }
Margreeth95 19:34456a1effc4 80 }
vsluiter 0:32bb76391d89 81 }