filters aangepast en bepaling threshold
Dependencies: HIDScope MODSERIAL biquadFilter mbed
Fork of EMGV3 by
Diff: main.cpp
- Revision:
- 22:207d314523ef
- Parent:
- 20:a0642e983da9
- Child:
- 23:624827baffa6
diff -r 66ede5e3fd9e -r 207d314523ef main.cpp --- a/main.cpp Thu Oct 08 16:12:47 2015 +0000 +++ b/main.cpp Thu Oct 08 17:47:14 2015 +0000 @@ -9,7 +9,7 @@ Ticker SampleEMG; Ticker ScopeTimer; Ticker serial; - HIDScope scope(3); + HIDScope scope(5); DigitalOut led(LED_RED); MODSERIAL pc(USBTX, USBRX); @@ -18,50 +18,57 @@ double EMG_L_f_v1 = 0, EMG_L_f_v2 = 0; double EMG_L_fh=0; double EMG_left_value; - double EMG_f1; - double EMG_f2; - double Threshold = 0.08; + double EMG_left_f1; + double EMG_left_f2; + double EMG_left_abs; + double EMG_right_value; + double EMG_right_f1; + double EMG_right_f2; + double EMG_right_abs; + double Threshold1 = 0.08; + double Threshold2 = 0.06 // coëfficiënten - const double BiGainEMG_Lh = 0.723601, BiGainEMG_Ll=0.983892; - const double EMGh_a1 = -1.74355513773*BiGainEMG_Lh, EMGh_a2 = 0.80079826172*BiGainEMG_Lh, EMGh_b0 = 1.0*BiGainEMG_Lh, EMGh_b1 = -1.99697722433*BiGainEMG_Lh, EMGh_b2 = 1.0*BiGainEMG_Lh; //coefficients for high-pass filter - const double EMGl_a1 = 1.96775103303*BiGainEMG_Ll, EMGl_a2 = 0.96827054038*BiGainEMG_Ll, EMGl_b0 = 1.0*BiGainEMG_Ll, EMGl_b1 = 1.99999993582*BiGainEMG_Ll, EMGl_b2 = 1.0*BiGainEMG_Ll; // coefficients for low-pass filter + const double BiGainEMG_Lh = 0.723601, BiGainEMG_Ll=0.959332; + const double EMGh_a1 = -1.74355513773*BiGainEMG_Lh, EMGh_a2 = 0.80079826172*BiGainEMG_Lh, EMGh_b0 = 1.0*BiGainEMG_Lh, EMGh_b1 = 1.99999965990*BiGainEMG_Lh, EMGh_b2 = 1.0*BiGainEMG_Lh; //coefficients for high-pass filter + const double EMGl_a1 = 1.91721405106*BiGainEMG_Ll, EMGl_a2 = 0.92055427516*BiGainEMG_Ll, EMGl_b0 = 1.0*BiGainEMG_Ll, EMGl_b1 = 1.99999993582*BiGainEMG_Ll, EMGl_b2 = 1.0*BiGainEMG_Ll; // coefficients for low-pass filter // Filter creation biquadFilter EMG_highpass (EMGh_a1, EMGh_a2, EMGh_b0, EMGh_b1, EMGh_b2); // creates the high pass filter biquadFilter EMG_lowpass (EMGl_a1, EMGl_a2, EMGl_b0, EMGl_b1, EMGl_b2); // creates the low pass filter // EMG filtering function -void EMGfilter() +void EMGfilter() // Both EMG signals are filtered in one function and with the same filters { EMG_left_value = EMG_left.read(); - EMG_f1 = EMG_highpass.step(EMG_left_value); - EMG_f2 = EMG_lowpass.step(EMG_f1); + EMG_left_f1 = EMG_highpass.step(EMG_left_value); + EMG_left_f2 = EMG_lowpass.step(EMG_left_f1); + EMG_left_abs = fabs(EMG_left_f2); + + EMG_right_value = EMG_right.read(); + EMG_right_f1 = EMG_highpass.step(EMG_right_value); + EMG_right_f1 = EMG_lowpass.step(EMG_right_f1); + EMG_right_abs = fabs(EMG_right_f2); } // HIDScope void ScopeSend() { scope.set(0, EMG_left_value); - scope.set(1, EMG_f1); - scope.set(2, EMG_f2); + scope.set(1, EMG_left_f2); + scope.set(2, EMG_left_abs); + scope.set(3, EMG_right_value); + scope.set(4, EMG_right_abs); scope.send(); } -// Serial communication - void serial_() - { - pc.baud(115200); - pc.printf("%d\n", EMG_L_fh); - } - int main() { SampleEMG.attach(&EMGfilter, 0.002); ScopeTimer.attach(&ScopeSend, 0.002); while(1) { - if (fabs(EMG_f2) > Threshold) + if (EMG_left_abs > Threshold) { led.write(0); }