Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: HIDScope mbed MODSERIAL QEI
EMG.cpp@6:452e301a105a, 2017-10-16 (annotated)
- Committer:
- Alex_Kyrl
- Date:
- Mon Oct 16 13:07:53 2017 +0000
- Revision:
- 6:452e301a105a
- Child:
- 7:c17f5473f4e1
using class for emg and added motor class
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Alex_Kyrl | 6:452e301a105a | 1 | #include "EMG.h" |
| Alex_Kyrl | 6:452e301a105a | 2 | #include"BiQuad.h" |
| Alex_Kyrl | 6:452e301a105a | 3 | |
| Alex_Kyrl | 6:452e301a105a | 4 | EMG::EMG(PinName data) : _data(data) |
| Alex_Kyrl | 6:452e301a105a | 5 | { |
| Alex_Kyrl | 6:452e301a105a | 6 | cntr = 0; |
| Alex_Kyrl | 6:452e301a105a | 7 | } |
| Alex_Kyrl | 6:452e301a105a | 8 | |
| Alex_Kyrl | 6:452e301a105a | 9 | |
| Alex_Kyrl | 6:452e301a105a | 10 | double EMG::get_notch(double data){ |
| Alex_Kyrl | 6:452e301a105a | 11 | |
| Alex_Kyrl | 6:452e301a105a | 12 | double a0=1, a1=-1.525271192436899, a2=0.881618592363190, |
| Alex_Kyrl | 6:452e301a105a | 13 | b0=0.940809296181595, b1=-1.525271192436899, b2=0.940809296181595; |
| Alex_Kyrl | 6:452e301a105a | 14 | |
| Alex_Kyrl | 6:452e301a105a | 15 | BiQuad MainsReject(b0, b1, b2, a0, a1, a2); |
| Alex_Kyrl | 6:452e301a105a | 16 | |
| Alex_Kyrl | 6:452e301a105a | 17 | return MainsReject.step(data); |
| Alex_Kyrl | 6:452e301a105a | 18 | |
| Alex_Kyrl | 6:452e301a105a | 19 | } |
| Alex_Kyrl | 6:452e301a105a | 20 | |
| Alex_Kyrl | 6:452e301a105a | 21 | |
| Alex_Kyrl | 6:452e301a105a | 22 | double EMG::get_noise(double data){ |
| Alex_Kyrl | 6:452e301a105a | 23 | |
| Alex_Kyrl | 6:452e301a105a | 24 | double a0=1, a1=-0.671029090774096, a2=0.252324626282266, |
| Alex_Kyrl | 6:452e301a105a | 25 | b0=0.145323883877042, b1= 0.290647767754085, b2= 0.145323883877042; |
| Alex_Kyrl | 6:452e301a105a | 26 | |
| Alex_Kyrl | 6:452e301a105a | 27 | BiQuad Low_pass(b0, b1, b2, a0, a1, a2); |
| Alex_Kyrl | 6:452e301a105a | 28 | |
| Alex_Kyrl | 6:452e301a105a | 29 | return Low_pass.step(data); |
| Alex_Kyrl | 6:452e301a105a | 30 | } |
| Alex_Kyrl | 6:452e301a105a | 31 | |
| Alex_Kyrl | 6:452e301a105a | 32 | |
| Alex_Kyrl | 6:452e301a105a | 33 | double EMG::get_DC(double data){ |
| Alex_Kyrl | 6:452e301a105a | 34 | |
| Alex_Kyrl | 6:452e301a105a | 35 | double a_0_0=1, a_0_1=-1.475480443592646, a_0_2=0.586919508061190, |
| Alex_Kyrl | 6:452e301a105a | 36 | b_0_0=0.765599987913459, b_0_1=-1.531199975826918, b_0_2=0.765599987913459; |
| Alex_Kyrl | 6:452e301a105a | 37 | |
| Alex_Kyrl | 6:452e301a105a | 38 | BiQuad HiPass(b_0_0, b_0_1, b_0_2, a_0_0, a_0_1, a_0_2); |
| Alex_Kyrl | 6:452e301a105a | 39 | |
| Alex_Kyrl | 6:452e301a105a | 40 | return HiPass.step(data); |
| Alex_Kyrl | 6:452e301a105a | 41 | |
| Alex_Kyrl | 6:452e301a105a | 42 | } |
| Alex_Kyrl | 6:452e301a105a | 43 | |
| Alex_Kyrl | 6:452e301a105a | 44 | |
| Alex_Kyrl | 6:452e301a105a | 45 | double EMG::get_absolute(double data){ |
| Alex_Kyrl | 6:452e301a105a | 46 | |
| Alex_Kyrl | 6:452e301a105a | 47 | return abs(data); |
| Alex_Kyrl | 6:452e301a105a | 48 | |
| Alex_Kyrl | 6:452e301a105a | 49 | |
| Alex_Kyrl | 6:452e301a105a | 50 | } |
| Alex_Kyrl | 6:452e301a105a | 51 | |
| Alex_Kyrl | 6:452e301a105a | 52 | |
| Alex_Kyrl | 6:452e301a105a | 53 | double EMG::get_envelope(double data){ |
| Alex_Kyrl | 6:452e301a105a | 54 | |
| Alex_Kyrl | 6:452e301a105a | 55 | double a_1_0=1, a_1_1=-1.982228929792529, a_1_2=0.982385450614126, |
| Alex_Kyrl | 6:452e301a105a | 56 | b_1_0=0.00003913020539916823, b_1_1=0.00007826041079833645, b_1_2=0.00003913020539916823; |
| Alex_Kyrl | 6:452e301a105a | 57 | |
| Alex_Kyrl | 6:452e301a105a | 58 | BiQuad LoPass(b_1_0, b_1_1, b_1_2, a_1_0, a_1_1, a_1_2); |
| Alex_Kyrl | 6:452e301a105a | 59 | |
| Alex_Kyrl | 6:452e301a105a | 60 | return LoPass.step(data); |
| Alex_Kyrl | 6:452e301a105a | 61 | } |
| Alex_Kyrl | 6:452e301a105a | 62 | |
| Alex_Kyrl | 6:452e301a105a | 63 | double EMG::filter(){ |
| Alex_Kyrl | 6:452e301a105a | 64 | |
| Alex_Kyrl | 6:452e301a105a | 65 | if(cntr<=500) |
| Alex_Kyrl | 6:452e301a105a | 66 | { |
| Alex_Kyrl | 6:452e301a105a | 67 | cntr++; |
| Alex_Kyrl | 6:452e301a105a | 68 | return 0; |
| Alex_Kyrl | 6:452e301a105a | 69 | } |
| Alex_Kyrl | 6:452e301a105a | 70 | else |
| Alex_Kyrl | 6:452e301a105a | 71 | { |
| Alex_Kyrl | 6:452e301a105a | 72 | return get_envelope(get_absolute(get_DC(get_notch(get_noise(_data))))); |
| Alex_Kyrl | 6:452e301a105a | 73 | } |
| Alex_Kyrl | 6:452e301a105a | 74 | |
| Alex_Kyrl | 6:452e301a105a | 75 | } |
