Filter emg 7-10-15 v1
Dependencies: HIDScope mbed MODSERIAL
Filterdesigns.cpp@15:c1a8f28d6583, 2015-10-09 (annotated)
- 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?
User | Revision | Line number | New 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 | } |