Working with all filters, all filter results are low amplitude.

Dependencies:   HIDScope biquadFilter mbed

Fork of frdm_calibratie_maximum by Marieke M

Files at this revision

API Documentation at this revision

Comitter:
GerhardBerman
Date:
Fri Oct 21 15:13:03 2016 +0000
Parent:
3:339b19905505
Commit message:
Working with good filter function: total filtered signal is low

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Fri Oct 21 13:22:31 2016 +0000
+++ b/main.cpp	Fri Oct 21 15:13:03 2016 +0000
@@ -19,6 +19,8 @@
 double EMGright, EMGleft, inR;
 double averageEMGr =0;
 double averageEMGl =0;
+double outRnotch2 = 0;
+double outLnotch2 = 0;
 
 void filter_timer_act(){filter_timer_go=true;};
 
@@ -34,6 +36,10 @@
 BiQuad bq4(1.0000e+00,2.0000e+00,1.0000e+00,-4.6382e-01,8.9354e-02);
 BiQuad bq5(1.0000e+00,2.0000e+00,1.0000e+00,-6.3254e-01,4.8559e-01);
 
+// Low pass Butterworth filter 2th order, Fc = 450;
+BiQuad bq6(1.7509e-01,3.5018e-01,1.7509e-01,-5.1930e-01,2.1965e-01);
+
+
 void KeepTrackOfTime()
 {
     time_passed++;
@@ -44,24 +50,32 @@
 {   
     double inR = emg0.read();
     double inL = emg1.read();
-    //double inLcal = inL-averageL(sumL,size);
-    double outRnotch = bcq1.step(inR);
-    double outRrect = fabs(outRnotch);
-    double outRlow = bcq2.step(outRrect);
     
-    double outLnotch = bcq1.step(inL);
-    double outLrect = fabs(outLnotch);
-    double outLlow = bcq2.step(outLrect);
+    double outRnotch = bcq1.step(inR);      //notch and highpass for detrend
+    double outRrect = fabs(outRnotch);      //calculate abs with fabs      
+    double outRlow = bcq2.step(outRrect);   //lowpass for envelope
+        
+    double outLnotch = bcq1.step(inL);      //notch and highpass for detrend
+    double outLrect = fabs(outLnotch);      //calculate abs with fabs
+    double outLlow = bcq2.step(outLrect);   //lowpass for envelope
     
     //pc.printf("Detrend EMG = %f\n\r",inR);
     //pc.printf("EMG signal= %f\n\r",emg0.read());
     //pc.printf("average EMG right = %f\n\r",averageEMGr);
     
-    scope.set(0, inR);
-    scope.set(1, inL);
-    scope.set(2, outRlow);
-    scope.set(3, outLlow);
+    /*
+    scope.set(0, inR);          //emgsignal
+    scope.set(1, outRnotch);    //highpass+notch filtered
+    scope.set(2, outRnotch2);   //abscalc ifelse
+    scope.set(3, outRrect2);    //abscalc fabs
+    scope.set(4, outRlow);      //abs ifelse + lowpass
+    scope.set(5, outRlow2);     //abs fabs + lowpass
+    */
     
+    scope.set(0, inR);          //emgsignal right
+    scope.set(1, outRlow);      //emg filtered: highpass, notch, abs, lowpass
+    scope.set(2, inL);          //emgsignal left
+    scope.set(3, outLlow);      //emg filtered: highpass, notch, abs, lowpass
     scope.send();
     // To indicate that the function is working, the LED is toggled*/
     led2 = !led2;
@@ -76,7 +90,7 @@
     //t.attach(&KeepTrackOfTime,1.0); //taking the time in seconds
 
     bcq1.add(&bq1).add(&bq2);
-    bcq2.add(&bq3).add(&bq4).add(&bq5);
+    bcq2.add(&bq6).add(&bq3); //bcq2.add(&bq3).add(&bq4).add(&bq5);    //450Hz Lowpass does not work
     
       
     filter_timer.attach(&filter_timer_act, 0.0004); //2500Hz (same as with filter coefficients on matlab!!! Thus adjust!)