BioRobotics Group 3 / Mbed 2 deprecated Moving-average

Dependencies:   HIDScope MODSERIAL mbed

Fork of Signal Filter by BioRobotics Group 3

Committer:
fredwsl
Date:
Sun Sep 27 14:56:16 2015 +0000
Revision:
6:c20a8c0f90ed
Parent:
5:ba1679ff9951
Child:
7:7493a0c5c6aa
First moving average

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Peasofcake 0:c8a6e00fbdc3 1 #include "mbed.h"
Peasofcake 1:f6110f80fa45 2 #include "MODSERIAL.h"
Peasofcake 2:e30dbfec6d1e 3 #include "math.h"
Peasofcake 1:f6110f80fa45 4 #include "HIDScope.h"
Peasofcake 2:e30dbfec6d1e 5
Peasofcake 2:e30dbfec6d1e 6
Peasofcake 2:e30dbfec6d1e 7 AnalogIn EMG(A0);
Peasofcake 1:f6110f80fa45 8 MODSERIAL pc(USBTX, USBRX);
Peasofcake 0:c8a6e00fbdc3 9
Peasofcake 2:e30dbfec6d1e 10 //const int baudrate = 115200;
Peasofcake 1:f6110f80fa45 11 //const int ms_wait = 100;
Peasofcake 0:c8a6e00fbdc3 12
Peasofcake 1:f6110f80fa45 13 // Define the HIDScope and Ticker objects
Peasofcake 2:e30dbfec6d1e 14 HIDScope scope(1);
Peasofcake 2:e30dbfec6d1e 15 Ticker scopeTimer;
Peasofcake 2:e30dbfec6d1e 16
fredwsl 6:c20a8c0f90ed 17 // Define moving average variables
fredwsl 6:c20a8c0f90ed 18 const int N = 150;
fredwsl 6:c20a8c0f90ed 19 double a;
Peasofcake 2:e30dbfec6d1e 20
Peasofcake 2:e30dbfec6d1e 21 // Define the storage variables and filter coeicients for two filters
Peasofcake 2:e30dbfec6d1e 22 double f1_v1 = 0, f1_v2 = 0, f2_v1 = 0, f2_v2 = 0;
fredwsl 6:c20a8c0f90ed 23 const double f1_a1 = -1.998222847291842, f1_a2 = 0.998224425026401, f1_b0 = 0.999111818079561, f1_b1 = -1.998223636159122, f1_b2 = 0.999111818079561;
fredwsl 6:c20a8c0f90ed 24 // const double f1_a1 = 0.25071442433, f1_a2 = 0.21711875780, f1_b0 = 1.0, f1_b1 = -1.62432585007, f1_b2 = 1.0;
fredwsl 6:c20a8c0f90ed 25 // const double f2_a1 = -1.77682226139, f2_a2 = 0.80213897411, f2_b0 = 1.0, f2_b1 = -1.62432585007, f2_b2 = 1.0;
Peasofcake 2:e30dbfec6d1e 26
Peasofcake 3:04f3cca82b22 27 double biquad( double u, double &v1, double &v2, const double a1, const double a2, const double b0, const double b1, const double b2 )
Peasofcake 3:04f3cca82b22 28 {
Peasofcake 3:04f3cca82b22 29 double v = u-a1*v1-a2*v2;
Peasofcake 3:04f3cca82b22 30 double y = b0*v + b1*v1 + b2*v2;
Peasofcake 2:e30dbfec6d1e 31 v2 = v1; v1 = v;
Peasofcake 2:e30dbfec6d1e 32 return y;
Peasofcake 2:e30dbfec6d1e 33 }
Peasofcake 2:e30dbfec6d1e 34
fredwsl 6:c20a8c0f90ed 35 double sliding_average(double u,const int f_N)
fredwsl 6:c20a8c0f90ed 36 {
fredwsl 6:c20a8c0f90ed 37 double f_x[f_N];
fredwsl 6:c20a8c0f90ed 38 double f_sum=0;
fredwsl 6:c20a8c0f90ed 39 f_x[1]=abs(u);
fredwsl 6:c20a8c0f90ed 40 for (int i=f_N; i>=1; i--){
fredwsl 6:c20a8c0f90ed 41 f_x[i]=f_x[i-1];
fredwsl 6:c20a8c0f90ed 42 }
fredwsl 6:c20a8c0f90ed 43
fredwsl 6:c20a8c0f90ed 44
fredwsl 6:c20a8c0f90ed 45 for (int i=f_N; i>=0; i--){
fredwsl 6:c20a8c0f90ed 46 f_sum=f_x[i]+f_sum;
fredwsl 6:c20a8c0f90ed 47 }
fredwsl 6:c20a8c0f90ed 48 a=f_sum/(double(f_N)*0.002);
fredwsl 6:c20a8c0f90ed 49 f_sum=0;
fredwsl 6:c20a8c0f90ed 50 return a;
fredwsl 6:c20a8c0f90ed 51 }
fredwsl 6:c20a8c0f90ed 52
fredwsl 6:c20a8c0f90ed 53
fredwsl 6:c20a8c0f90ed 54
fredwsl 6:c20a8c0f90ed 55
fredwsl 6:c20a8c0f90ed 56
fredwsl 6:c20a8c0f90ed 57
fredwsl 6:c20a8c0f90ed 58
fredwsl 6:c20a8c0f90ed 59
Peasofcake 2:e30dbfec6d1e 60 // This is your controller, call it using a Ticker
Peasofcake 3:04f3cca82b22 61 // void myController() {
Peasofcake 3:04f3cca82b22 62 //double u1 = EMG, u2 = y1 ;
Peasofcake 3:04f3cca82b22 63 //double y1 = biquad( u1, f1_v1, f1_v2, f1_a1, f1_a2, f1_b0, f1_b1, f1_b2 );
Peasofcake 3:04f3cca82b22 64 //double y2 = biquad( u2, f2_v1, f2_v2, f2_a1, f2_a2, f2_b0, f2_b1, f2_b2 );
Peasofcake 3:04f3cca82b22 65 //}
Peasofcake 2:e30dbfec6d1e 66
Peasofcake 2:e30dbfec6d1e 67
Peasofcake 2:e30dbfec6d1e 68
Peasofcake 2:e30dbfec6d1e 69
Peasofcake 2:e30dbfec6d1e 70 void scopeSend(){
fredwsl 6:c20a8c0f90ed 71 double u1 = EMG.read() ; //filter 1 input
fredwsl 6:c20a8c0f90ed 72
Peasofcake 3:04f3cca82b22 73 double y1 = biquad( u1, f1_v1, f1_v2, f1_a1, f1_a2, f1_b0, f1_b1, f1_b2 );
fredwsl 6:c20a8c0f90ed 74 //double u2 = y1; //filter 2 input
fredwsl 6:c20a8c0f90ed 75 //double y2 = biquad( u2, f2_v1, f2_v2, f2_a1, f2_a2, f2_b0, f2_b1, f2_b2 );
fredwsl 6:c20a8c0f90ed 76 double z1 = sliding_average(y1, N);
fredwsl 6:c20a8c0f90ed 77 scope.set(0,z1);
Peasofcake 2:e30dbfec6d1e 78 scope.send();
Peasofcake 2:e30dbfec6d1e 79 }
Peasofcake 3:04f3cca82b22 80
Peasofcake 0:c8a6e00fbdc3 81 int main()
Peasofcake 3:04f3cca82b22 82 {
fredwsl 6:c20a8c0f90ed 83 scopeTimer.attach(&scopeSend,0.002);
Peasofcake 2:e30dbfec6d1e 84 while(1){}
Peasofcake 1:f6110f80fa45 85
Peasofcake 0:c8a6e00fbdc3 86 }