first test of done filter

Dependencies:   biquadFilter mbed HIDScope

Committer:
s1604554
Date:
Mon Oct 31 10:49:39 2016 +0000
Revision:
10:bc2c13508fe5
Parent:
9:6196636f8879
Child:
11:50ef30ca2b59
Filter is done if this 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);
s1604554 7:f99e7ca907f1 12 DigitalOut led2(LED2);
carlmaykel 2:812bb0deedef 13 DigitalOut led1(LED1);
s1604554 9:6196636f8879 14 HIDScope scope( 2 );
s1604554 7:f99e7ca907f1 15
s1604554 9:6196636f8879 16 Ticker emgticker;
s1604554 9:6196636f8879 17
s1604554 9:6196636f8879 18 BiQuadChain bqc;
s1604554 9:6196636f8879 19 BiQuad bq1( 8.17310e-01, 0.00000e+00, -8.17310e-01, -1.57627e-01, -6.34619e-01 ); //bandpass
s1604554 9:6196636f8879 20 BiQuad bq2( 6.68124e-01, -1.27085e+00, 6.68124e-01, -1.27085e+00, 3.36249e-01 ); //notchnotch
s1604554 10:bc2c13508fe5 21 //there is a rectifier between these two bqc's
s1604554 10:bc2c13508fe5 22 //gives you new highfrequency noise, so lowpass afterwards
s1604554 1:e7cf79380e24 23
s1604554 9:6196636f8879 24 BiQuadChain bqc2;
s1604554 9:6196636f8879 25 BiQuad bq3( 6.74553e-02, 1.34911e-01, 6.74553e-02, -1.14298e+00, 4.12802e-01 ); //lowpass
s1604554 8:3c9f2e6ea1cd 26
s1604554 6:7223ff6719b7 27
s1604554 1:e7cf79380e24 28
s1604554 0:eb47e42019a4 29
s1604554 1:e7cf79380e24 30 void Sample ()
s1604554 1:e7cf79380e24 31 {
s1604554 1:e7cf79380e24 32
s1604554 1:e7cf79380e24 33 double emgSignal = emg0.read();
s1604554 6:7223ff6719b7 34
s1604554 1:e7cf79380e24 35
s1604554 4:81f889cd0c2e 36 double emgFiltered1 = bqc.step(emgSignal);
s1604554 4:81f889cd0c2e 37 double emgFiltered2 = fabs(emgFiltered1);
s1604554 9:6196636f8879 38 double emgFiltered3 = bqc2.step(emgFiltered2);
s1604554 0:eb47e42019a4 39
s1604554 6:7223ff6719b7 40 scope.set(0, emgSignal);
s1604554 9:6196636f8879 41 scope.set(1, emgFiltered3);
s1604554 6:7223ff6719b7 42 scope.send();
s1604554 7:f99e7ca907f1 43
s1604554 10:bc2c13508fe5 44 if (emgFiltered2 >= 0.1)
s1604554 7:f99e7ca907f1 45
s1604554 7:f99e7ca907f1 46 {
s1604554 7:f99e7ca907f1 47 led2 = !led2;
s1604554 6:7223ff6719b7 48 led1 = !led1;
s1604554 8:3c9f2e6ea1cd 49 emgFiltered2 = true;
s1604554 7:f99e7ca907f1 50
s1604554 6:7223ff6719b7 51 }
s1604554 6:7223ff6719b7 52 }
s1604554 6:7223ff6719b7 53
s1604554 6:7223ff6719b7 54 int main()
s1604554 6:7223ff6719b7 55 {
s1604554 7:f99e7ca907f1 56
s1604554 7:f99e7ca907f1 57 led1 = 0;
s1604554 6:7223ff6719b7 58 led2 = 1;
s1604554 7:f99e7ca907f1 59
s1604554 8:3c9f2e6ea1cd 60 bqc.add( &bq1 ).add( &bq2 ).add( &bq3 );
s1604554 6:7223ff6719b7 61 emgticker.attach(&Sample, 0.002);
s1604554 7:f99e7ca907f1 62
s1604554 7:f99e7ca907f1 63
s1604554 6:7223ff6719b7 64 while (true) {
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 6:7223ff6719b7 76
s1604554 6:7223ff6719b7 77
s1604554 6:7223ff6719b7 78
s1604554 6:7223ff6719b7 79
s1604554 6:7223ff6719b7 80
s1604554 6:7223ff6719b7 81
s1604554 1:e7cf79380e24 82 //int N = 50;
s1604554 1:e7cf79380e24 83 //double x = 2;
s1604554 1:e7cf79380e24 84 //double average;
s1604554 0:eb47e42019a4 85
s1604554 1:e7cf79380e24 86 //for (int i = N;i<=10000;i++)
s1604554 1:e7cf79380e24 87 //{
s1604554 1:e7cf79380e24 88 // 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 89
s1604554 1:e7cf79380e24 90 // }
s1604554 1:e7cf79380e24 91
s1604554 1:e7cf79380e24 92
s1604554 0:eb47e42019a4 93 //Full wave rectifier, moving average, and RMS
s1604554 0:eb47e42019a4 94
s1604554 0:eb47e42019a4 95
s1604554 0:eb47e42019a4 96