ya kno it
Diff: emg.cpp
- Revision:
- 0:850bf2d90868
- Child:
- 2:02d31a0caac1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emg.cpp Wed Oct 25 12:35:29 2017 +0000 @@ -0,0 +1,44 @@ +#include "emg.h" + +emg_shield::emg_shield(PinName pin,float fs):emg_in(pin) +{ + highpass.a=0.05; // filter coefficient of high-pass filter + float lambda= 51.6 *2.0*3.1415; // 50 Hz notch filter frequency in rad/s (Hz*2*pi) + float b= 4.0 *2.0*3.1415; // 50 Hz notch filter bandwidth in rad/s (Hz*2*pi) + notch50.lambda = lambda/(2.0*fs); // scaling for the 2/T multiplication which happens in the transform from s-domain to z-domain + notch50.b = b/(2.0*fs); // scaling for the 2/T multiplication which happens in the transform from s-domain to z-domain + float lambda2=103.2 *2.0*3.1415; // 100 Hz notch filter frequency in rad/s (Hz*2*pi) + float b2= 4.0 *2.0*3.1415; // 100 Hz notch filter frequency in rad/s (Hz*2*pi) + notch100.lambda = lambda2/(2.0*fs); // scaling for the 2/T multiplication which happens in the transform from s-domain to z-domain + notch100.b = b2 /(2.0*fs); // scaling for the 2/T multiplication which happens in the transform from s-domain to z-domain + float wc = 10 *2.0*3.1415; // butterworth filter cutoff frequency in rad/s (Hz*2*pi) + butter.w = wc/(2.0f*fs); + Value=0; + butter.yprev[0]=0; + butter.yprev[1]=0; + butter.xprev[2]=0; + butter.xprev[0]=0; + butter.xprev[1]=0; + tick.attach(this,&emg_shield::tickFunction, 1.0f/fs); +} + +void emg_shield::tickFunction(){ + float raw_data = emg_in.read(); // obtain raw EMG data + + float emg_notch = notch50.filter(raw_data); // notch filter to filter out the noise (especially from laptop charger) + + float emg_hp = highpass.filter(emg_notch); // high-pass filter + + float emg_hp_abs = fabs(emg_hp); // full wave rectification + + //float emg_envelope = lowpass.filter(emg_hp_abs); // 2 1st order low-pass filters + //emg_envelope = lowpass2.filter(emg_envelope); + float emg_envelope = butter.filter(emg_hp_abs); // or 1 2nd order (butterworth) low-pass filter + + Value = emg_envelope; +} + +float emg_shield::GetValue(){ + return Value; +} +