first test of done filter

Dependencies:   biquadFilter mbed HIDScope

Committer:
s1604554
Date:
Wed Oct 26 12:17:45 2016 +0000
Revision:
8:3c9f2e6ea1cd
Parent:
7:f99e7ca907f1
Child:
9:6196636f8879
filter notch high and low pass, bqc are not final

Who changed what in which revision?

UserRevisionLine numberNew 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);
s1604554 7:f99e7ca907f1 12 DigitalOut led2(LED2);
carlmaykel 2:812bb0deedef 13 DigitalOut led1(LED1);
s1604554 7:f99e7ca907f1 14
s1604554 1:e7cf79380e24 15 //
carlmaykel 2:812bb0deedef 16 HIDScope scope( 2 );
s1604554 1:e7cf79380e24 17 Ticker emgticker;
s1604554 1:e7cf79380e24 18
s1604554 1:e7cf79380e24 19
s1604554 0:eb47e42019a4 20
s1604554 0:eb47e42019a4 21 BiQuadChain bqc;
s1604554 8:3c9f2e6ea1cd 22
s1604554 7:f99e7ca907f1 23 BiQuad bq1( 5.79192e-01, -9.37153e-01, 5.79192e-01, -9.37153e-01, 1.58384e-01 );
s1604554 8:3c9f2e6ea1cd 24 BiQuad bq2( 2.92893e-01, 5.85786e-01, 2.92893e-01, -3.60822e-16, 1.71573e-01 );
s1604554 8:3c9f2e6ea1cd 25 BiQuad bq3( 9.14969e-01, -1.82994e+00, 9.14969e-01, -1.82269e+00, 8.37182e-01 );
s1604554 8:3c9f2e6ea1cd 26
s1604554 7:f99e7ca907f1 27 //BiQuad bq1( 5.79192e-01, -9.37153e-01, 5.79192e-01, -9.37153e-01, 1.58384e-01 ); //notch
s1604554 7:f99e7ca907f1 28 //BiQuad bq2( 2.00834e-02, 4.01667e-02, 2.00834e-02, -1.56102e+00, 6.41352e-01 ); //low pass
s1604554 7:f99e7ca907f1 29 //BiQuad bq3( 8.94859e-01, -1.78972e+00, 8.94859e-01, -1.77863e+00, 8.00803e-01 ); //high pass
s1604554 6:7223ff6719b7 30
s1604554 1:e7cf79380e24 31
s1604554 0:eb47e42019a4 32
s1604554 1:e7cf79380e24 33 void Sample ()
s1604554 1:e7cf79380e24 34 {
s1604554 1:e7cf79380e24 35
s1604554 1:e7cf79380e24 36 double emgSignal = emg0.read();
s1604554 6:7223ff6719b7 37
s1604554 1:e7cf79380e24 38
s1604554 4:81f889cd0c2e 39 double emgFiltered1 = bqc.step(emgSignal);
s1604554 4:81f889cd0c2e 40 double emgFiltered2 = fabs(emgFiltered1);
s1604554 0:eb47e42019a4 41
s1604554 6:7223ff6719b7 42 scope.set(0, emgSignal);
s1604554 6:7223ff6719b7 43 scope.set(1, emgFiltered2);
s1604554 6:7223ff6719b7 44 scope.send();
s1604554 7:f99e7ca907f1 45
s1604554 8:3c9f2e6ea1cd 46 if (emgFiltered2 >= 0.07)
s1604554 7:f99e7ca907f1 47
s1604554 7:f99e7ca907f1 48 {
s1604554 7:f99e7ca907f1 49 led2 = !led2;
s1604554 6:7223ff6719b7 50 led1 = !led1;
s1604554 8:3c9f2e6ea1cd 51 emgFiltered2 = true;
s1604554 7:f99e7ca907f1 52
s1604554 6:7223ff6719b7 53 }
s1604554 6:7223ff6719b7 54 }
s1604554 6:7223ff6719b7 55
s1604554 6:7223ff6719b7 56 int main()
s1604554 6:7223ff6719b7 57 {
s1604554 7:f99e7ca907f1 58
s1604554 7:f99e7ca907f1 59 led1 = 0;
s1604554 6:7223ff6719b7 60 led2 = 1;
s1604554 7:f99e7ca907f1 61
s1604554 8:3c9f2e6ea1cd 62 bqc.add( &bq1 ).add( &bq2 ).add( &bq3 );
s1604554 6:7223ff6719b7 63 emgticker.attach(&Sample, 0.002);
s1604554 7:f99e7ca907f1 64
s1604554 7:f99e7ca907f1 65
s1604554 6:7223ff6719b7 66 while (true) {
s1604554 6:7223ff6719b7 67
s1604554 6:7223ff6719b7 68 }
s1604554 6:7223ff6719b7 69 }
s1604554 6:7223ff6719b7 70
s1604554 6:7223ff6719b7 71
s1604554 6:7223ff6719b7 72
s1604554 6:7223ff6719b7 73
s1604554 6:7223ff6719b7 74
s1604554 6:7223ff6719b7 75
s1604554 6:7223ff6719b7 76
s1604554 6:7223ff6719b7 77
s1604554 6:7223ff6719b7 78
s1604554 6:7223ff6719b7 79
s1604554 6:7223ff6719b7 80
s1604554 6:7223ff6719b7 81
s1604554 6:7223ff6719b7 82
s1604554 6:7223ff6719b7 83
s1604554 1:e7cf79380e24 84 //int N = 50;
s1604554 1:e7cf79380e24 85 //double x = 2;
s1604554 1:e7cf79380e24 86 //double average;
s1604554 0:eb47e42019a4 87
s1604554 1:e7cf79380e24 88 //for (int i = N;i<=10000;i++)
s1604554 1:e7cf79380e24 89 //{
s1604554 1:e7cf79380e24 90 // average = sqrt(( pow(abs(M[i-49]),x)+pow(abs(M[i-48]),x)+pow(abs(M[i-47]),x)+pow(abs(M[i-46]),x)+pow(abs(M[i-45]),x)+pow(abs(M[i-44]),x)+pow(abs(M[i-43]),x)+pow(abs(M[i-42]),x)+pow(abs(M[i-41]),x)+pow(abs(M[i-40]),x)+pow(abs(M[i-39]),x)+pow(abs(M[i-38]),x)+pow(abs(M[i-37]),x)+pow(abs(M[i-36]),x)+pow(abs(M[i-35]),x)+pow(abs(M[i-34]),x)+pow(abs(M[i-33]),x)+pow(abs(M[i-32]),x)+pow(abs(M[i-31]),x)+pow(abs(M[i-30]),x)+pow(abs(M[i-29]),x)+pow(abs(M[i-28]),x)+pow(abs(M[i-27]),x)+pow(abs(M[i-26]),x)+pow(abs(M[i-25]),x)+pow(abs(M[i-24]),x)+pow(abs(M[i-23]),x)+pow(abs(M[i-22]),x)+pow(abs(M[i-21]),x)+pow(abs(M[i-20]),x)+pow(abs(M[i-19]),x)+pow(abs(M[i-18]),x)+pow(abs(M[i-17]),x)+pow(abs(M[i-16]),x)+pow(abs(M[i-15]),x)+pow(abs(M[i-14]),x)+pow(abs(M[i-13]),x)+pow(abs(M[i-12]),x)+pow(abs(M[i-11]),x)+pow(abs(M[i-10]),x)+pow(abs(M[i-9]),x)+pow(abs(M[i-8]),x)+pow(abs(M[i-7]),x)+pow(abs(M[i-6]),x)+pow(abs(M[i-5]),x)+pow(abs(M[i-4]),x)+pow(abs(M[i-3]),x)+pow(abs(M[i-2]),x)+pow(abs(M[i-1]),x)+pow(abs(M[i]),x))/static_cast<double>(N));
s1604554 1:e7cf79380e24 91
s1604554 1:e7cf79380e24 92 // }
s1604554 1:e7cf79380e24 93
s1604554 1:e7cf79380e24 94
s1604554 0:eb47e42019a4 95 //Full wave rectifier, moving average, and RMS
s1604554 0:eb47e42019a4 96
s1604554 0:eb47e42019a4 97
s1604554 0:eb47e42019a4 98