Hidscope + EMG

Dependencies:   HIDScope biquadFilter mbed

Committer:
Iriskolenbrander9
Date:
Mon Oct 22 11:37:53 2018 +0000
Revision:
4:034f2bd0c75d
Parent:
3:76d32bcfde05
Filtering emg signal with highpass, lowpass and notch filters (50-250hz)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Iriskolenbrander9 0:5ad817857e29 1 #include "mbed.h"
Iriskolenbrander9 0:5ad817857e29 2 #include "HIDScope.h"
Iriskolenbrander9 1:7eadfb7fd5c9 3 #include "BiQuad.h"
Iriskolenbrander9 0:5ad817857e29 4
Iriskolenbrander9 0:5ad817857e29 5 // Define the HIDScope and Ticker object
Iriskolenbrander9 1:7eadfb7fd5c9 6 HIDScope scope(3);
Iriskolenbrander9 0:5ad817857e29 7 Ticker scopeTimer;
Iriskolenbrander9 2:b2d117949de7 8
Iriskolenbrander9 2:b2d117949de7 9 BiQuadChain bqc;
Iriskolenbrander9 4:034f2bd0c75d 10 BiQuad bqlp(0.2928920553392428, 0.5857841106784856, 0.2928920553392428, -1.3007020142696517e-16,0.17156822135697122);
Iriskolenbrander9 4:034f2bd0c75d 11 BiQuad bqhp(0.9599250424722232, -1.9198500849444464, 0.9599250424722232, -1.9179540214230233, 0.9217461484658696);
Iriskolenbrander9 4:034f2bd0c75d 12 BiQuad bqn50(0.9340059945350248, -1.84501366169642, 0.9340059945350248, -1.84501366169642, 0.8680119890700493);
Iriskolenbrander9 4:034f2bd0c75d 13 BiQuad bqn100(0.8469468086519927, -1.6109885626477245, 0.8469468086519927, -1.6109885626477245, 0.6938936173039855);
Iriskolenbrander9 4:034f2bd0c75d 14 BiQuad bqn150(0.7902067962894531, -1.4081588219037828, 0.7902067962894531, -1.4081588219037828, 0.5804135925789063);
Iriskolenbrander9 4:034f2bd0c75d 15 BiQuad bqn200(0.7902104553475195, -1.278587375017818, 0.7902104553475195, -1.278587375017818, 0.5804209106950391);
Iriskolenbrander9 4:034f2bd0c75d 16 BiQuad bqn250(0.7074573673408703, -1.0004958036942233, 0.7074573673408703, -1.0004958036942233, 0.4149147346817406);
Iriskolenbrander9 2:b2d117949de7 17
Iriskolenbrander9 0:5ad817857e29 18 // Read the analog input
Iriskolenbrander9 0:5ad817857e29 19 AnalogIn emg1(A0);
Iriskolenbrander9 0:5ad817857e29 20 AnalogIn emg2(A1);
Iriskolenbrander9 1:7eadfb7fd5c9 21
Iriskolenbrander9 1:7eadfb7fd5c9 22 double emgSample()
Iriskolenbrander9 1:7eadfb7fd5c9 23 {
Iriskolenbrander9 2:b2d117949de7 24 double emgFiltered = bqc.step(emg1.read());
Iriskolenbrander9 1:7eadfb7fd5c9 25 return emgFiltered;
Iriskolenbrander9 1:7eadfb7fd5c9 26 }
Iriskolenbrander9 1:7eadfb7fd5c9 27
Iriskolenbrander9 0:5ad817857e29 28 // The data read and send function
Iriskolenbrander9 0:5ad817857e29 29 void scopeSend()
Iriskolenbrander9 0:5ad817857e29 30 {
Iriskolenbrander9 0:5ad817857e29 31 scope.set(0,emg1.read());
Iriskolenbrander9 0:5ad817857e29 32 scope.set(1,emg2.read());
Iriskolenbrander9 1:7eadfb7fd5c9 33 scope.set(2,emgSample());
Iriskolenbrander9 0:5ad817857e29 34 scope.send();
Iriskolenbrander9 0:5ad817857e29 35 }
Iriskolenbrander9 0:5ad817857e29 36
Iriskolenbrander9 0:5ad817857e29 37 int main()
Iriskolenbrander9 0:5ad817857e29 38 {
Iriskolenbrander9 0:5ad817857e29 39 // Attach the data read and send function at 100 Hz
Iriskolenbrander9 4:034f2bd0c75d 40 bqc.add( &bqlp ).add( &bqhp ).add(&bqn50).add(&bqn100).add(&bqn150).add(&bqn200).add(&bqn250);
Iriskolenbrander9 1:7eadfb7fd5c9 41 scopeTimer.attach_us(&scopeSend, 2e3);
Iriskolenbrander9 0:5ad817857e29 42
Iriskolenbrander9 0:5ad817857e29 43 while(1) { }
Iriskolenbrander9 0:5ad817857e29 44 }