#include <EKGlfilter.h>
Öffentliche Methoden | |
EKGlfilter () | |
Konstruktor. | |
float | setLFreq (float x) |
Grenzfrequenz des Tiefpaßfilters setzen. | |
float | getLFreq () |
Grenzfrequenz erfragen. | |
virtual void | input (float *d) |
Überschreiben von EKGdevice::input(). |
Der Tiefpaßfilter 2. Ordnung dient der Rauschunterdrückung.
Tiefpaßfilter
Der Tiefpaßfilter ist einem aktiven Filter 2. Ordnung nachempfunden.
+------------------------+ | --- | | | | | C2 ----- C1 ----- | ----- ----- R1 | R2 | |\ | e o-----/\/\/\/---+---/\/\/\/---+---|+\ | o | >---+------o a | +---|-/ | o | | |/ | | --- +----------+ ---Der Filter genügt der DGL:
a'' = - K a' + L ( e - a )mit
K = 1 / ( C1 ( R1 || R2 ) ) L = 1 / ( R1 R2 C1 C2 )Für eine sinvolle Filtercharakteristik werden die Bauteile wie folgt gewählt:
R1 = R2 = R C1 = C * 2/d C2 = C * d/2Daraus ergibt sich für die Parameter der DGL
K = d / RC = d * omega L = 1 / (RC)^2 = omega^2Die Grenzfrequenz des Filters ist
f = omega / 2pi = 1 / ( 2pi * RC )Die Dämpfung
d
bestimmt die Filtercharakteristik. d = 0 Hier setzt Oszillation ein! d = 1 Tschebyscheff: steile Flanke, Welligkeit d = sqrt( 2 ) Butterworth: flacher Amplitudenverlauf d = sqrt( 3 ) Bessel: optimales Laufzeitverhalten, nicht so steile FalnkeEs wird ein Tschebyscheff-Filter implementiert. Die Frequenz kann mit setLFreq() gesetzt werden und ist auf 10 Hz voreingestellt.
float EKGlfilter::setLFreq | ( | float | x | ) |
Grenzfrequenz des Tiefpaßfilters setzen.
x | neue Frequenz in Hz. |
void EKGlfilter::input | ( | float * | d | ) | [virtual] |
Überschreiben von EKGdevice::input().
Hier werden die DGL für die Filter numerisch gelöst.
Tiefpaßfilter
Die DGL a'' = - K a' + L ( e - a )
wird in zwei Komponenten umgeschrieben:
a' = A A' = - K A + L ( e - a )und in Differenzengleichungen überführt. TS ist die Zeitschrittweite EKG_TimeStep.
Delta a = TS * A Delta A = - TS K A + TS L ( e - a )
Erneute Implementation von EKGdevice.