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