biorobotics group 19 , 2 november
Fork of SigInterpreterv2 by
SigInterpreter.cpp@3:096e6a7bd90b, 2016-11-02 (annotated)
- Committer:
- fabian101
- Date:
- Wed Nov 02 15:39:01 2016 +0000
- Revision:
- 3:096e6a7bd90b
- Parent:
- 2:ad96602f71c0
biorobotics group 19 , 2 november
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fabian101 | 1:665ee7703fbe | 1 | #include "SigInterpreter.h" |
fabian101 | 1:665ee7703fbe | 2 | |
fabian101 | 3:096e6a7bd90b | 3 | /* |
fabian101 | 3:096e6a7bd90b | 4 | const double b0_1 = 0.86746769957; |
fabian101 | 3:096e6a7bd90b | 5 | const double b1_1 = -1.73493539914; |
fabian101 | 3:096e6a7bd90b | 6 | const double b2_1 = 0.86746769957; |
fabian101 | 3:096e6a7bd90b | 7 | const double a1_1 = -1.72399696946; |
fabian101 | 3:096e6a7bd90b | 8 | const double a2_1 = 0.74581276783; |
fabian101 | 3:096e6a7bd90b | 9 | |
fabian101 | 3:096e6a7bd90b | 10 | const double b0_2 = 0.93721236427; |
fabian101 | 3:096e6a7bd90b | 11 | const double b1_2 = -1.87442472855; |
fabian101 | 3:096e6a7bd90b | 12 | const double b2_2 = 0.93721236427; |
fabian101 | 3:096e6a7bd90b | 13 | const double a1_2 = -1.82350353127; |
fabian101 | 3:096e6a7bd90b | 14 | const double a2_2 = 0.8862430266; |
fabian101 | 3:096e6a7bd90b | 15 | |
fabian101 | 3:096e6a7bd90b | 16 | */ |
fabian101 | 3:096e6a7bd90b | 17 | BiQuad bq1_1(-1.72399696946,0.74581276783,0.86746769957,-1.73493539914,0.86746769957); |
fabian101 | 3:096e6a7bd90b | 18 | BiQuad bq1_2(-1.82350353127,0.8862430266,0.93721236427,-1.87442472855,0.93721236427); |
fabian101 | 3:096e6a7bd90b | 19 | BiQuad bq1_3( 3.00955e-10, 3.00615e-10, 0.00000e+00, -9.75178e-01, 0.00000e+00 ); |
fabian101 | 3:096e6a7bd90b | 20 | BiQuad bq1_4( 1.00000e+00, 2.00183e+00, 1.00183e+00, -1.95953e+00, 9.60149e-01 ); |
fabian101 | 3:096e6a7bd90b | 21 | BiQuad bq1_5( 1.00000e+00, 1.99930e+00, 9.99302e-01, -1.98396e+00, 9.84588e-01 ); |
fabian101 | 3:096e6a7bd90b | 22 | |
fabian101 | 3:096e6a7bd90b | 23 | BiQuad bq2_1(-1.72399696946,0.74581276783,0.86746769957,-1.73493539914,0.86746769957); |
fabian101 | 3:096e6a7bd90b | 24 | BiQuad bq2_2(-1.82350353127,0.8862430266,0.93721236427,-1.87442472855,0.93721236427); |
fabian101 | 3:096e6a7bd90b | 25 | BiQuad bq2_3( 3.00955e-10, 3.00615e-10, 0.00000e+00, -9.75178e-01, 0.00000e+00 ); |
fabian101 | 3:096e6a7bd90b | 26 | BiQuad bq2_4( 1.00000e+00, 2.00183e+00, 1.00183e+00, -1.95953e+00, 9.60149e-01 ); |
fabian101 | 3:096e6a7bd90b | 27 | BiQuad bq2_5( 1.00000e+00, 1.99930e+00, 9.99302e-01, -1.98396e+00, 9.84588e-01 ); |
fabian101 | 3:096e6a7bd90b | 28 | |
fabian101 | 3:096e6a7bd90b | 29 | BiQuad bq3_1(-1.72399696946,0.74581276783,0.86746769957,-1.73493539914,0.86746769957); |
fabian101 | 3:096e6a7bd90b | 30 | BiQuad bq3_2(-1.82350353127,0.8862430266,0.93721236427,-1.87442472855,0.93721236427); |
fabian101 | 3:096e6a7bd90b | 31 | BiQuad bq3_3( 3.00955e-10, 3.00615e-10, 0.00000e+00, -9.75178e-01, 0.00000e+00 ); |
fabian101 | 3:096e6a7bd90b | 32 | BiQuad bq3_4( 1.00000e+00, 2.00183e+00, 1.00183e+00, -1.95953e+00, 9.60149e-01 ); |
fabian101 | 3:096e6a7bd90b | 33 | BiQuad bq3_5( 1.00000e+00, 1.99930e+00, 9.99302e-01, -1.98396e+00, 9.84588e-01 ); |
fabian101 | 3:096e6a7bd90b | 34 | |
fabian101 | 3:096e6a7bd90b | 35 | BiQuad bq4_1(-1.72399696946,0.74581276783,0.86746769957,-1.73493539914,0.86746769957); |
fabian101 | 3:096e6a7bd90b | 36 | BiQuad bq4_2(-1.82350353127,0.8862430266,0.93721236427,-1.87442472855,0.93721236427); |
fabian101 | 3:096e6a7bd90b | 37 | BiQuad bq4_3( 3.00955e-10, 3.00615e-10, 0.00000e+00, -9.75178e-01, 0.00000e+00 ); |
fabian101 | 3:096e6a7bd90b | 38 | BiQuad bq4_4( 1.00000e+00, 2.00183e+00, 1.00183e+00, -1.95953e+00, 9.60149e-01 ); |
fabian101 | 3:096e6a7bd90b | 39 | BiQuad bq4_5( 1.00000e+00, 1.99930e+00, 9.99302e-01, -1.98396e+00, 9.84588e-01 ); |
fabian101 | 3:096e6a7bd90b | 40 | |
fabian101 | 3:096e6a7bd90b | 41 | |
fabian101 | 2:ad96602f71c0 | 42 | |
fabian101 | 1:665ee7703fbe | 43 | AnalogIn emg1(A0); |
fabian101 | 1:665ee7703fbe | 44 | AnalogIn emg2(A1); |
fabian101 | 1:665ee7703fbe | 45 | AnalogIn emg3(A2); |
fabian101 | 1:665ee7703fbe | 46 | AnalogIn emg4(A3); |
fabian101 | 2:ad96602f71c0 | 47 | |
fabian101 | 2:ad96602f71c0 | 48 | SigInterpreter::SigInterpreter() |
fabian101 | 2:ad96602f71c0 | 49 | { |
fabian101 | 1:665ee7703fbe | 50 | |
fabian101 | 2:ad96602f71c0 | 51 | } |
fabian101 | 1:665ee7703fbe | 52 | |
fabian101 | 3:096e6a7bd90b | 53 | float SigInterpreter::readValue(int sig) { |
fabian101 | 1:665ee7703fbe | 54 | // returns the amplitude of EMG signal |
fabian101 | 2:ad96602f71c0 | 55 | if(sig > 4 || sig < 1) |
fabian101 | 2:ad96602f71c0 | 56 | { |
fabian101 | 1:665ee7703fbe | 57 | // nope |
fabian101 | 3:096e6a7bd90b | 58 | return 0.0; |
fabian101 | 2:ad96602f71c0 | 59 | } |
fabian101 | 2:ad96602f71c0 | 60 | if (sig == 1) |
fabian101 | 2:ad96602f71c0 | 61 | { |
fabian101 | 3:096e6a7bd90b | 62 | return (filter1(emg1.read())); |
fabian101 | 1:665ee7703fbe | 63 | } |
fabian101 | 2:ad96602f71c0 | 64 | if (sig == 2) |
fabian101 | 2:ad96602f71c0 | 65 | { |
fabian101 | 3:096e6a7bd90b | 66 | return (filter2(emg2.read())); |
fabian101 | 1:665ee7703fbe | 67 | } |
fabian101 | 2:ad96602f71c0 | 68 | if (sig == 3) |
fabian101 | 2:ad96602f71c0 | 69 | { |
fabian101 | 3:096e6a7bd90b | 70 | return (filter3(emg3.read())); |
fabian101 | 1:665ee7703fbe | 71 | } |
fabian101 | 2:ad96602f71c0 | 72 | if (sig == 4) |
fabian101 | 2:ad96602f71c0 | 73 | { |
fabian101 | 3:096e6a7bd90b | 74 | return (filter4(emg4.read())); |
fabian101 | 2:ad96602f71c0 | 75 | } |
fabian101 | 2:ad96602f71c0 | 76 | else |
fabian101 | 2:ad96602f71c0 | 77 | { |
fabian101 | 2:ad96602f71c0 | 78 | return 0.0; |
fabian101 | 2:ad96602f71c0 | 79 | } |
fabian101 | 1:665ee7703fbe | 80 | } |
fabian101 | 2:ad96602f71c0 | 81 | |
fabian101 | 3:096e6a7bd90b | 82 | float SigInterpreter::filter1(float input){ |
fabian101 | 2:ad96602f71c0 | 83 | |
fabian101 | 3:096e6a7bd90b | 84 | highpass1 = bq1_1.step(input); |
fabian101 | 3:096e6a7bd90b | 85 | highpass2 = bq1_2.step(highpass1); |
fabian101 | 3:096e6a7bd90b | 86 | rect = fabs(highpass2); |
fabian101 | 3:096e6a7bd90b | 87 | lowpass1 = bq1_3.step(rect); |
fabian101 | 3:096e6a7bd90b | 88 | lowpass2 = bq1_4.step(lowpass1); |
fabian101 | 3:096e6a7bd90b | 89 | lowpass3 = bq1_5.step(lowpass2); |
fabian101 | 3:096e6a7bd90b | 90 | |
fabian101 | 3:096e6a7bd90b | 91 | return lowpass3; |
fabian101 | 3:096e6a7bd90b | 92 | } |
fabian101 | 2:ad96602f71c0 | 93 | |
fabian101 | 3:096e6a7bd90b | 94 | float SigInterpreter::filter2(float input){ |
fabian101 | 3:096e6a7bd90b | 95 | |
fabian101 | 3:096e6a7bd90b | 96 | highpass1 = bq2_1.step(input); |
fabian101 | 3:096e6a7bd90b | 97 | highpass2 = bq2_2.step(highpass1); |
fabian101 | 3:096e6a7bd90b | 98 | rect = fabs(highpass2); |
fabian101 | 3:096e6a7bd90b | 99 | lowpass1 = bq2_3.step(rect); |
fabian101 | 3:096e6a7bd90b | 100 | lowpass2 = bq2_4.step(lowpass1); |
fabian101 | 3:096e6a7bd90b | 101 | lowpass3 = bq2_5.step(lowpass2); |
fabian101 | 2:ad96602f71c0 | 102 | |
fabian101 | 3:096e6a7bd90b | 103 | return lowpass3; |
fabian101 | 2:ad96602f71c0 | 104 | } |
fabian101 | 2:ad96602f71c0 | 105 | |
fabian101 | 3:096e6a7bd90b | 106 | float SigInterpreter::filter3(float input){ |
fabian101 | 3:096e6a7bd90b | 107 | |
fabian101 | 3:096e6a7bd90b | 108 | highpass1 = bq3_1.step(input); |
fabian101 | 3:096e6a7bd90b | 109 | highpass2 = bq3_2.step(highpass1); |
fabian101 | 3:096e6a7bd90b | 110 | rect = fabs(highpass2); |
fabian101 | 3:096e6a7bd90b | 111 | lowpass1 = bq3_3.step(rect); |
fabian101 | 3:096e6a7bd90b | 112 | lowpass2 = bq3_4.step(lowpass1); |
fabian101 | 3:096e6a7bd90b | 113 | lowpass3 = bq3_5.step(lowpass2); |
fabian101 | 3:096e6a7bd90b | 114 | |
fabian101 | 3:096e6a7bd90b | 115 | return lowpass3; |
fabian101 | 3:096e6a7bd90b | 116 | } |
fabian101 | 3:096e6a7bd90b | 117 | |
fabian101 | 3:096e6a7bd90b | 118 | float SigInterpreter::filter4(float input){ |
fabian101 | 3:096e6a7bd90b | 119 | |
fabian101 | 3:096e6a7bd90b | 120 | highpass1 = bq4_1.step(input); |
fabian101 | 3:096e6a7bd90b | 121 | highpass2 = bq4_2.step(highpass1); |
fabian101 | 3:096e6a7bd90b | 122 | rect = fabs(highpass2); |
fabian101 | 3:096e6a7bd90b | 123 | lowpass1 = bq4_3.step(rect); |
fabian101 | 3:096e6a7bd90b | 124 | lowpass2 = bq4_4.step(lowpass1); |
fabian101 | 3:096e6a7bd90b | 125 | lowpass3 = bq4_5.step(lowpass2); |
fabian101 | 3:096e6a7bd90b | 126 | |
fabian101 | 3:096e6a7bd90b | 127 | return lowpass3; |
fabian101 | 3:096e6a7bd90b | 128 | } |
fabian101 | 3:096e6a7bd90b | 129 | |
fabian101 | 3:096e6a7bd90b | 130 |