Poep Hoofd / Mbed 2 deprecated PoolRobot_Code

Dependencies:   HIDScope mbed MODSERIAL QEI

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?

UserRevisionLine numberNew 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 }