Werkend EMG script

Dependencies:   HIDScope MODSERIAL biquadFilter mbed

Fork of EMG by Tom Tom

Committer:
Margreeth95
Date:
Tue Oct 06 14:38:12 2015 +0000
Revision:
18:12250e88037f
Parent:
16:9f7797ffd0fb
Child:
19:34456a1effc4
Opzet EMG, moet later nog worden ingevoegd in grote script. Filtert signaal met high- en lowpass, zendt naar HIDscope. Niet getest ivm ontbrekende elektroden.

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"
vsluiter 0:32bb76391d89 3
vsluiter 4:8b298dfada81 4 //Define objects
Margreeth95 18:12250e88037f 5 AnalogIn EMG_left(A0); //Analog input
Margreeth95 18:12250e88037f 6 AnalogIn EMG_right(A1);
Margreeth95 18:12250e88037f 7 Ticker SampleEMG;
Margreeth95 18:12250e88037f 8 Ticker ScopeTimer;
Margreeth95 18:12250e88037f 9 HIDScope scope(1);
Margreeth95 18:12250e88037f 10
Margreeth95 18:12250e88037f 11 // constant values
Margreeth95 18:12250e88037f 12 double EMG_L_f_v1 = 0, EMG_L_f_v2 = 0;
Margreeth95 18:12250e88037f 13
Margreeth95 18:12250e88037f 14 // coëfficiënten
Margreeth95 18:12250e88037f 15 const double BiGainEMG_Lh = 1, BiGainEMG_Ll=1;
Margreeth95 18:12250e88037f 16 const double EMG_L_fh_a1 = -0.96608908283*BiGainEMG_Lh, EMG_L_fh_a2 = 0.0*BiGainEMG_Lh, EMG_L_fh_b0 = 1.0*BiGainEMG_Lh, EMG_L_fh_b1 = 1.0*BiGainEMG_Lh, EMG_L_fh_b2 = 0.0*BiGainEMG_Lh; //coefficients for high-pass filter
Margreeth95 18:12250e88037f 17 const double EMG_L_fl_a1 = -0.96608908283*BiGainEMG_Ll, EMG_L_fl_a2 = 0.0*BiGainEMG_Ll, EMG_L_fl_b0 = 1.0*BiGainEMG_Ll, EMG_L_fl_b1 = 1.0*BiGainEMG_Ll, EMG_L_fl_b2 = 0.0*BiGainEMG_Ll; // coefficients for low-pass filter
vsluiter 2:e314bb3b2d99 18
Margreeth95 18:12250e88037f 19 // HIDScope
Margreeth95 18:12250e88037f 20 void ScopeSend()
Margreeth95 18:12250e88037f 21 {
Margreeth95 18:12250e88037f 22 scope.set(0, EMG_left.read());
Margreeth95 18:12250e88037f 23 scope.send();
Margreeth95 18:12250e88037f 24 }
Margreeth95 18:12250e88037f 25
Margreeth95 18:12250e88037f 26 // Biquad filter
Margreeth95 18:12250e88037f 27 double biquad( double u, double &v1, double &v2, const double a1, const double a2, const double b0, const double b1, const double b2 )
Margreeth95 18:12250e88037f 28 {
Margreeth95 18:12250e88037f 29 double v = u - a1*v1 - a2*v2;
Margreeth95 18:12250e88037f 30 double y = b0*v + b1*v1 + b2*v2;
Margreeth95 18:12250e88037f 31 v2 = v1; v1 = v;
Margreeth95 18:12250e88037f 32 return y;
Margreeth95 18:12250e88037f 33 }
Margreeth95 18:12250e88037f 34
Margreeth95 18:12250e88037f 35 // EMG filtering function
Margreeth95 18:12250e88037f 36 void EMGfilter()
vsluiter 2:e314bb3b2d99 37 {
Margreeth95 18:12250e88037f 38 double EMG_left_value = EMG_left.read();
Margreeth95 18:12250e88037f 39 double EMG_L_fh = biquad(EMG_left_value, EMG_L_f_v1, EMG_L_f_v2, EMG_L_fh_a1, EMG_L_fh_a2, EMG_L_fh_b0, EMG_L_fh_b1, EMG_L_fh_b2);
Margreeth95 18:12250e88037f 40 double EMG_L_fhl = biquad(EMG_L_fh, EMG_L_f_v1, EMG_L_f_v2, EMG_L_fl_a1, EMG_L_fl_a2, EMG_L_fl_b0, EMG_L_fl_b1, EMG_L_fl_b2);
vsluiter 2:e314bb3b2d99 41 }
vsluiter 0:32bb76391d89 42
vsluiter 0:32bb76391d89 43 int main()
vsluiter 0:32bb76391d89 44 {
Margreeth95 18:12250e88037f 45 SampleEMG.attach(&EMGfilter, 0.002);
Margreeth95 18:12250e88037f 46 ScopeTimer.attach(&ScopeSend, 0.002);
tomlankhorst 15:0da764eea774 47 while(1) {}
vsluiter 0:32bb76391d89 48 }