emg2

Dependencies:   HIDScope biquadFilter mbed QEI

Fork of EMG by Tom Tom

Committer:
s1574396
Date:
Mon Oct 29 20:02:20 2018 +0000
Revision:
24:6bdc50e21805
Parent:
23:dec549767006
Child:
25:02f183b944ed
alles wat ingekort;

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;
s1574396 24:6bdc50e21805 29
s1574396 23:dec549767006 30 // Variables EMG
s1574396 24:6bdc50e21805 31 double emg0;
s1574396 24:6bdc50e21805 32 double emg1;
s1574396 24:6bdc50e21805 33 double emg2;
s1574396 24:6bdc50e21805 34 double notch0;
s1574396 24:6bdc50e21805 35 double notch1;
s1574396 24:6bdc50e21805 36 double notch2;
s1574396 24:6bdc50e21805 37 double high0;
s1574396 24:6bdc50e21805 38 double high1;
s1574396 24:6bdc50e21805 39 double high2;
s1574396 24:6bdc50e21805 40 double absolute0;
s1574396 24:6bdc50e21805 41 double absolute1;
s1574396 24:6bdc50e21805 42 double absolute2;
s1574396 24:6bdc50e21805 43 double low0;
s1574396 24:6bdc50e21805 44 double low1;
s1574396 24:6bdc50e21805 45 double low2;
keeswieriks 21:931fe86dbf5a 46
keeswieriks 21:931fe86dbf5a 47 // BiQuad values
keeswieriks 21:931fe86dbf5a 48 BiQuadChain notch;
keeswieriks 21:931fe86dbf5a 49 BiQuad N1( m1, m2, n0, n1, n2);
keeswieriks 21:931fe86dbf5a 50 BiQuad N2( m1, m2, n0, n1, n2);
keeswieriks 21:931fe86dbf5a 51 BiQuad N3( m1, m2, n0, n1, n2);
keeswieriks 21:931fe86dbf5a 52 BiQuadChain highpass;
keeswieriks 21:931fe86dbf5a 53 BiQuad H1( a1, a2, b0, b1, b2);
keeswieriks 21:931fe86dbf5a 54 BiQuad H2( a1, a2, b0, b1, b2);
keeswieriks 21:931fe86dbf5a 55 BiQuad H3( a1, a2, b0, b1, b2);
keeswieriks 21:931fe86dbf5a 56 BiQuadChain lowpass;
keeswieriks 21:931fe86dbf5a 57 BiQuad L1( c1, c2, d0, d1, d2);
keeswieriks 21:931fe86dbf5a 58 BiQuad L2( c1, c2, d0, d1, d2);
keeswieriks 21:931fe86dbf5a 59 BiQuad L3( c1, c2, d0, d1, d2);
keeswieriks 21:931fe86dbf5a 60
s1574396 22:bcfee9594007 61 // Filter of the first EMG signal
s1574396 24:6bdc50e21805 62 void filtering()
vsluiter 2:e314bb3b2d99 63 {
s1574396 23:dec549767006 64 emg0 = emg0_in.read(); // Reading the EMG signal
s1574396 24:6bdc50e21805 65 emg1 = emg1_in.read();
s1574396 24:6bdc50e21805 66 emg2 = emg2_in.read();
s1574396 24:6bdc50e21805 67 notch0 = N1.step(emg0); // Applying a notch filter over the EMG data
s1574396 24:6bdc50e21805 68 notch1 = N2.step(emg1);
s1574396 24:6bdc50e21805 69 notch2 = N3.step(emg2);
s1574396 24:6bdc50e21805 70 high0 = H1.step(notch0); // Applying a high pass filter
s1574396 24:6bdc50e21805 71 high1 = H2.step(notch1);
s1574396 24:6bdc50e21805 72 high2 = H3.step(notch2);
s1574396 24:6bdc50e21805 73 absolute0 = fabs(high0); // Rectifying the signal
s1574396 24:6bdc50e21805 74 absolute1 = fabs(high1);
s1574396 24:6bdc50e21805 75 absolute2 = fabs(high2);
s1574396 24:6bdc50e21805 76 low0 = L1.step(absolute0); // Applying low pass filter
s1574396 24:6bdc50e21805 77 low1 = L2.step(absolute1);
s1574396 24:6bdc50e21805 78 low2 = L3.step(absolute2);
s1574396 23:dec549767006 79
s1574396 24:6bdc50e21805 80 scope.set(0,emg0); // Sending the signal to the HIDScope
s1574396 24:6bdc50e21805 81 scope.set(1,low0);
s1574396 24:6bdc50e21805 82 scope.send();
keeswieriks 21:931fe86dbf5a 83 }
keeswieriks 21:931fe86dbf5a 84
keeswieriks 21:931fe86dbf5a 85 int main()
keeswieriks 21:931fe86dbf5a 86 {
s1574396 24:6bdc50e21805 87 sample_timer.attach(&filtering, 0.002);
keeswieriks 21:931fe86dbf5a 88
s1574396 23:dec549767006 89 while(1) {}
vsluiter 0:32bb76391d89 90 }