De EMG Lowpass maakt alle signalen gelijk

Dependencies:   HIDScope biquadFilter mbed

Fork of EMGfilter by Pascal van Baardwijk

Revision:
10:93ff2f23b901
Parent:
9:81637351bbd1
--- a/main.cpp	Thu Oct 27 10:27:08 2016 +0000
+++ b/main.cpp	Fri Oct 28 10:08:43 2016 +0000
@@ -8,25 +8,33 @@
 states state = STATE_DEFAULT;
 
 //Creating two scope channels
-HIDScope scope(4);
+HIDScope scope(6);
 
 //Notch filter
-BiQuadChain notch_50;
+BiQuadChain notch_50_0;
+BiQuadChain notch_50_1;
+BiQuadChain notch_50_2;
 BiQuad bq3( 0.98116526140, 0.00000000044, 0.98116526140, 0.00000000043, 0.95391787621);
 BiQuad bq4( 0.97224232015, 0.00000000043, 0.97224232015, -0.04036799459, 0.97670000725);
 BiQuad bq5( 1.00000000000, 0.00000000044, 1.00000000000, 0.04036799547, 0.9767000072);
 
 //High pass filter
-BiQuadChain high_pass;
+BiQuadChain high_pass_0;
+BiQuadChain high_pass_1;
+BiQuadChain high_pass_2;
 BiQuad bq6( 0.80254782780,-1.60509565560, 0.80254782780, -1.58011656361, 0.63006219630);
 BiQuad bq7( 0.90006571973,-1.80013143945, 0.900065719734, -1.77213098592, 0.8281459694);
 //BiQuad bq8( 0.92490714701,-1.84981429401, 0.92490714701, -1.90032503529, 0.9352152620);
 
 //Low pass filter
-BiQuadChain low_pass;
+BiQuadChain low_pass_0;
+BiQuadChain low_pass_1;
+BiQuadChain low_pass_2;
 BiQuad bq9( 0.00801840797, 0.01603681594, 0.00801840797,-1.65212256130, 0.68416767240);
 BiQuad bq10( 0.00836524486, 0.01673048973, 0.00836524486,-1.72511837232, 0.75857933411);
 BiQuad bq11( 0.00905039996, 0.01810079992, 0.00905039996,-1.86807725180, 0.9043110909);
+
+
 //Ticker
 Ticker emgSampleTicker;
 
@@ -82,9 +90,15 @@
 
 int main() {
     //combine biquads in biquad chains for notch/high- low-pass filters
-    notch_50.add( &bq3 ).add( &bq4 ).add( &bq5 );
-    high_pass.add( &bq6 ).add( &bq7 );
-    low_pass.add( &bq9 ).add( &bq10 ).add( &bq11 );
+    notch_50_0.add( &bq3 ).add( &bq4 ).add( &bq5 );
+    notch_50_1.add( &bq3 ).add( &bq4 ).add( &bq5 );
+    notch_50_2.add( &bq3 ).add( &bq4 ).add( &bq5 );
+    high_pass_0.add( &bq6 ).add( &bq7 );
+    high_pass_1.add( &bq6 ).add( &bq7 );
+    high_pass_2.add( &bq6 ).add( &bq7 );
+    low_pass_0.add( &bq9 ).add( &bq10 ).add( &bq11 );
+    low_pass_1.add( &bq9 ).add( &bq10 ).add( &bq11 );
+    low_pass_2.add( &bq9 ).add( &bq10 ).add( &bq11 );
     led.write(1);
     
     change_state.attach( &calibrate,5);
@@ -104,17 +118,24 @@
             emg_sample[0] = emg0.read();
             emg_sample[1] = emg1.read();
             emg_sample[2] = emg2.read();
-            
+            //pc.printf("%f - %f - %f \r\n", emg_sample[0], emg_sample[1], emg_sample[2]); 
             //filter out the 50Hz components with a notch filter
-            emg_notch[0] = notch_50.step(emg_sample[0]);
-            
+            emg_notch[0] = notch_50_0.step(emg_sample[0]);
+            emg_notch[1] = notch_50_1.step(emg_sample[1]);
+            emg_notch[2] = notch_50_2.step(emg_sample[2]);
             //high pass the signal (removing motion artifacts and offset)
-            emg_high_passed[0] = high_pass.step(emg_notch[0]);
-                
+            emg_high_passed[0] = high_pass_0.step(emg_notch[0]);
+            emg_high_passed[1] = high_pass_1.step(emg_notch[1]);
+            emg_high_passed[2] = high_pass_2.step(emg_notch[2]);    
+            float emg_fabs[3];
+            emg_fabs[0] = fabs(emg_high_passed[0]);
+            emg_fabs[1] = fabs(emg_high_passed[1]);
+            emg_fabs[2] = fabs(emg_high_passed[2]);
             //low pass the rectified emg signal
-            emg_low_passed[0] = low_pass.step(fabs(emg_high_passed[0]));
-            
-            
+            emg_low_passed[0] = low_pass_0.step(emg_fabs[0]);
+            emg_low_passed[1] = low_pass_1.step(emg_fabs[1]);
+            emg_low_passed[2] = low_pass_2.step(emg_fabs[2]);
+           // pc.printf("%f - %f - %f \r\n", emg_low_passed[0], emg_low_passed[1], emg_low_passed[2]);
             //Calculating min value and max value of emg signal
             if(state == STATE_CALIBRATION)
             {
@@ -160,10 +181,13 @@
             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,input_force0);
+            scope.set(0,emg_high_passed[0]);
+            scope.set(1,emg_high_passed[1]);
+            scope.set(2,emg_high_passed[2]);
+            scope.set(3,emg_low_passed[0]);
+            scope.set(4,emg_low_passed[1]);
+            scope.set(5,emg_low_passed[2]);
+            //scope.set(3,input_force0);
             //scope.set(2,emg_low_passed[0]);
             //scope.set(3,input_force2);
             scope.send();