EMG filteren
Dependencies: HIDScope biquadFilter mbed
main.cpp@0:55a2b57fd35d, 2018-10-10 (annotated)
- Committer:
- Hubertus
- Date:
- Wed Oct 10 14:44:04 2018 +0000
- Revision:
- 0:55a2b57fd35d
- Child:
- 1:082004527d2e
Bezig met het filter, niet voor elkaar
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Hubertus | 0:55a2b57fd35d | 1 | #include "mbed.h" |
Hubertus | 0:55a2b57fd35d | 2 | #include "HIDScope.h" |
Hubertus | 0:55a2b57fd35d | 3 | #include "BiQuad.h" |
Hubertus | 0:55a2b57fd35d | 4 | |
Hubertus | 0:55a2b57fd35d | 5 | //Define objects |
Hubertus | 0:55a2b57fd35d | 6 | AnalogIn emg0( A0 ); |
Hubertus | 0:55a2b57fd35d | 7 | AnalogIn emg1( A1 ); |
Hubertus | 0:55a2b57fd35d | 8 | |
Hubertus | 0:55a2b57fd35d | 9 | Ticker sample_timer; |
Hubertus | 0:55a2b57fd35d | 10 | HIDScope scope( 4 ); |
Hubertus | 0:55a2b57fd35d | 11 | DigitalOut led(LED1); |
Hubertus | 0:55a2b57fd35d | 12 | //DigitalOut ledgreen(LED_GREEN); |
Hubertus | 0:55a2b57fd35d | 13 | |
Hubertus | 0:55a2b57fd35d | 14 | //------------Filter parameters---------------------- |
Hubertus | 0:55a2b57fd35d | 15 | |
Hubertus | 0:55a2b57fd35d | 16 | //Lowpassfilter |
Hubertus | 0:55a2b57fd35d | 17 | const double b0LP = 0.0014831498359569692; |
Hubertus | 0:55a2b57fd35d | 18 | const double b1LP = 0.0029662996719139385; |
Hubertus | 0:55a2b57fd35d | 19 | const double b2LP = 0.0014831498359569692; |
Hubertus | 0:55a2b57fd35d | 20 | const double a1LP = -1.918570032544273; |
Hubertus | 0:55a2b57fd35d | 21 | const double a2LP = 0.9245026318881009; |
Hubertus | 0:55a2b57fd35d | 22 | //Highpassfilter |
Hubertus | 0:55a2b57fd35d | 23 | const double b0HP = 0.9921463375688531; |
Hubertus | 0:55a2b57fd35d | 24 | const double b1HP = -1.9842926751377061; |
Hubertus | 0:55a2b57fd35d | 25 | const double b2HP = 0.9921463375688531; |
Hubertus | 0:55a2b57fd35d | 26 | const double a1HP = -1.9841702689557372; |
Hubertus | 0:55a2b57fd35d | 27 | const double a2HP = 0.9844150813196749; |
Hubertus | 0:55a2b57fd35d | 28 | //Notchfilter |
Hubertus | 0:55a2b57fd35d | 29 | //const double b0NO = 1; |
Hubertus | 0:55a2b57fd35d | 30 | //const double b1NO = 1; |
Hubertus | 0:55a2b57fd35d | 31 | //const double b2NO = 1; |
Hubertus | 0:55a2b57fd35d | 32 | //const double a1NO = 1; |
Hubertus | 0:55a2b57fd35d | 33 | //const double a2NO = 1; |
Hubertus | 0:55a2b57fd35d | 34 | |
Hubertus | 0:55a2b57fd35d | 35 | //--------------Filter------------ |
Hubertus | 0:55a2b57fd35d | 36 | BiQuad LP1( b0LP, b1LP, b2LP, a1LP, a2LP ); //Lowpass filter Biquad |
Hubertus | 0:55a2b57fd35d | 37 | BiQuad HP2( b0HP, b1HP, b2HP, a1HP, a2HP ); //Highpass filter Biquad |
Hubertus | 0:55a2b57fd35d | 38 | //BiQuad NO3( b0NO, b1NO, b2NO, a1NO, a2NO ); //Notch filter Biquad |
Hubertus | 0:55a2b57fd35d | 39 | BiQuadChain BiQuad_filter; |
Hubertus | 0:55a2b57fd35d | 40 | float Signal; |
Hubertus | 0:55a2b57fd35d | 41 | float Signal_filtered; |
Hubertus | 0:55a2b57fd35d | 42 | |
Hubertus | 0:55a2b57fd35d | 43 | |
Hubertus | 0:55a2b57fd35d | 44 | /** Sample function |
Hubertus | 0:55a2b57fd35d | 45 | * this function samples the emg and sends it to HIDScope |
Hubertus | 0:55a2b57fd35d | 46 | **/ |
Hubertus | 0:55a2b57fd35d | 47 | void sample() |
Hubertus | 0:55a2b57fd35d | 48 | { |
Hubertus | 0:55a2b57fd35d | 49 | //Hierna kijken ! |
Hubertus | 0:55a2b57fd35d | 50 | //Signal = emg0-emg1; |
Hubertus | 0:55a2b57fd35d | 51 | // BiQuad_filter.add(&LP); |
Hubertus | 0:55a2b57fd35d | 52 | // Signal_filtered = BiQuad_filter.step(Signal); |
Hubertus | 0:55a2b57fd35d | 53 | // Signal_filtered = fabs(Signal_filtered); |
Hubertus | 0:55a2b57fd35d | 54 | // BiQuad_filter.add(&HP); |
Hubertus | 0:55a2b57fd35d | 55 | // Signal_filtered = BiQuad_filter.step(Signal_filtered); |
Hubertus | 0:55a2b57fd35d | 56 | |
Hubertus | 0:55a2b57fd35d | 57 | //Signal_filtered = fabs(Signal_filtered); // je wil alleen de absolute waardes |
Hubertus | 0:55a2b57fd35d | 58 | /* Set the sampled emg values in channel 0 (the first channel) and 1 (the second channel) in the 'HIDScope' instance named 'scope' */ |
Hubertus | 0:55a2b57fd35d | 59 | scope.set(0, emg0.read() ); |
Hubertus | 0:55a2b57fd35d | 60 | scope.set(1, emg1.read() ); |
Hubertus | 0:55a2b57fd35d | 61 | scope.set(2, Signal ); |
Hubertus | 0:55a2b57fd35d | 62 | scope.set(3, Signal_filtered); |
Hubertus | 0:55a2b57fd35d | 63 | /* Repeat the step above if required for more channels of required (channel 0 up to 5 = 6 channels) |
Hubertus | 0:55a2b57fd35d | 64 | * Ensure that enough channels are available (HIDScope scope( 2 )) |
Hubertus | 0:55a2b57fd35d | 65 | * Finally, send all channels to the PC at once */ |
Hubertus | 0:55a2b57fd35d | 66 | scope.send(); |
Hubertus | 0:55a2b57fd35d | 67 | /* To indicate that the function is working, the LED is toggled */ |
Hubertus | 0:55a2b57fd35d | 68 | led = !led; |
Hubertus | 0:55a2b57fd35d | 69 | } |
Hubertus | 0:55a2b57fd35d | 70 | |
Hubertus | 0:55a2b57fd35d | 71 | //----------Parameters voor filter---------- |
Hubertus | 0:55a2b57fd35d | 72 | //const float Fs = 200.0; |
Hubertus | 0:55a2b57fd35d | 73 | //const float Fnyq = Fs / 2; |
Hubertus | 0:55a2b57fd35d | 74 | //const int Nthorder = 4; |
Hubertus | 0:55a2b57fd35d | 75 | // |
Hubertus | 0:55a2b57fd35d | 76 | ////---------Functie voor filter----------- |
Hubertus | 0:55a2b57fd35d | 77 | //void filter() |
Hubertus | 0:55a2b57fd35d | 78 | //{ |
Hubertus | 0:55a2b57fd35d | 79 | // |
Hubertus | 0:55a2b57fd35d | 80 | //} |
Hubertus | 0:55a2b57fd35d | 81 | |
Hubertus | 0:55a2b57fd35d | 82 | int main() |
Hubertus | 0:55a2b57fd35d | 83 | { |
Hubertus | 0:55a2b57fd35d | 84 | |
Hubertus | 0:55a2b57fd35d | 85 | /**Attach the 'sample' function to the timer 'sample_timer'. |
Hubertus | 0:55a2b57fd35d | 86 | * this ensures that 'sample' is executed every... 0.002 seconds = 500 Hz |
Hubertus | 0:55a2b57fd35d | 87 | */ |
Hubertus | 0:55a2b57fd35d | 88 | BiQuad_filter.add( &LP1 ).add( &HP2 );//.add( &NO3); |
Hubertus | 0:55a2b57fd35d | 89 | |
Hubertus | 0:55a2b57fd35d | 90 | sample_timer.attach(&sample, 0.002); |
Hubertus | 0:55a2b57fd35d | 91 | |
Hubertus | 0:55a2b57fd35d | 92 | /*empty loop, sample() is executed periodically*/ |
Hubertus | 0:55a2b57fd35d | 93 | while(1) {} |
Hubertus | 0:55a2b57fd35d | 94 | } |
Hubertus | 0:55a2b57fd35d | 95 | |
Hubertus | 0:55a2b57fd35d | 96 |