emg2
Dependencies: HIDScope biquadFilter mbed QEI
Fork of EMG by
main.cpp@24:6bdc50e21805, 2018-10-29 (annotated)
- 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?
User | Revision | Line number | New 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 | } |