emg2
Dependencies: HIDScope biquadFilter mbed QEI
Fork of EMG by
main.cpp@23:dec549767006, 2018-10-29 (annotated)
- 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?
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; |
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 | } |