000
24.03.2006, 20:14 Uhr
~herzschlagermittler
Gast
|
Hi Leutz,
Denker gesucht - ich bekomm's nicht hin!
Ich arbeite zwar gerade in C++ dran, geht aber eher um einen Algorithmus..
folgendes Problem:
ich habe einen unsigned long "Datenstrom" (bekomme alle 3/100 sekunden einen Wert von meinem Gerät). Dieser Datenstrom stellt den gemessenen Herzschlag dar. Die Werte pendeln ca. zwischen 930 und 970 (wenn gar nichts angeschlossen ist) und fluktuieren ein bisschen mehr, wenn das Gerät an die Hand angeschlossen ist (also halt neben dem Herzschlag auch). Ein Herzschlag stellt dann eine Erhöhung der Werte dar, und die will ich erkennen. Mein Ziel: Den Herzschlag "boolsch" erkennen.
zb so sehen die Werte aus: 940, 960, 930, 970, 940, 990, 1100, 1180, 1080, 970, 980, 960
Eigentlich leicht, man sieht, dass der Herzschlag um die 1180 ist. Die Werte sind Erfährungsgemäß 5-6 Werte lang erhöht, 3 Werte stark erhöht.
Mein Ansatz (nach ein bisschen rumprobieren) war: - Puffer mit 3 Werten - Puffersumme > 2950 - Puffermaximum > 1050 - Pufferminimum > 975 (hab auch noch methoden für Unterschied der Werte, Summe der Unterschiede und Mittelwerte für den Puffer geschrieben und damit auch einen Puffer von 5-10 Länge ausprobiert (weil ja zb im 10er Puffer die ganze Kurve drinnen ist)
Problem: es geht um Menschen und nicht Computer, sprich aufgrund der biologischen Unterschiede funktioniert es mal, und mal nicht. Die "Kurve" der Werte ist je nach Mensch oder aktuellem Zustand mal flacher (hab sogar schon mal erlebt, dass die Kurve nicht über 1000 kommt, trotzdem aber eine kurve war) und mal steiler (Spitzen bis 2000). Ist das Gerät angeschlossen, fluktuieren die Werte auch schon mal ohne Herzschlag über 1000, aber nicht in Form einer Kurve über 6 Werte.
Ich weiss, dass 100% zu erkennen mit dem Gerät nicht drinnen ist, aber auf jeden Fall mehr als ich jetzt hinbekomme. Aus Performance-gründen und um die Bestimmung sicherer zu machen werte ich auch nach einem erkannten Herzschlag erst einmal die nächsten 0,3 Sekunden (entspricht 200 schläge pro minute) die folgenden Werte nicht aus. Die Zeit danach werden bei mir aber oft Herzschläge fälschlicherweise erkannt - erhöhe ich die Anforderungswerte oben wird oft nichts erkannt.
Deshalb die Frage an die schlauen Köpfe hier, wer da eine tolle Idee hat.
Gibt es einen Algorithmus um derartige "Kurven" (ach, ja: in denen kann auch mal ein Wert nicht stimmen, ideal sind die Kurven nicht: zb 1000 1200 1180 1250 1100 990) zu ermitteln? Sprich - wie orientiere ich mich eher an der Form des Datenstromes/der Kurve als an den absoluten Werten? (am besten wohl eine Kombination).
Danke im Voraus,
Rainer |