Werkend EMG script
Dependencies: HIDScope MODSERIAL biquadFilter mbed
Fork of EMG by
main.cpp@18:12250e88037f, 2015-10-06 (annotated)
- 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?
User | Revision | Line number | New 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 | } |