EMG filteren

Dependencies:   HIDScope biquadFilter mbed

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?

UserRevisionLine numberNew 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