emg2

Dependencies:   HIDScope biquadFilter mbed QEI

Fork of EMG by Tom Tom

Committer:
keeswieriks
Date:
Mon Oct 29 19:09:11 2018 +0000
Revision:
21:931fe86dbf5a
Parent:
20:97059009a491
Child:
22:bcfee9594007
als het goed is is is het deze;

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