Remco Dasselaar / Mbed 2 deprecated TotalControlEmg2

Dependencies:   HIDScope MODSERIAL QEI TextLCD mbed

Fork of TotalControlEmg2 by Remco Dasselaar

Files at this revision

API Documentation at this revision

Comitter:
Bartvaart
Date:
Tue Oct 06 12:19:27 2015 +0000
Parent:
1:98be4152a539
Child:
3:344b173f85fe
Commit message:
Aan het filter is een gain toegevoegd die de uitkomstwaarde met een bepaalde constante vermenigvuldigd

Changed in this revision

Filter.cpp Show annotated file Show diff for this revision Revisions of this file
Filter.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Filter.cpp	Tue Oct 06 12:07:40 2015 +0000
+++ b/Filter.cpp	Tue Oct 06 12:19:27 2015 +0000
@@ -1,6 +1,6 @@
 #include "Filter.h"
 
-double Filter(double u, double &v1, double &v2, const double a1, const double a2, const double b0, const double b1, const double b2){
+double Filter(double u, double &v1, double &v2, const double a1, const double a2, const double b0, const double b1, const double b2, const double gain){
     // volgens direct form 2, uit de embedded filtering and control sheets van T.J.W. Lankhorst
     // u = ingangssignaal (zonder filter)
     // v = tussentap
@@ -11,7 +11,7 @@
     // y = uitgangssignaal (gefilterd)
     
     double v = u - a1 * v1 - a2 * v2;
-    double y = b0 * v + b1 * v1 + b2 * v2;
+    double y = gain * (b0 * v + b1 * v1 + b2 * v2);
     
     v2 = v1; // signalen doorschuiven, zodat bij volgende input, de vorige waardes vsn v worden onthouden
     v1 = v; 
--- a/Filter.h	Tue Oct 06 12:07:40 2015 +0000
+++ b/Filter.h	Tue Oct 06 12:19:27 2015 +0000
@@ -1,3 +1,3 @@
 #include "mbed.h"
 
-double Filter(double u, double &v1, double &v2, const double a1, const double a2, const double b0, const double b1, const double b2);
\ No newline at end of file
+double Filter(double u, double &v1, double &v2, const double a1, const double a2, const double b0, const double b1, const double b2, const double gain);
\ No newline at end of file
--- a/main.cpp	Tue Oct 06 12:07:40 2015 +0000
+++ b/main.cpp	Tue Oct 06 12:19:27 2015 +0000
@@ -17,22 +17,25 @@
 double v1_50a = 0, v2_50a = 0;
 const double a1_50a = -1.61803398875, a2_50a = 1.00000000000;
 const double b0_50a = 1.00000000000, b1_50a = -1.61803398875, b2_50a = 1.00000000000;
+const double gain_50a = 1.000000;
 
 // Filter1b: 50Hz Notch
 double v1_50b = 0, v2_50b = 0;
 const double a1_50b = -1.61803398875, a2_50b = 1.00000000000;
 const double b0_50b = 1.00000000000, b1_50b = -1.61803398875, b2_50b = 1.00000000000;
+const double gain_50b = 1.000000;
 
 // Filter1: 20Hz HighPass
 double v1_HP = 0, v2_HP = 0;
 const double a1_HP = -0.76475499450, a2_HP = 0.27692273367;
 const double b0_HP = 1.00000000000, b1_HP = -2.00000000000, b2_HP = 1.00000000000;
+const double gain_HP = 0.510419;
 
 // Filter1: 5Hz LowPass
 double v1_LP = 0, v2_LP = 0;
 const double a1_LP = -1.16338171052, a2_LP = 0.42191097989;
 const double b0_LP = 1.00000000000, b1_LP = 2.00000000000, b2_LP = 1.00000000000;
-
+const double gain_LP = 0.064632;
 
 void EMGfilter()
 {
@@ -42,20 +45,20 @@
     double u = emg.read(); // lees waarde van emg signaal uit
     
     // Op deze manier worden de waardes ingelezen in Filter. Zorg dus voor dezelfde volgorde, zodat de waardes goed uitgelezen worden!:
-    // Filter(double u, double &v1, double &v2, const double a1, const double a2, const double b0, const double b1, const double b2)
+    // Filter(double u, double &v1, double &v2, const double a1, const double a2, const double b0, const double b1, const double b2, const double gain)
     
     // 50Hz Notch filter
-    double y50a = Filter(u, v1_50a, v2_50a, a1_50a, a2_50a, b0_50a, b1_50a, b2_50a);
-    double y50b = Filter(y50a, v1_50b, v2_50b, a1_50b, a2_50b, b0_50b, b1_50b, b2_50b);
+    double y50a = Filter(u, v1_50a, v2_50a, a1_50a, a2_50a, b0_50a, b1_50a, b2_50a, gain_50a);
+    double y50b = Filter(y50a, v1_50b, v2_50b, a1_50b, a2_50b, b0_50b, b1_50b, b2_50b, gain_50a);
     
     // High Pass filter. Tot 20Hz wordt weggefliterd
-    double yHP = Filter(y50b, v1_HP, v2_HP, a1_HP, a2_HP, b0_HP, b1_HP, b2_HP);
+    double yHP = Filter(y50b, v1_HP, v2_HP, a1_HP, a2_HP, b0_HP, b1_HP, b2_HP, gain_HP);
     
     // Absolute waarde wordt genomen.
     double y1 = fabs(yHP);
     
     // Low Pass filter. Alles vanaf 5Hz wordt weggefilterd 
-    double yLP = Filter(y1, v1_LP, v2_LP, a1_LP, a2_LP, b0_LP, b1_LP, b2_LP);
+    double yLP = Filter(y1, v1_LP, v2_LP, a1_LP, a2_LP, b0_LP, b1_LP, b2_LP, gain_LP);
     
     double y = yLP;