Filter emg 7-10-15 v1

Dependencies:   HIDScope mbed MODSERIAL

Committer:
Bartvaart
Date:
Fri Oct 09 09:00:16 2015 +0000
Revision:
15:c1a8f28d6583
Parent:
14:371e0d505971
Child:
16:8f175d2a472f
Werkt met beste filter tot nu toe, gemiddelde is niet eens nodig. Meansmooth geeft af en toe problemen ws. iets met array ofzo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Bartvaart 5:b400209df739 1 #include "Filterdesigns.h"
Bartvaart 6:8197f9446daf 2 #include "Filter.h"
Bartvaart 10:897db0bdb2fe 3 #include "Meanvalue.h"
Bartvaart 6:8197f9446daf 4
Bartvaart 7:040591b3f019 5 // Inputwaardes
Bartvaart 13:b01231e0b743 6
Bartvaart 13:b01231e0b743 7
Bartvaart 13:b01231e0b743 8 //Notch 50Hz
Bartvaart 13:b01231e0b743 9
Bartvaart 7:040591b3f019 10 // Filter1a: 50Hz Notch
Bartvaart 6:8197f9446daf 11 double v1_50a = 0, v2_50a = 0;
Bartvaart 15:c1a8f28d6583 12 const double a1_50a = -1.52337295428, a2_50a = 0.93195385841;
Bartvaart 15:c1a8f28d6583 13 const double b0_50a = 1.00000000000, b1_50a = -1.61854514929, b2_50a = 1.0;
Bartvaart 6:8197f9446daf 14 const double gain_50a = 1.000000;
Bartvaart 6:8197f9446daf 15
Bartvaart 6:8197f9446daf 16 // Filter1b: 50Hz Notch
Bartvaart 6:8197f9446daf 17 double v1_50b = 0, v2_50b = 0;
Bartvaart 15:c1a8f28d6583 18 const double a1_50b = -1.60486796113, a2_50b = 0.93780356783;
Bartvaart 15:c1a8f28d6583 19 const double b0_50b = 1.00000000000, b1_50b = -1.61854514929, b2_50b = 1.0;
Bartvaart 15:c1a8f28d6583 20 const double gain_50b = 0.934872;
Bartvaart 6:8197f9446daf 21
Bartvaart 5:b400209df739 22
Bartvaart 13:b01231e0b743 23 //HighPass 20Hz
Bartvaart 13:b01231e0b743 24
Bartvaart 13:b01231e0b743 25 // Filter2a: 20Hz HighPass
Bartvaart 15:c1a8f28d6583 26 double v1_HP = 0, v2_HP = 0;
Bartvaart 15:c1a8f28d6583 27 const double a1_HP = 1.64732093404, a2_HP = 0.70900981120;
Bartvaart 15:c1a8f28d6583 28 const double b0_HP = 1.00000000000, b1_HP = 2.0, b2_HP = 1.00000000000;
Bartvaart 15:c1a8f28d6583 29 const double gain_HP = 0.84193;
Bartvaart 13:b01231e0b743 30
Bartvaart 6:8197f9446daf 31
Bartvaart 13:b01231e0b743 32 //LowPass 3Hz
Bartvaart 13:b01231e0b743 33
Bartvaart 13:b01231e0b743 34 // Filter3a: 3Hz LowPass
Bartvaart 15:c1a8f28d6583 35 double v1_LP = 0, v2_LP = 0;
Bartvaart 15:c1a8f28d6583 36 const double a1_LP = -1.93503824887, a2_LP = 0.93708289663;
Bartvaart 15:c1a8f28d6583 37 const double b0_LP = 1.00000000000, b1_LP = 2.0, b2_LP = 1.00000000000;
Bartvaart 15:c1a8f28d6583 38 const double gain_LP = 0.000511;
Bartvaart 6:8197f9446daf 39
Bartvaart 6:8197f9446daf 40 // constante variabelen:
Bartvaart 6:8197f9446daf 41
Bartvaart 6:8197f9446daf 42 double gem = 0.4557; // gemiddelde waarde emgsignaal
Bartvaart 6:8197f9446daf 43
Bartvaart 10:897db0bdb2fe 44 //gemiddelde bepalen
Bartvaart 10:897db0bdb2fe 45 double sum = 0;
Bartvaart 10:897db0bdb2fe 46 int a = 0;
Bartvaart 10:897db0bdb2fe 47 int delay = 40;
Bartvaart 10:897db0bdb2fe 48 int samples_length = 10;
Bartvaart 6:8197f9446daf 49
Bartvaart 10:897db0bdb2fe 50
Bartvaart 13:b01231e0b743 51 void Filterdesigns(double u, double &y, double &ymean)
Bartvaart 5:b400209df739 52 {
Bartvaart 5:b400209df739 53 //u = input waarde
Bartvaart 5:b400209df739 54 //y = output waarde
Bartvaart 5:b400209df739 55
Bartvaart 7:040591b3f019 56 u = u - gem; // lees waarde van emg signaal uit
Bartvaart 6:8197f9446daf 57
Bartvaart 5:b400209df739 58 // Op deze manier worden de waardes ingelezen in Filter. Zorg dus voor dezelfde volgorde, zodat de waardes goed uitgelezen worden!:
Bartvaart 5:b400209df739 59 // Filter(double u, double &v1, double &v2, const double a1, const double a2, const double b0, const double b1, const double b2, const double gain)
Bartvaart 6:8197f9446daf 60
Bartvaart 5:b400209df739 61 // 50Hz Notch filter
Bartvaart 5:b400209df739 62 double y50a = Filter(u, v1_50a, v2_50a, a1_50a, a2_50a, b0_50a, b1_50a, b2_50a, gain_50a);
Bartvaart 5:b400209df739 63 double y50b = Filter(y50a, v1_50b, v2_50b, a1_50b, a2_50b, b0_50b, b1_50b, b2_50b, gain_50b);
Bartvaart 6:8197f9446daf 64
Bartvaart 5:b400209df739 65 // High Pass filter. Tot 20Hz wordt weggefliterd
Bartvaart 15:c1a8f28d6583 66 double yHP = Filter(y50b, v1_HP, v2_HP, a1_HP, a2_HP, b0_HP, b1_HP, b2_HP, gain_HP);
Bartvaart 6:8197f9446daf 67
Bartvaart 5:b400209df739 68 // Absolute waarde wordt genomen.
Bartvaart 15:c1a8f28d6583 69 double y1 = fabs(yHP);
Bartvaart 6:8197f9446daf 70
Bartvaart 6:8197f9446daf 71 // Low Pass filter. Alles vanaf 5Hz wordt weggefilterd
Bartvaart 15:c1a8f28d6583 72 double yLP = Filter(y1, v1_LP, v2_LP, a1_LP, a2_LP, b0_LP, b1_LP, b2_LP, gain_LP);
Bartvaart 6:8197f9446daf 73
Bartvaart 15:c1a8f28d6583 74 y = yLP;
Bartvaart 10:897db0bdb2fe 75
Bartvaart 13:b01231e0b743 76 ymean = Meanvalue(y, sum, a, ymean, delay);
Bartvaart 13:b01231e0b743 77 //ymean = Meansmooth(y, samples_length, ymean);
Bartvaart 10:897db0bdb2fe 78
Bartvaart 5:b400209df739 79 }