kakding
Dependencies: HIDScope biquadFilter mbed
Fork of biquad2_2 by
main.cpp@3:faa029d96ac3, 2015-10-22 (annotated)
- Committer:
- Paashaas
- Date:
- Thu Oct 22 12:18:58 2015 +0000
- Revision:
- 3:faa029d96ac3
- Parent:
- 2:192bd1385db6
elke filter in een aparte ticker
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Paashaas | 0:f9aed4422fcb | 1 | #include "mbed.h" |
Paashaas | 0:f9aed4422fcb | 2 | #include "HIDScope.h" |
Paashaas | 0:f9aed4422fcb | 3 | #include "biquadFilter.h" |
Paashaas | 0:f9aed4422fcb | 4 | |
Paashaas | 0:f9aed4422fcb | 5 | AnalogIn emg1(A0); //onderste board |
Paashaas | 0:f9aed4422fcb | 6 | AnalogIn emg2(A1); // 2e board |
Paashaas | 0:f9aed4422fcb | 7 | AnalogIn emg3(A2); // 3e board |
Paashaas | 0:f9aed4422fcb | 8 | AnalogIn emg4(A3); // bovenste board |
Paashaas | 0:f9aed4422fcb | 9 | |
Paashaas | 3:faa029d96ac3 | 10 | Ticker sample_ticker_1; // naam van 1e emg-ticker |
Paashaas | 3:faa029d96ac3 | 11 | Ticker sample_ticker_2; // naam van 2e emg-ticker |
Paashaas | 3:faa029d96ac3 | 12 | Ticker sample_ticker_3; // naam van 3e emg-ticker |
Paashaas | 3:faa029d96ac3 | 13 | Ticker sample_ticker_4; // naam van 4e emg-ticker |
Paashaas | 0:f9aed4422fcb | 14 | |
Paashaas | 3:faa029d96ac3 | 15 | |
Paashaas | 3:faa029d96ac3 | 16 | HIDScope scope(4); // aantal kanalen voor je HIDScope |
Paashaas | 0:f9aed4422fcb | 17 | |
Paashaas | 0:f9aed4422fcb | 18 | //highpass filter 20 Hz |
Paashaas | 0:f9aed4422fcb | 19 | const double numhigh_1 = 0.956543225556877; |
Paashaas | 0:f9aed4422fcb | 20 | const double numhigh_2 = -1.91308645113754; |
Paashaas | 0:f9aed4422fcb | 21 | const double numhigh_3 = 0.956543225556877; |
Paashaas | 0:f9aed4422fcb | 22 | const double denhigh_2 = -1.91197067426073; |
Paashaas | 0:f9aed4422fcb | 23 | const double denhigh_3 = 0.9149758348014341; |
Paashaas | 0:f9aed4422fcb | 24 | |
Paashaas | 0:f9aed4422fcb | 25 | //notchfilter 50Hz |
Paashaas | 0:f9aed4422fcb | 26 | //biquad 1 |
Paashaas | 0:f9aed4422fcb | 27 | const double numnotch_1_1 = 1; |
Paashaas | 0:f9aed4422fcb | 28 | const double numnotch_1_2 = -1.97538661427765; |
Paashaas | 0:f9aed4422fcb | 29 | const double numnotch_1_3 = 1.00000018882502; |
Paashaas | 0:f9aed4422fcb | 30 | const double dennotch_1_2 = -1.97024348390877; |
Paashaas | 0:f9aed4422fcb | 31 | const double dennotch_1_3 = 0.995504923090779; |
Paashaas | 0:f9aed4422fcb | 32 | |
Paashaas | 0:f9aed4422fcb | 33 | //biquad 2 |
Paashaas | 0:f9aed4422fcb | 34 | const double numnotch_2_1 = 1; |
Paashaas | 0:f9aed4422fcb | 35 | const double numnotch_2_2 = -1.97538624436946; |
Paashaas | 0:f9aed4422fcb | 36 | const double numnotch_2_3 = 1.00000018882502; |
Paashaas | 0:f9aed4422fcb | 37 | const double dennotch_2_2 = -1.97175302143845; |
Paashaas | 0:f9aed4422fcb | 38 | const double dennotch_2_3 = 0.995629024908953; |
Paashaas | 0:f9aed4422fcb | 39 | |
Paashaas | 0:f9aed4422fcb | 40 | //lowpass filter 7 Hz - envelop |
Paashaas | 0:f9aed4422fcb | 41 | const double numlow_1 = 0.000119046743110057; |
Paashaas | 0:f9aed4422fcb | 42 | const double numlow_2 = 0.000238093486220118; |
Paashaas | 0:f9aed4422fcb | 43 | const double numlow_3 = 0.000119046743110057; |
Paashaas | 0:f9aed4422fcb | 44 | const double denlow_2 = -1.968902268531908; |
Paashaas | 0:f9aed4422fcb | 45 | const double denlow_3 = 0.9693784555043481; |
Paashaas | 0:f9aed4422fcb | 46 | |
Paashaas | 0:f9aed4422fcb | 47 | |
Paashaas | 0:f9aed4422fcb | 48 | double u1 = emg1.read(); //inputvariables |
Paashaas | 0:f9aed4422fcb | 49 | double u2 = emg2.read(); |
Paashaas | 0:f9aed4422fcb | 50 | double u3 = emg3.read(); |
Paashaas | 0:f9aed4422fcb | 51 | double u4 = emg4.read(); |
Paashaas | 0:f9aed4422fcb | 52 | |
Paashaas | 0:f9aed4422fcb | 53 | |
Paashaas | 0:f9aed4422fcb | 54 | biquadFilter highpass( denhigh_2 , denhigh_3 , numhigh_1 , numhigh_2 , numhigh_3); // removes artifacts |
Paashaas | 0:f9aed4422fcb | 55 | biquadFilter notch1( dennotch_1_2 , dennotch_1_3 , numnotch_1_1 , numnotch_1_2 , numnotch_1_3 ); // removes 49-51 Hz power interference |
Paashaas | 0:f9aed4422fcb | 56 | biquadFilter notch2( dennotch_2_2 , dennotch_2_3 , numnotch_2_1 , numnotch_2_2 , numnotch_2_3 ); // |
Paashaas | 0:f9aed4422fcb | 57 | biquadFilter lowpass( denlow_2 , denlow_3 , numlow_1 , numlow_2 , numlow_3 ); // EMG envelope |
Paashaas | 0:f9aed4422fcb | 58 | |
Paashaas | 0:f9aed4422fcb | 59 | biquadFilter highpass_2( denhigh_2 , denhigh_3 , numhigh_1 , numhigh_2 , numhigh_3); |
Paashaas | 0:f9aed4422fcb | 60 | biquadFilter notch1_2( dennotch_1_2 , dennotch_1_3 , numnotch_1_1 , numnotch_1_2 , numnotch_1_3 ); // removes 49-51 Hz power interference |
Paashaas | 0:f9aed4422fcb | 61 | biquadFilter notch2_2( dennotch_2_2 , dennotch_2_3 , numnotch_2_1 , numnotch_2_2 , numnotch_2_3 ); // |
Paashaas | 0:f9aed4422fcb | 62 | biquadFilter lowpass_2( denlow_2 , denlow_3 , numlow_1 , numlow_2 , numlow_3 ); // EMG envelope |
Paashaas | 0:f9aed4422fcb | 63 | |
Paashaas | 0:f9aed4422fcb | 64 | biquadFilter highpass_3( denhigh_2 , denhigh_3 , numhigh_1 , numhigh_2 , numhigh_3); |
Paashaas | 0:f9aed4422fcb | 65 | biquadFilter notch1_3( dennotch_1_2 , dennotch_1_3 , numnotch_1_1 , numnotch_1_2 , numnotch_1_3 ); // removes 49-51 Hz power interference |
Paashaas | 0:f9aed4422fcb | 66 | biquadFilter notch2_3( dennotch_2_2 , dennotch_2_3 , numnotch_2_1 , numnotch_2_2 , numnotch_2_3 ); // |
Paashaas | 0:f9aed4422fcb | 67 | biquadFilter lowpass_3( denlow_2 , denlow_3 , numlow_1 , numlow_2 , numlow_3 ); // EMG envelope |
Paashaas | 0:f9aed4422fcb | 68 | |
Paashaas | 0:f9aed4422fcb | 69 | biquadFilter highpass_4( denhigh_2 , denhigh_3 , numhigh_1 , numhigh_2 , numhigh_3); |
Paashaas | 0:f9aed4422fcb | 70 | biquadFilter notch1_4( dennotch_1_2 , dennotch_1_3 , numnotch_1_1 , numnotch_1_2 , numnotch_1_3 ); // removes 49-51 Hz power interference |
Paashaas | 0:f9aed4422fcb | 71 | biquadFilter notch2_4( dennotch_2_2 , dennotch_2_3 , numnotch_2_1 , numnotch_2_2 , numnotch_2_3 ); // |
Paashaas | 0:f9aed4422fcb | 72 | biquadFilter lowpass_4( denlow_2 , denlow_3 , numlow_1 , numlow_2 , numlow_3 ); // EMG envelope |
Paashaas | 0:f9aed4422fcb | 73 | |
Paashaas | 2:192bd1385db6 | 74 | double y5_1, y5_2, y5_3, y5_4; |
Paashaas | 2:192bd1385db6 | 75 | |
Paashaas | 3:faa029d96ac3 | 76 | void emg_sample_1() |
Paashaas | 0:f9aed4422fcb | 77 | { |
Paashaas | 0:f9aed4422fcb | 78 | |
Paashaas | 2:192bd1385db6 | 79 | double y1_1 = highpass.step ( emg1.read() ); |
Paashaas | 1:911daa1a9f4a | 80 | double y2_1 = notch1.step (y1_1); |
Paashaas | 1:911daa1a9f4a | 81 | double y3_1 = notch2.step (y2_1); |
Paashaas | 1:911daa1a9f4a | 82 | double y4_1 = abs(y3_1); |
Paashaas | 2:192bd1385db6 | 83 | y5_1 = lowpass.step (y4_1); |
Paashaas | 3:faa029d96ac3 | 84 | |
Paashaas | 3:faa029d96ac3 | 85 | scope.set(0,y5_1); |
Paashaas | 3:faa029d96ac3 | 86 | |
Paashaas | 3:faa029d96ac3 | 87 | } |
Paashaas | 3:faa029d96ac3 | 88 | |
Paashaas | 3:faa029d96ac3 | 89 | void emg_sample_2() |
Paashaas | 3:faa029d96ac3 | 90 | { |
Paashaas | 0:f9aed4422fcb | 91 | |
Paashaas | 2:192bd1385db6 | 92 | double y1_2 = highpass_2.step ( emg2.read() ); |
Paashaas | 1:911daa1a9f4a | 93 | double y2_2 = notch1_2.step (y1_2); |
Paashaas | 1:911daa1a9f4a | 94 | double y3_2 = notch2_2.step (y2_2); |
Paashaas | 1:911daa1a9f4a | 95 | double y4_2 = abs(y3_2); |
Paashaas | 2:192bd1385db6 | 96 | y5_2 = lowpass_2.step (y4_2); |
Paashaas | 3:faa029d96ac3 | 97 | |
Paashaas | 3:faa029d96ac3 | 98 | scope.set(1,y5_2); |
Paashaas | 3:faa029d96ac3 | 99 | } |
Paashaas | 3:faa029d96ac3 | 100 | |
Paashaas | 3:faa029d96ac3 | 101 | void emg_sample_3() |
Paashaas | 3:faa029d96ac3 | 102 | { |
Paashaas | 0:f9aed4422fcb | 103 | |
Paashaas | 2:192bd1385db6 | 104 | double y1_3 = highpass_3.step ( emg3.read() ); |
Paashaas | 1:911daa1a9f4a | 105 | double y2_3 = notch1_3.step (y1_3); |
Paashaas | 1:911daa1a9f4a | 106 | double y3_3 = notch2_3.step (y2_3); |
Paashaas | 1:911daa1a9f4a | 107 | double y4_3 = abs(y3_3); |
Paashaas | 2:192bd1385db6 | 108 | y5_3 = lowpass_3.step (y4_3); |
Paashaas | 3:faa029d96ac3 | 109 | |
Paashaas | 3:faa029d96ac3 | 110 | scope.set(2,y5_3); |
Paashaas | 3:faa029d96ac3 | 111 | } |
Paashaas | 1:911daa1a9f4a | 112 | |
Paashaas | 3:faa029d96ac3 | 113 | void emg_sample_4() |
Paashaas | 3:faa029d96ac3 | 114 | { |
Paashaas | 0:f9aed4422fcb | 115 | |
Paashaas | 2:192bd1385db6 | 116 | double y1_4 = highpass_4.step ( emg4.read() ); |
Paashaas | 1:911daa1a9f4a | 117 | double y2_4 = notch1_4.step (y1_4); |
Paashaas | 1:911daa1a9f4a | 118 | double y3_4 = notch2_4.step (y2_4); |
Paashaas | 1:911daa1a9f4a | 119 | double y4_4 = abs(y3_4); |
Paashaas | 2:192bd1385db6 | 120 | y5_4 = lowpass_4.step (y4_4); |
Paashaas | 0:f9aed4422fcb | 121 | |
Paashaas | 1:911daa1a9f4a | 122 | |
Paashaas | 3:faa029d96ac3 | 123 | scope.set(3,y5_4); |
Paashaas | 1:911daa1a9f4a | 124 | scope.send(); |
Paashaas | 0:f9aed4422fcb | 125 | } |
Paashaas | 0:f9aed4422fcb | 126 | |
Paashaas | 0:f9aed4422fcb | 127 | int main() |
Paashaas | 0:f9aed4422fcb | 128 | { |
Paashaas | 3:faa029d96ac3 | 129 | sample_ticker_1.attach(&emg_sample_1,0.002); |
Paashaas | 3:faa029d96ac3 | 130 | sample_ticker_2.attach(&emg_sample_2,0.002); |
Paashaas | 3:faa029d96ac3 | 131 | sample_ticker_3.attach(&emg_sample_3,0.002); |
Paashaas | 3:faa029d96ac3 | 132 | sample_ticker_4.attach(&emg_sample_4,0.002); |
Paashaas | 2:192bd1385db6 | 133 | while (true){} |
Paashaas | 0:f9aed4422fcb | 134 | } |