emg2

Dependencies:   HIDScope biquadFilter mbed QEI

Fork of EMG by Tom Tom

Committer:
s1574396
Date:
Mon Oct 29 19:38:48 2018 +0000
Revision:
22:bcfee9594007
Parent:
21:931fe86dbf5a
Child:
23:dec549767006
Hij zou nu alles goed moeten doen

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vsluiter 0:32bb76391d89 1 #include "mbed.h"
vsluiter 11:ce72ec658a95 2 #include "HIDScope.h"
keeswieriks 21:931fe86dbf5a 3 #include "BiQuad.h"
vsluiter 0:32bb76391d89 4
s1574396 22:bcfee9594007 5 HIDScope scope( 2 );
s1574396 22:bcfee9594007 6 Ticker sample_timer;
s1574396 22:bcfee9594007 7
keeswieriks 21:931fe86dbf5a 8 // inputs EMG
keeswieriks 21:931fe86dbf5a 9 AnalogIn emg0_in( A0 );
keeswieriks 21:931fe86dbf5a 10 AnalogIn emg1_in( A1 );
keeswieriks 21:931fe86dbf5a 11 AnalogIn emg2_in( A2 );
keeswieriks 21:931fe86dbf5a 12
keeswieriks 21:931fe86dbf5a 13
keeswieriks 21:931fe86dbf5a 14 // Variabelen EMG
keeswieriks 21:931fe86dbf5a 15 const double m1 =0.5000;
keeswieriks 21:931fe86dbf5a 16 const double m2 =-0.8090;
keeswieriks 21:931fe86dbf5a 17 const double n0 =0.5000;
keeswieriks 21:931fe86dbf5a 18 const double n1 =-0.8090;
keeswieriks 21:931fe86dbf5a 19 const double n2 =0;
keeswieriks 21:931fe86dbf5a 20 const double a1 =0.9565;
keeswieriks 21:931fe86dbf5a 21 const double a2 =-1.9131;
keeswieriks 21:931fe86dbf5a 22 const double b0 =0.9565;
keeswieriks 21:931fe86dbf5a 23 const double b1 =-1.9112;
keeswieriks 21:931fe86dbf5a 24 const double b2 =0.9150;
keeswieriks 21:931fe86dbf5a 25 const double c1 =0.0675;
keeswieriks 21:931fe86dbf5a 26 const double c2 =0.1349;
keeswieriks 21:931fe86dbf5a 27 const double d0 =0.0675;
keeswieriks 21:931fe86dbf5a 28 const double d1 =-1.1430;
keeswieriks 21:931fe86dbf5a 29 const double d2 =0.4128;
keeswieriks 21:931fe86dbf5a 30
tomlankhorst 19:2bf824669684 31
keeswieriks 21:931fe86dbf5a 32 double notchFitler1 = 0;
keeswieriks 21:931fe86dbf5a 33 double highpassFilter1 = 0;
keeswieriks 21:931fe86dbf5a 34 double lowpassFilter1 = 0;
keeswieriks 21:931fe86dbf5a 35 double notchFilter2 = 0;
keeswieriks 21:931fe86dbf5a 36 double highpassFilter2 = 0;
keeswieriks 21:931fe86dbf5a 37 double lowpassFilter2 = 0;
keeswieriks 21:931fe86dbf5a 38
keeswieriks 21:931fe86dbf5a 39
keeswieriks 21:931fe86dbf5a 40 // BiQuad values
keeswieriks 21:931fe86dbf5a 41 BiQuadChain notch;
keeswieriks 21:931fe86dbf5a 42 BiQuad N1( m1, m2, n0, n1, n2);
keeswieriks 21:931fe86dbf5a 43 BiQuad N2( m1, m2, n0, n1, n2);
keeswieriks 21:931fe86dbf5a 44 BiQuad N3( m1, m2, n0, n1, n2);
keeswieriks 21:931fe86dbf5a 45 BiQuadChain highpass;
keeswieriks 21:931fe86dbf5a 46 BiQuad H1( a1, a2, b0, b1, b2);
keeswieriks 21:931fe86dbf5a 47 BiQuad H2( a1, a2, b0, b1, b2);
keeswieriks 21:931fe86dbf5a 48 BiQuad H3( a1, a2, b0, b1, b2);
keeswieriks 21:931fe86dbf5a 49 BiQuadChain lowpass;
keeswieriks 21:931fe86dbf5a 50 BiQuad L1( c1, c2, d0, d1, d2);
keeswieriks 21:931fe86dbf5a 51 BiQuad L2( c1, c2, d0, d1, d2);
keeswieriks 21:931fe86dbf5a 52 BiQuad L3( c1, c2, d0, d1, d2);
keeswieriks 21:931fe86dbf5a 53
keeswieriks 21:931fe86dbf5a 54
s1574396 22:bcfee9594007 55 // Filter of the first EMG signal
keeswieriks 21:931fe86dbf5a 56 void filter0()
vsluiter 2:e314bb3b2d99 57 {
keeswieriks 21:931fe86dbf5a 58 double emg0;
keeswieriks 21:931fe86dbf5a 59 double notch;
keeswieriks 21:931fe86dbf5a 60 double high;
keeswieriks 21:931fe86dbf5a 61 double absolute;
keeswieriks 21:931fe86dbf5a 62 double low;
keeswieriks 21:931fe86dbf5a 63 emg0 = emg0_in.read(); //reading the EMG signal
keeswieriks 21:931fe86dbf5a 64 notch = N1.step(emg0); //Applying a notch filter over the EMG data
keeswieriks 21:931fe86dbf5a 65 high = H1.step(notch); //Applying a high pass filter
keeswieriks 21:931fe86dbf5a 66 absolute = fabs(high); //Rectifying the data
keeswieriks 21:931fe86dbf5a 67 low = L1.step(absolute); //Applying low pass filter
s1574396 22:bcfee9594007 68 }
keeswieriks 21:931fe86dbf5a 69
s1574396 22:bcfee9594007 70 //Filter of the second EMG signal
s1574396 22:bcfee9594007 71 void filter1(){
keeswieriks 21:931fe86dbf5a 72 double emg1;
keeswieriks 21:931fe86dbf5a 73 double notch;
keeswieriks 21:931fe86dbf5a 74 double high;
keeswieriks 21:931fe86dbf5a 75 double absolute;
keeswieriks 21:931fe86dbf5a 76 double low;
keeswieriks 21:931fe86dbf5a 77 emg1 = emg1_in.read(); //reading the EMG signal
keeswieriks 21:931fe86dbf5a 78 notch = N2.step(emg1); //Applying a notch filter over the EMG data
keeswieriks 21:931fe86dbf5a 79 high = H2.step(notch); //Applying a high pass filter
keeswieriks 21:931fe86dbf5a 80 absolute = fabs(high); //Rectifying the data
keeswieriks 21:931fe86dbf5a 81 low = L2.step(absolute); //Applying low pass filter
keeswieriks 21:931fe86dbf5a 82 }
s1574396 22:bcfee9594007 83
s1574396 22:bcfee9594007 84 //Filter of the third EMG signal
keeswieriks 21:931fe86dbf5a 85 void filter2()
keeswieriks 21:931fe86dbf5a 86 {
keeswieriks 21:931fe86dbf5a 87 double emg2;
keeswieriks 21:931fe86dbf5a 88 double notch;
keeswieriks 21:931fe86dbf5a 89 double high;
keeswieriks 21:931fe86dbf5a 90 double absolute;
keeswieriks 21:931fe86dbf5a 91 double low;
keeswieriks 21:931fe86dbf5a 92 emg2 = emg2_in.read(); //reading the EMG signal
keeswieriks 21:931fe86dbf5a 93 notch = N3.step(emg2); //Applying a notch filter over the EMG data
keeswieriks 21:931fe86dbf5a 94 high = H3.step(notch); //Applying a high pass filter
keeswieriks 21:931fe86dbf5a 95 absolute = fabs(high); //Rectifying the data
keeswieriks 21:931fe86dbf5a 96 low = L3.step(absolute); //Applying low pass filter
vsluiter 2:e314bb3b2d99 97 }
vsluiter 0:32bb76391d89 98
s1574396 22:bcfee9594007 99 //Combining the filters in one fuction
keeswieriks 21:931fe86dbf5a 100 void filtered_emg()
keeswieriks 21:931fe86dbf5a 101 {
s1574396 22:bcfee9594007 102 filter0();
s1574396 22:bcfee9594007 103 filter1();
s1574396 22:bcfee9594007 104 filter2();
keeswieriks 21:931fe86dbf5a 105 }
keeswieriks 21:931fe86dbf5a 106
tomlankhorst 15:0da764eea774 107
keeswieriks 21:931fe86dbf5a 108 int main()
keeswieriks 21:931fe86dbf5a 109 {
s1574396 22:bcfee9594007 110 sample_timer.attach(&filter0, 0.002);
keeswieriks 21:931fe86dbf5a 111
keeswieriks 21:931fe86dbf5a 112 while(1) {
keeswieriks 21:931fe86dbf5a 113 }
vsluiter 0:32bb76391d89 114 }