first test of done filter
Dependencies: biquadFilter mbed HIDScope
main.cpp@12:b7025b3a111b, 2016-11-02 (annotated)
- Committer:
- s1604554
- Date:
- Wed Nov 02 16:34:51 2016 +0000
- Revision:
- 12:b7025b3a111b
- Parent:
- 11:50ef30ca2b59
Code for just 1 peak works (camiel)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
s1604554 | 0:eb47e42019a4 | 1 | #include "mbed.h" |
s1604554 | 0:eb47e42019a4 | 2 | #include "BiQuad.h" |
s1604554 | 0:eb47e42019a4 | 3 | #include "stdlib.h" |
s1604554 | 0:eb47e42019a4 | 4 | #include <iostream> |
s1604554 | 0:eb47e42019a4 | 5 | #include <cmath> |
s1604554 | 0:eb47e42019a4 | 6 | #include <string> |
s1604554 | 1:e7cf79380e24 | 7 | #include "HIDScope.h" |
s1604554 | 0:eb47e42019a4 | 8 | |
s1604554 | 6:7223ff6719b7 | 9 | |
s1604554 | 1:e7cf79380e24 | 10 | AnalogIn emg0(A0); |
carlmaykel | 2:812bb0deedef | 11 | AnalogIn emg1(A1); |
carlmaykel | 2:812bb0deedef | 12 | DigitalOut led1(LED1); |
s1604554 | 12:b7025b3a111b | 13 | DigitalOut led3(LED3); |
s1604554 | 12:b7025b3a111b | 14 | HIDScope scope( 3 ); |
s1604554 | 12:b7025b3a111b | 15 | int counter; |
s1604554 | 7:f99e7ca907f1 | 16 | |
s1604554 | 12:b7025b3a111b | 17 | Ticker emgticker; |
s1604554 | 9:6196636f8879 | 18 | |
s1604554 | 9:6196636f8879 | 19 | BiQuadChain bqc; |
s1604554 | 9:6196636f8879 | 20 | BiQuad bq1( 8.17310e-01, 0.00000e+00, -8.17310e-01, -1.57627e-01, -6.34619e-01 ); //bandpass |
s1604554 | 9:6196636f8879 | 21 | BiQuad bq2( 6.68124e-01, -1.27085e+00, 6.68124e-01, -1.27085e+00, 3.36249e-01 ); //notchnotch |
s1604554 | 10:bc2c13508fe5 | 22 | //there is a rectifier between these two bqc's |
s1604554 | 10:bc2c13508fe5 | 23 | //gives you new highfrequency noise, so lowpass afterwards |
s1604554 | 1:e7cf79380e24 | 24 | |
s1604554 | 9:6196636f8879 | 25 | BiQuadChain bqc2; |
s1604554 | 11:50ef30ca2b59 | 26 | BiQuad bq3( 2.00834e-02, 4.01667e-02, 2.00834e-02, -1.56102e+00, 6.41352e-01 ); //lowpass |
s1604554 | 12:b7025b3a111b | 27 | double a; |
s1604554 | 6:7223ff6719b7 | 28 | |
s1604554 | 1:e7cf79380e24 | 29 | |
s1604554 | 0:eb47e42019a4 | 30 | |
s1604554 | 1:e7cf79380e24 | 31 | void Sample () |
s1604554 | 1:e7cf79380e24 | 32 | { |
s1604554 | 12:b7025b3a111b | 33 | |
s1604554 | 1:e7cf79380e24 | 34 | |
s1604554 | 12:b7025b3a111b | 35 | double emgSignal = emg0.read(); |
s1604554 | 12:b7025b3a111b | 36 | |
s1604554 | 12:b7025b3a111b | 37 | |
s1604554 | 12:b7025b3a111b | 38 | double emgFiltered1 = bqc.step(emgSignal); //chain1 |
s1604554 | 12:b7025b3a111b | 39 | double emgFiltered2 = fabs(emgFiltered1); //rectifier |
s1604554 | 12:b7025b3a111b | 40 | double emgFiltered3 = bqc2.step(emgFiltered2); //chain2 |
s1604554 | 12:b7025b3a111b | 41 | |
s1604554 | 12:b7025b3a111b | 42 | scope.set(0, emgSignal); //hidscope channel 1 |
s1604554 | 12:b7025b3a111b | 43 | scope.set(1, emgFiltered3); |
s1604554 | 12:b7025b3a111b | 44 | scope.set(2, a); //hidscope channel 2 |
s1604554 | 12:b7025b3a111b | 45 | scope.send(); |
s1604554 | 12:b7025b3a111b | 46 | |
s1604554 | 12:b7025b3a111b | 47 | if (counter == 0) { |
s1604554 | 12:b7025b3a111b | 48 | a = emgFiltered3; |
s1604554 | 12:b7025b3a111b | 49 | } |
s1604554 | 6:7223ff6719b7 | 50 | |
s1604554 | 1:e7cf79380e24 | 51 | |
s1604554 | 12:b7025b3a111b | 52 | if (a >= 0.1) //threshold value |
s1604554 | 0:eb47e42019a4 | 53 | |
s1604554 | 12:b7025b3a111b | 54 | { |
s1604554 | 12:b7025b3a111b | 55 | |
s1604554 | 12:b7025b3a111b | 56 | a = 0; |
s1604554 | 7:f99e7ca907f1 | 57 | |
s1604554 | 12:b7025b3a111b | 58 | led1 = !led1; |
s1604554 | 12:b7025b3a111b | 59 | counter++; //change LED on/off |
s1604554 | 12:b7025b3a111b | 60 | } else if (a == 0) { |
s1604554 | 12:b7025b3a111b | 61 | counter++; |
s1604554 | 11:50ef30ca2b59 | 62 | |
s1604554 | 6:7223ff6719b7 | 63 | } |
s1604554 | 12:b7025b3a111b | 64 | |
s1604554 | 12:b7025b3a111b | 65 | if (counter == 1000) { |
s1604554 | 12:b7025b3a111b | 66 | led3 = !led3; |
s1604554 | 12:b7025b3a111b | 67 | counter = 0; |
s1604554 | 6:7223ff6719b7 | 68 | } |
s1604554 | 6:7223ff6719b7 | 69 | |
s1604554 | 7:f99e7ca907f1 | 70 | |
s1604554 | 12:b7025b3a111b | 71 | } |
s1604554 | 12:b7025b3a111b | 72 | |
s1604554 | 11:50ef30ca2b59 | 73 | |
s1604554 | 7:f99e7ca907f1 | 74 | |
s1604554 | 12:b7025b3a111b | 75 | int main() |
s1604554 | 12:b7025b3a111b | 76 | { |
s1604554 | 12:b7025b3a111b | 77 | counter = 0; |
s1604554 | 12:b7025b3a111b | 78 | led1 = 1; //off |
s1604554 | 12:b7025b3a111b | 79 | led3 = 1; //off |
s1604554 | 12:b7025b3a111b | 80 | bqc.add( &bq1 ).add( &bq2 ); |
s1604554 | 12:b7025b3a111b | 81 | bqc2.add( &bq3 ); //add both biquad chains |
s1604554 | 12:b7025b3a111b | 82 | emgticker.attach(&Sample, 0.001); //attach ticker |
s1604554 | 7:f99e7ca907f1 | 83 | |
s1604554 | 7:f99e7ca907f1 | 84 | |
s1604554 | 12:b7025b3a111b | 85 | while (true) { |
s1604554 | 6:7223ff6719b7 | 86 | |
s1604554 | 12:b7025b3a111b | 87 | } |
s1604554 | 12:b7025b3a111b | 88 | } |