Hidscope + EMG
Dependencies: HIDScope biquadFilter mbed
main.cpp@4:034f2bd0c75d, 2018-10-22 (annotated)
- 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?
User | Revision | Line number | New 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 | } |