filtering the signal needs tweaking but timing works,
Fork of SigInterpreter by
SigInterpreter.cpp@2:ad96602f71c0, 2016-10-28 (annotated)
- Committer:
- fabian101
- Date:
- Fri Oct 28 12:48:27 2016 +0000
- Revision:
- 2:ad96602f71c0
- Parent:
- 1:665ee7703fbe
28-10 friday, filtering is implemented but needs tweaking;
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 | 2:ad96602f71c0 | 3 | BiQuadChain bqc; |
fabian101 | 2:ad96602f71c0 | 4 | BiQuad bq1(a1_1,a2_1,b0_1,b1_1,b2_1); |
fabian101 | 2:ad96602f71c0 | 5 | BiQuad bq2(a1_2,a2_2,b0_2,b1_2,b2_2); |
fabian101 | 2:ad96602f71c0 | 6 | BiQuad bq3(a1_3,a2_3,b0_3,b1_3,b2_3); |
fabian101 | 2:ad96602f71c0 | 7 | BiQuad bq4(a1_4,a2_4,b0_4,b1_4,b2_4); |
fabian101 | 2:ad96602f71c0 | 8 | BiQuad bq5(a1_5,a2_5,b0_5,b1_5,b2_5); |
fabian101 | 2:ad96602f71c0 | 9 | |
fabian101 | 1:665ee7703fbe | 10 | AnalogIn emg1(A0); |
fabian101 | 1:665ee7703fbe | 11 | AnalogIn emg2(A1); |
fabian101 | 1:665ee7703fbe | 12 | AnalogIn emg3(A2); |
fabian101 | 1:665ee7703fbe | 13 | AnalogIn emg4(A3); |
fabian101 | 2:ad96602f71c0 | 14 | |
fabian101 | 2:ad96602f71c0 | 15 | SigInterpreter::SigInterpreter() |
fabian101 | 2:ad96602f71c0 | 16 | { |
fabian101 | 1:665ee7703fbe | 17 | |
fabian101 | 2:ad96602f71c0 | 18 | } |
fabian101 | 1:665ee7703fbe | 19 | |
fabian101 | 1:665ee7703fbe | 20 | double SigInterpreter::readValue(int sig) { |
fabian101 | 1:665ee7703fbe | 21 | // returns the amplitude of EMG signal |
fabian101 | 2:ad96602f71c0 | 22 | if(sig > 4 || sig < 1) |
fabian101 | 2:ad96602f71c0 | 23 | { |
fabian101 | 1:665ee7703fbe | 24 | // nope |
fabian101 | 1:665ee7703fbe | 25 | return 0.0; // check later of dit idd goeie shit is |
fabian101 | 2:ad96602f71c0 | 26 | } |
fabian101 | 2:ad96602f71c0 | 27 | if (sig == 1) |
fabian101 | 2:ad96602f71c0 | 28 | { |
fabian101 | 1:665ee7703fbe | 29 | float input = emg1.read(); |
fabian101 | 2:ad96602f71c0 | 30 | return (filter(input)); |
fabian101 | 1:665ee7703fbe | 31 | } |
fabian101 | 2:ad96602f71c0 | 32 | if (sig == 2) |
fabian101 | 2:ad96602f71c0 | 33 | { |
fabian101 | 1:665ee7703fbe | 34 | float input = emg2.read(); |
fabian101 | 2:ad96602f71c0 | 35 | return (filter(input)); |
fabian101 | 1:665ee7703fbe | 36 | } |
fabian101 | 2:ad96602f71c0 | 37 | if (sig == 3) |
fabian101 | 2:ad96602f71c0 | 38 | { |
fabian101 | 1:665ee7703fbe | 39 | float input = emg3.read(); |
fabian101 | 2:ad96602f71c0 | 40 | return (filter(input)); |
fabian101 | 1:665ee7703fbe | 41 | } |
fabian101 | 2:ad96602f71c0 | 42 | if (sig == 4) |
fabian101 | 2:ad96602f71c0 | 43 | { |
fabian101 | 1:665ee7703fbe | 44 | float input = emg4.read(); |
fabian101 | 2:ad96602f71c0 | 45 | return (filter(input)); |
fabian101 | 2:ad96602f71c0 | 46 | } |
fabian101 | 2:ad96602f71c0 | 47 | else |
fabian101 | 2:ad96602f71c0 | 48 | { |
fabian101 | 2:ad96602f71c0 | 49 | return 0.0; |
fabian101 | 2:ad96602f71c0 | 50 | } |
fabian101 | 1:665ee7703fbe | 51 | } |
fabian101 | 2:ad96602f71c0 | 52 | |
fabian101 | 2:ad96602f71c0 | 53 | double SigInterpreter::filter(float input){ |
fabian101 | 2:ad96602f71c0 | 54 | |
fabian101 | 2:ad96602f71c0 | 55 | float highpass1 = bq1.step(input); |
fabian101 | 2:ad96602f71c0 | 56 | |
fabian101 | 2:ad96602f71c0 | 57 | float highpass2 = bq2.step(highpass1); |
fabian101 | 2:ad96602f71c0 | 58 | /* |
fabian101 | 2:ad96602f71c0 | 59 | float lowpass1 = bq3.step(highpass2); |
fabian101 | 2:ad96602f71c0 | 60 | |
fabian101 | 2:ad96602f71c0 | 61 | float lowpass2 = bq4.step(lowpass1); |
fabian101 | 2:ad96602f71c0 | 62 | |
fabian101 | 2:ad96602f71c0 | 63 | float lowpass3 = bq5.step(lowpass2); |
fabian101 | 2:ad96602f71c0 | 64 | */ |
fabian101 | 2:ad96602f71c0 | 65 | |
fabian101 | 2:ad96602f71c0 | 66 | return fabs(input); |
fabian101 | 2:ad96602f71c0 | 67 | } |
fabian101 | 2:ad96602f71c0 | 68 |