Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BiQuad4th_order Biquad HIDScope MODSERIAL biquadFilter mbed
Fork of emg_calibration by
Filter/FilterDesign.cpp@0:802c9c6b30d3, 2018-10-31 (annotated)
- Committer:
- Duif
- Date:
- Wed Oct 31 12:57:37 2018 +0000
- Revision:
- 0:802c9c6b30d3
Weird error. Editions made so the calibration can be checked;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Duif | 0:802c9c6b30d3 | 1 | #include "FilterDesign.h" |
| Duif | 0:802c9c6b30d3 | 2 | #include "BiQuad.h" |
| Duif | 0:802c9c6b30d3 | 3 | #include "BiQuad4.h" |
| Duif | 0:802c9c6b30d3 | 4 | |
| Duif | 0:802c9c6b30d3 | 5 | // Notch filter op 50 Hz |
| Duif | 0:802c9c6b30d3 | 6 | double nb0 = 0.999103206817809; |
| Duif | 0:802c9c6b30d3 | 7 | double nb1 = -1.994263409725146; |
| Duif | 0:802c9c6b30d3 | 8 | double nb2 = 0.999103206817809; |
| Duif | 0:802c9c6b30d3 | 9 | double na1 = -1.994263409725146; |
| Duif | 0:802c9c6b30d3 | 10 | double na2 = 0.998206413635618; |
| Duif | 0:802c9c6b30d3 | 11 | |
| Duif | 0:802c9c6b30d3 | 12 | // 4th order Butterworth High pass 10 Hz |
| Duif | 0:802c9c6b30d3 | 13 | double hpb0 = 0.922946103200875; |
| Duif | 0:802c9c6b30d3 | 14 | double hpb1 = -3.691784412803501; |
| Duif | 0:802c9c6b30d3 | 15 | double hpb2 = 5.537676619205252; |
| Duif | 0:802c9c6b30d3 | 16 | double hpb3 = -3.691784412803501; |
| Duif | 0:802c9c6b30d3 | 17 | double hpb4 = 0.922946103200875; |
| Duif | 0:802c9c6b30d3 | 18 | double hpa1 = -3.839672788481732; |
| Duif | 0:802c9c6b30d3 | 19 | double hpa2 = 5.531745865737864; |
| Duif | 0:802c9c6b30d3 | 20 | double hpa3 = -3.543889487580057; |
| Duif | 0:802c9c6b30d3 | 21 | double hpa4 = 0.851829509414351; |
| Duif | 0:802c9c6b30d3 | 22 | |
| Duif | 0:802c9c6b30d3 | 23 | /* |
| Duif | 0:802c9c6b30d3 | 24 | // 4th order Butterworth Low pass 6 Hz |
| Duif | 0:802c9c6b30d3 | 25 | double lpb0 = 0.000000109473538449645 ; |
| Duif | 0:802c9c6b30d3 | 26 | double lpb1 = 0.000000437894153798579 ; |
| Duif | 0:802c9c6b30d3 | 27 | double lpb2 = 0.000000656841230697869; |
| Duif | 0:802c9c6b30d3 | 28 | double lpb3 = 0.000000437894153798579; |
| Duif | 0:802c9c6b30d3 | 29 | double lpb4 = 0.000000109473538449645; |
| Duif | 0:802c9c6b30d3 | 30 | double lpa1 = -3.903798995738811; |
| Duif | 0:802c9c6b30d3 | 31 | double lpa2 = 5.715997307717368; |
| Duif | 0:802c9c6b30d3 | 32 | double lpa3 = -3.720469814151233; |
| Duif | 0:802c9c6b30d3 | 33 | double lpa4 = 0.908273253749291; |
| Duif | 0:802c9c6b30d3 | 34 | */ |
| Duif | 0:802c9c6b30d3 | 35 | |
| Duif | 0:802c9c6b30d3 | 36 | //4th order Butterworth low pass 9 Hz |
| Duif | 0:802c9c6b30d3 | 37 | double lpb0 = 0.00000054134117189603 ; |
| Duif | 0:802c9c6b30d3 | 38 | double lpb1 = 0.00000216536468758410 ; |
| Duif | 0:802c9c6b30d3 | 39 | double lpb2 = 0.00000324804703137616; |
| Duif | 0:802c9c6b30d3 | 40 | double lpb3 = 0.00000216536468758410; |
| Duif | 0:802c9c6b30d3 | 41 | double lpb4 = 0.00000054134117189603; |
| Duif | 0:802c9c6b30d3 | 42 | double lpa1 = -3.855703428197204; |
| Duif | 0:802c9c6b30d3 | 43 | double lpa2 = 5.577429961461492; |
| Duif | 0:802c9c6b30d3 | 44 | double lpa3 = -3.587322565783154; |
| Duif | 0:802c9c6b30d3 | 45 | double lpa4 = 0.865604693977616; |
| Duif | 0:802c9c6b30d3 | 46 | |
| Duif | 0:802c9c6b30d3 | 47 | double gain = 10.00000; |
| Duif | 0:802c9c6b30d3 | 48 | |
| Duif | 0:802c9c6b30d3 | 49 | BiQuad notch50(nb0, nb1, nb2, na1, na2); |
| Duif | 0:802c9c6b30d3 | 50 | BiQuad4 highpass(hpb0, hpb1, hpb2, hpb3, hpb4, hpa1, hpa2, hpa3, hpa4); |
| Duif | 0:802c9c6b30d3 | 51 | BiQuad4 lowpass(lpb0, lpb1, lpb2, lpb3, lpb4, lpa1, lpa2, lpa3, lpa4); |
| Duif | 0:802c9c6b30d3 | 52 | |
| Duif | 0:802c9c6b30d3 | 53 | double FilterDesign(double u) |
| Duif | 0:802c9c6b30d3 | 54 | { |
| Duif | 0:802c9c6b30d3 | 55 | double y_n = notch50.step(u); |
| Duif | 0:802c9c6b30d3 | 56 | double y_hp = highpass.step(y_n); |
| Duif | 0:802c9c6b30d3 | 57 | double y_abs = abs(y_hp); |
| Duif | 0:802c9c6b30d3 | 58 | double y_lp = lowpass.step(y_abs); |
| Duif | 0:802c9c6b30d3 | 59 | double y_gain = y_lp*gain; |
| Duif | 0:802c9c6b30d3 | 60 | |
| Duif | 0:802c9c6b30d3 | 61 | return y_gain; |
| Duif | 0:802c9c6b30d3 | 62 | } |
