De EMG Lowpass maakt alle signalen gelijk
Dependencies: HIDScope biquadFilter mbed
Fork of EMGfilter by
Diff: main.cpp
- Revision:
- 9:81637351bbd1
- Parent:
- 7:a928724ef731
- Child:
- 10:93ff2f23b901
--- a/main.cpp Thu Oct 27 09:57:26 2016 +0000 +++ b/main.cpp Thu Oct 27 10:27:08 2016 +0000 @@ -44,8 +44,10 @@ AnalogIn emg1( A1 ); AnalogIn emg2( A2 ); +//Go flag for emg sample bool go_emgSample; -bool go_find_minmax; + +//Variables for intermediate filter values double emg_sample[3]; double emg_low_passed_200[3]; double emg_notch[3]; @@ -54,18 +56,7 @@ double min_emg[3]; double max_emg[3]; -const int n = 100; -int counter = 0; -double RMSArray0[n] = {0}; -double RMSArray1[n] = {0}; -double RMSArray2[n] = {0}; -double RMS0; -double RMS1; -double RMS2; -double SumRMS0; -double SumRMS1; -double SumRMS2; - +//Calculating normalized outputs double input_force0; double input_force1; double input_force2; @@ -123,77 +114,56 @@ //low pass the rectified emg signal emg_low_passed[0] = low_pass.step(fabs(emg_high_passed[0])); - //Calculating RMS - SumRMS0 -= pow(RMSArray0[counter],2); - SumRMS1 -= pow(RMSArray1[counter],2); - SumRMS2 -= pow(RMSArray2[counter],2); - - RMSArray0[counter] = emg_high_passed[0]; - RMSArray1[counter] = emg_high_passed[1]; - RMSArray2[counter] = emg_high_passed[2]; - - SumRMS0 += pow(RMSArray0[counter],2); - SumRMS1 += pow(RMSArray1[counter],2); - SumRMS2 += pow(RMSArray2[counter],2); - - counter++; - if (counter == n){ - counter = 0; - } - - RMS0 = sqrt(SumRMS0/n); - RMS1 = sqrt(SumRMS1/n); - RMS2 = sqrt(SumRMS2/n); //Calculating min value and max value of emg signal if(state == STATE_CALIBRATION) { if (start_calibration == 0) { - min_emg[0] = RMS0; - max_emg[0] = RMS0; - min_emg[1] = RMS1; - max_emg[1] = RMS1; - min_emg[2] = RMS2; - max_emg[2] = RMS2; + min_emg[0] = emg_low_passed[0]; + max_emg[0] = emg_low_passed[0]; + min_emg[1] = emg_low_passed[1]; + max_emg[1] = emg_low_passed[1]; + min_emg[2] = emg_low_passed[2]; + max_emg[2] = emg_low_passed[2]; start_calibration++; } else { //finding min and max of emg0 - if (RMS0 < min_emg[0]) { - min_emg[0] = RMS0; + if (emg_low_passed[0] < min_emg[0]) { + min_emg[0] = emg_low_passed[0]; } - else if (RMS0 > max_emg[0]) { - max_emg[0] = RMS0; + else if (emg_low_passed[0] > max_emg[0]) { + max_emg[0] = emg_low_passed[0]; } //finding min and max of emg1 - if (RMS1 < min_emg[1]) { - min_emg[1] = RMS1; + if (emg_low_passed[1] < min_emg[1]) { + min_emg[1] = emg_low_passed[1]; } - else if (RMS1 > max_emg[1]) { - max_emg[1] = RMS1; + else if (emg_low_passed[1] > max_emg[1]) { + max_emg[1] = emg_low_passed[1]; } //finding min and max of emg2 - if (RMS2 < min_emg[2]) { - min_emg[2] = RMS2; + if (emg_low_passed[2] < min_emg[2]) { + min_emg[2] = emg_low_passed[2]; } - else if (RMS2 > max_emg[2]) { - max_emg[2] = RMS2; + else if (emg_low_passed[2] > max_emg[2]) { + max_emg[2] = emg_low_passed[2]; } } } //calculating input_forces for controller - input_force0 = (RMS0 - min_emg[0])/(max_emg[0]-min_emg[0]); - input_force1 = (RMS1 - min_emg[1])/(max_emg[1]-min_emg[1]); - input_force2 = (RMS2 - min_emg[2])/(max_emg[2]-min_emg[2]); + input_force0 = (emg_low_passed[0] - min_emg[0])/(max_emg[0]-min_emg[0]); + input_force1 = (emg_low_passed[1] - min_emg[1])/(max_emg[1]-min_emg[1]); + input_force2 = (emg_low_passed[2] - min_emg[2])/(max_emg[2]-min_emg[2]); //Send scope data scope.set(0,emg_sample[0]); scope.set(1,emg_notch[0]); scope.set(2,emg_high_passed[0]); - scope.set(3,emg_low_passed[0]); + scope.set(3,input_force0); //scope.set(2,emg_low_passed[0]); //scope.set(3,input_force2); scope.send();