From c2be6b7a7399af4a5b0c8d6d351bc2171ad41464 Mon Sep 17 00:00:00 2001 From: schneider <schneider@blinkenlichts.net> Date: Fri, 10 Apr 2020 19:30:14 +0200 Subject: [PATCH] fix(spo2): Use IIR filter for offset removal --- preload/apps/spo2/__init__.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/preload/apps/spo2/__init__.py b/preload/apps/spo2/__init__.py index cf565d8e0..dbe9b83c4 100644 --- a/preload/apps/spo2/__init__.py +++ b/preload/apps/spo2/__init__.py @@ -23,6 +23,7 @@ class SPO2: self.last_sample = 0.0 self.filtered_value = 0.0 self.source = "Red" + self.average = 0 def open(self): def callback(datasets): @@ -45,7 +46,9 @@ class SPO2: while buttons.read(buttons.BOTTOM_RIGHT): pass def update_history(self, datasets): + alpha = 0.995 for val in datasets: + """ if self.source == "Red": self.avg[self.avg_pos] = val.red else: @@ -63,6 +66,17 @@ class SPO2: ) self.last_sample = avg_data self.history.append(self.filtered_value) + """ + + #print("%d,%d" % (val.red, val.infrared)) + if self.source == "Red": + d = val.red + else: + d = val.infrared + + self.average = alpha * self.average + (1 - alpha) * d + d -= self.average + self.history.append(d) # trim old elements self.history = self.history[-self.HISTORY_MAX :] -- GitLab