vielleicht ist jemand hier, der mir helfen kann.
ich möchte für den MX30102 die Herzrate errechnen.
Dafür habe ich die Werte aufgenommen und erhalte einen gewissen Offset, den ich mithilfe des IIR-Filters eliminieren möchte.
http://sam-koblenski.blogspot.co.uk/201 ... c-and.html
Diesen JS - Code würde ich gerne umschreiben:
Code: Alles auswählen
#x: Messwert
#w: aufsummierte Zwischenwerte ???
function dcRemoval(x, w, alpha) {
var w_n = x + alpha*w;
return { w: w_n, y: w_n - w };
}
prev = dcRemoval(signal, prev.w, 0.9);
Code: Alles auswählen
def dcRemoval(x, w, alpha=0.9):
w_n = x + alpha*w
y = w_n - w
return y
#Hauptprogramm
ir_result = datenspeicherung(iR_daten)
for messwert, i in enumerate(ir_result):
print(dcRemoval(messwert, i))
So bekomme ich den wandernden Offset leider nicht weg.
Werte vorher:
- 99943
117401
117363
117337
117308
117291
117279
117262
117238
117218
117209
- -9994.305
-11739.1
-11734.3
-11730.7
-11726.8
-11724.1
-11721.91
-11719.2
-11715.8
-11712.8
Mit den beiden Formeln:
w(t) = x(t) + α·w(t-1)
y(t) = w(t) - w(t-1)
War mein Ansatz eine rekursive Funktion:
Code: Alles auswählen
#Entfernen des Offsets der Werte mithilfe des Filters IIR
def dcRemoval(x, w=0, alpha=0.9):
if w == 1:
return 1
else:
w = x + alpha * dcRemoval(w-1)
return w - (w-1)
"RuntimeError: maximum recursion depth exceeded"
Ich habe ca. 250 Messdaten.
Hoffe auf einen Denkanstoß.
Dankeschön