first test of done filter

Dependencies:   biquadFilter mbed HIDScope

Committer:
s1604554
Date:
Mon Oct 24 14:43:47 2016 +0000
Revision:
6:7223ff6719b7
Parent:
5:89f7165f7e73
Child:
7:f99e7ca907f1
Notch, high and low pass are working.; LED to show that it works

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);
carlmaykel 2:812bb0deedef 12 DigitalOut led1(LED1);
s1604554 6:7223ff6719b7 13 DigitalOut led2(LED2);
s1604554 6:7223ff6719b7 14 DigitalOut led3(LED3);
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 6:7223ff6719b7 22 BiQuad bq1( 5.79192e-01, -9.37153e-01, 5.79192e-01, -9.37153e-01, 1.58384e-01 ); //notch
s1604554 6:7223ff6719b7 23 BiQuad bq2( 2.00834e-02, 4.01667e-02, 2.00834e-02, -1.56102e+00, 6.41352e-01 ); //low pass
s1604554 6:7223ff6719b7 24 BiQuad bq3( 8.94859e-01, -1.78972e+00, 8.94859e-01, -1.77863e+00, 8.00803e-01 ); //high pass
s1604554 6:7223ff6719b7 25
s1604554 1:e7cf79380e24 26
s1604554 0:eb47e42019a4 27
s1604554 1:e7cf79380e24 28 void Sample ()
s1604554 1:e7cf79380e24 29 {
s1604554 1:e7cf79380e24 30
s1604554 1:e7cf79380e24 31 double emgSignal = emg0.read();
s1604554 6:7223ff6719b7 32
s1604554 1:e7cf79380e24 33
s1604554 4:81f889cd0c2e 34 double emgFiltered1 = bqc.step(emgSignal);
s1604554 4:81f889cd0c2e 35 double emgFiltered2 = fabs(emgFiltered1);
s1604554 0:eb47e42019a4 36
s1604554 0:eb47e42019a4 37
s1604554 6:7223ff6719b7 38 scope.set(0, emgSignal);
s1604554 6:7223ff6719b7 39 scope.set(1, emgFiltered2);
s1604554 6:7223ff6719b7 40 scope.send();
s1604554 6:7223ff6719b7 41 led1 = !led1;
s1604554 6:7223ff6719b7 42 if (emgFiltered2 >= 0.1)
s1604554 6:7223ff6719b7 43 {led2 = !led2;
s1604554 6:7223ff6719b7 44 led3 = 1;
s1604554 6:7223ff6719b7 45 }
s1604554 6:7223ff6719b7 46 else
s1604554 6:7223ff6719b7 47 {led3 = 0;}
s1604554 6:7223ff6719b7 48 }
s1604554 6:7223ff6719b7 49
s1604554 6:7223ff6719b7 50 int main()
s1604554 6:7223ff6719b7 51 {
s1604554 6:7223ff6719b7 52 led2 = 1;
s1604554 6:7223ff6719b7 53 led3 = 1;
s1604554 6:7223ff6719b7 54 bqc.add( &bq1 ).add( &bq2 ).add( &bq3 );
s1604554 6:7223ff6719b7 55 emgticker.attach(&Sample, 0.002);
s1604554 6:7223ff6719b7 56 while (true) {
s1604554 6:7223ff6719b7 57
s1604554 6:7223ff6719b7 58
s1604554 6:7223ff6719b7 59
s1604554 6:7223ff6719b7 60 }
s1604554 6:7223ff6719b7 61 }
s1604554 6:7223ff6719b7 62
s1604554 6:7223ff6719b7 63
s1604554 6:7223ff6719b7 64
s1604554 6:7223ff6719b7 65
s1604554 6:7223ff6719b7 66
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 1:e7cf79380e24 76 //int N = 50;
s1604554 1:e7cf79380e24 77 //double x = 2;
s1604554 1:e7cf79380e24 78 //double average;
s1604554 0:eb47e42019a4 79
s1604554 1:e7cf79380e24 80 //for (int i = N;i<=10000;i++)
s1604554 1:e7cf79380e24 81 //{
s1604554 1:e7cf79380e24 82 // 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 83
s1604554 1:e7cf79380e24 84 // }
s1604554 1:e7cf79380e24 85
s1604554 1:e7cf79380e24 86
s1604554 0:eb47e42019a4 87 //Full wave rectifier, moving average, and RMS
s1604554 0:eb47e42019a4 88
s1604554 0:eb47e42019a4 89
s1604554 0:eb47e42019a4 90