emg2

Dependencies:   HIDScope biquadFilter mbed QEI

Fork of EMG by Tom Tom

Committer:
s1574396
Date:
Mon Oct 29 19:49:23 2018 +0000
Revision:
23:dec549767006
Parent:
22:bcfee9594007
Child:
24:6bdc50e21805
leuk he

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"
keeswieriks 21:931fe86dbf5a 3 #include "BiQuad.h"
vsluiter 0:32bb76391d89 4
s1574396 22:bcfee9594007 5 HIDScope scope( 2 );
s1574396 22:bcfee9594007 6 Ticker sample_timer;
s1574396 22:bcfee9594007 7
s1574396 23:dec549767006 8 // Inputs EMG
keeswieriks 21:931fe86dbf5a 9 AnalogIn emg0_in( A0 );
keeswieriks 21:931fe86dbf5a 10 AnalogIn emg1_in( A1 );
keeswieriks 21:931fe86dbf5a 11 AnalogIn emg2_in( A2 );
keeswieriks 21:931fe86dbf5a 12
s1574396 23:dec549767006 13 // Constants EMG
s1574396 23:dec549767006 14 const double m1 = 0.5000;
s1574396 23:dec549767006 15 const double m2 = -0.8090;
s1574396 23:dec549767006 16 const double n0 = 0.5000;
s1574396 23:dec549767006 17 const double n1 = -0.8090;
s1574396 23:dec549767006 18 const double n2 = 0;
s1574396 23:dec549767006 19 const double a1 = 0.9565;
s1574396 23:dec549767006 20 const double a2 = -1.9131;
s1574396 23:dec549767006 21 const double b0 = 0.9565;
s1574396 23:dec549767006 22 const double b1 = -1.9112;
s1574396 23:dec549767006 23 const double b2 = 0.9150;
s1574396 23:dec549767006 24 const double c1 = 0.0675;
s1574396 23:dec549767006 25 const double c2 = 0.1349;
s1574396 23:dec549767006 26 const double d0 = 0.0675;
s1574396 23:dec549767006 27 const double d1 = -1.1430;
s1574396 23:dec549767006 28 const double d2 = 0.4128;
keeswieriks 21:931fe86dbf5a 29
s1574396 23:dec549767006 30 // Variables EMG
keeswieriks 21:931fe86dbf5a 31 double notchFitler1 = 0;
keeswieriks 21:931fe86dbf5a 32 double highpassFilter1 = 0;
keeswieriks 21:931fe86dbf5a 33 double lowpassFilter1 = 0;
keeswieriks 21:931fe86dbf5a 34 double notchFilter2 = 0;
keeswieriks 21:931fe86dbf5a 35 double highpassFilter2 = 0;
keeswieriks 21:931fe86dbf5a 36 double lowpassFilter2 = 0;
keeswieriks 21:931fe86dbf5a 37
keeswieriks 21:931fe86dbf5a 38 // BiQuad values
keeswieriks 21:931fe86dbf5a 39 BiQuadChain notch;
keeswieriks 21:931fe86dbf5a 40 BiQuad N1( m1, m2, n0, n1, n2);
keeswieriks 21:931fe86dbf5a 41 BiQuad N2( m1, m2, n0, n1, n2);
keeswieriks 21:931fe86dbf5a 42 BiQuad N3( m1, m2, n0, n1, n2);
keeswieriks 21:931fe86dbf5a 43 BiQuadChain highpass;
keeswieriks 21:931fe86dbf5a 44 BiQuad H1( a1, a2, b0, b1, b2);
keeswieriks 21:931fe86dbf5a 45 BiQuad H2( a1, a2, b0, b1, b2);
keeswieriks 21:931fe86dbf5a 46 BiQuad H3( a1, a2, b0, b1, b2);
keeswieriks 21:931fe86dbf5a 47 BiQuadChain lowpass;
keeswieriks 21:931fe86dbf5a 48 BiQuad L1( c1, c2, d0, d1, d2);
keeswieriks 21:931fe86dbf5a 49 BiQuad L2( c1, c2, d0, d1, d2);
keeswieriks 21:931fe86dbf5a 50 BiQuad L3( c1, c2, d0, d1, d2);
keeswieriks 21:931fe86dbf5a 51
s1574396 22:bcfee9594007 52 // Filter of the first EMG signal
keeswieriks 21:931fe86dbf5a 53 void filter0()
vsluiter 2:e314bb3b2d99 54 {
keeswieriks 21:931fe86dbf5a 55 double emg0;
keeswieriks 21:931fe86dbf5a 56 double notch;
keeswieriks 21:931fe86dbf5a 57 double high;
keeswieriks 21:931fe86dbf5a 58 double absolute;
keeswieriks 21:931fe86dbf5a 59 double low;
s1574396 23:dec549767006 60 emg0 = emg0_in.read(); // Reading the EMG signal
s1574396 23:dec549767006 61 notch = N1.step(emg0); // Applying a notch filter over the EMG data
s1574396 23:dec549767006 62 high = H1.step(notch); // Applying a high pass filter
s1574396 23:dec549767006 63 absolute = fabs(high); // Rectifying the data
s1574396 23:dec549767006 64 low = L1.step(absolute); // Applying low pass filter
s1574396 23:dec549767006 65
s1574396 23:dec549767006 66 scope.set(0,emg0);
s1574396 23:dec549767006 67 scope.set(1,low);
s1574396 23:dec549767006 68 scope.send();
s1574396 22:bcfee9594007 69 }
keeswieriks 21:931fe86dbf5a 70
s1574396 23:dec549767006 71 // Filter of the second EMG signal
s1574396 22:bcfee9594007 72 void filter1(){
keeswieriks 21:931fe86dbf5a 73 double emg1;
keeswieriks 21:931fe86dbf5a 74 double notch;
keeswieriks 21:931fe86dbf5a 75 double high;
keeswieriks 21:931fe86dbf5a 76 double absolute;
keeswieriks 21:931fe86dbf5a 77 double low;
s1574396 23:dec549767006 78 emg1 = emg1_in.read(); // Reading the EMG signal
s1574396 23:dec549767006 79 notch = N2.step(emg1); // Applying a notch filter over the EMG data
s1574396 23:dec549767006 80 high = H2.step(notch); // Applying a high pass filter
s1574396 23:dec549767006 81 absolute = fabs(high); // Rectifying the data
s1574396 23:dec549767006 82 low = L2.step(absolute); // Applying low pass filter
s1574396 23:dec549767006 83
s1574396 23:dec549767006 84 //scope.set(3,emg1);
s1574396 23:dec549767006 85 //scope.set(4,low);
s1574396 23:dec549767006 86 //scope.send();
keeswieriks 21:931fe86dbf5a 87 }
s1574396 22:bcfee9594007 88
s1574396 23:dec549767006 89 // Filter of the third EMG signal
keeswieriks 21:931fe86dbf5a 90 void filter2()
keeswieriks 21:931fe86dbf5a 91 {
keeswieriks 21:931fe86dbf5a 92 double emg2;
keeswieriks 21:931fe86dbf5a 93 double notch;
keeswieriks 21:931fe86dbf5a 94 double high;
keeswieriks 21:931fe86dbf5a 95 double absolute;
keeswieriks 21:931fe86dbf5a 96 double low;
s1574396 23:dec549767006 97 emg2 = emg2_in.read(); // Reading the EMG signal
s1574396 23:dec549767006 98 notch = N3.step(emg2); // Applying a notch filter over the EMG data
s1574396 23:dec549767006 99 high = H3.step(notch); // Applying a high pass filter
s1574396 23:dec549767006 100 absolute = fabs(high); // Rectifying the data
s1574396 23:dec549767006 101 low = L3.step(absolute); // Applying low pass filter
s1574396 23:dec549767006 102
s1574396 23:dec549767006 103 //scope.set(5,emg2);
s1574396 23:dec549767006 104 //scope.set(6,low);
s1574396 23:dec549767006 105 //scope.send();
vsluiter 2:e314bb3b2d99 106 }
vsluiter 0:32bb76391d89 107
s1574396 23:dec549767006 108 // Combining the filters in one fuction
keeswieriks 21:931fe86dbf5a 109 void filtered_emg()
keeswieriks 21:931fe86dbf5a 110 {
s1574396 22:bcfee9594007 111 filter0();
s1574396 22:bcfee9594007 112 filter1();
s1574396 22:bcfee9594007 113 filter2();
keeswieriks 21:931fe86dbf5a 114 }
keeswieriks 21:931fe86dbf5a 115
keeswieriks 21:931fe86dbf5a 116 int main()
keeswieriks 21:931fe86dbf5a 117 {
s1574396 23:dec549767006 118 sample_timer.attach(&filter0, 0.002); //filter0 can be changed to signal 1 of 2
keeswieriks 21:931fe86dbf5a 119
s1574396 23:dec549767006 120 while(1) {}
vsluiter 0:32bb76391d89 121 }