Πίνακας περιεχομένων:

Παλμικό οξύμετρο με πολύ βελτιωμένη ακρίβεια: 6 βήματα (με εικόνες)
Παλμικό οξύμετρο με πολύ βελτιωμένη ακρίβεια: 6 βήματα (με εικόνες)

Βίντεο: Παλμικό οξύμετρο με πολύ βελτιωμένη ακρίβεια: 6 βήματα (με εικόνες)

Βίντεο: Παλμικό οξύμετρο με πολύ βελτιωμένη ακρίβεια: 6 βήματα (με εικόνες)
Βίντεο: 9 τρόποι για να αυξήσετε φυσικά τα επίπεδα οξυγόνου στο... 2024, Ιούλιος
Anonim
Παλμικό οξύμετρο με πολύ βελτιωμένη ακρίβεια
Παλμικό οξύμετρο με πολύ βελτιωμένη ακρίβεια
Παλμικό οξύμετρο με πολύ βελτιωμένη ακρίβεια
Παλμικό οξύμετρο με πολύ βελτιωμένη ακρίβεια

Εάν επισκεφτήκατε πρόσφατα έναν γιατρό, το πιθανότερο είναι ότι τα βασικά ζωτικά σας σημεία εξετάστηκαν από νοσοκόμα. Βάρος, ύψος, αρτηριακή πίεση, καθώς και καρδιακός ρυθμός (HR) και κορεσμός οξυγόνου στο περιφερικό αίμα (SpO2). Perhapsσως, τα δύο τελευταία ελήφθησαν από έναν κόκκινο λαμπερό ηλεκτρονικό αισθητήρα δακτύλων που εμφάνιζε τους σχετικούς αριθμούς σε μια μικρή οθόνη σε λίγα λεπτά. Αυτός ο αισθητήρας ονομάζεται παλμικό οξύμετρο και μπορείτε να βρείτε όλες τις βασικές πληροφορίες σχετικά με αυτό εδώ.

Μπορεί κανείς εύκολα να αγοράσει ένα απλό παλμικό οξύμετρο, σίγουρα, αλλά πού είναι η διασκέδαση σε αυτό; Αποφάσισα να φτιάξω τη δική μου, πρώτα για το καλό, αλλά το πιο σημαντικό έχοντας κατά νου μια συγκεκριμένη εφαρμογή: νυχτερινή οξυμετρία όπου τόσο HR όσο και SpO2 τα δεδομένα θα συλλέγονταν συνεχώς για μια νύχτα και θα καταγράφονταν σε κάρτα micro SD. Το Instructables περιέχει ήδη αρκετά έργα αυτού του είδους, π.χ., δύο που αφορούν το Arduino εδώ και εδώ, και ένα που χρησιμοποιεί το Raspberry Pi. Το Mine χρησιμοποιεί ελαφρώς νεότερο αισθητήρα MAX30102 από την MAXIM Integrated και Adafruit's Feather M0 Adalogger για έλεγχο και καταγραφή δεδομένων.

Το έργο μας δεν είναι επομένως ιδιαίτερα καινοτόμο από άποψη υλικού και ως εκ τούτου δεν θα άξιζε να γράψω αυτό το Instructable, αλλά στη διαδικασία δημιουργίας του έχω κάνει σημαντικές προόδους στο λογισμικό που μου επέτρεψε να εξάγω δεδομένα από το MAX30102 με πολύ μεγαλύτερη συνέπεια και πολύ λιγότερος θόρυβος από το λογισμικό που γράφτηκε από τη MAXIM για αυτόν τον αισθητήρα. Η απόδοση του αλγορίθμου επεξεργασίας σήματος απεικονίζεται στο παραπάνω διάγραμμα, όπου τα δύο κορυφαία γραφήματα περιέχουν καρδιακό ρυθμό και κορεσμό οξυγόνου για μια νύχτα που υπολογίζεται από ακατέργαστα σήματα με τη μέθοδό μας (προσδιορίζεται με "RF"), ενώ τα δύο κάτω γραφήματα δείχνουν τα αποτελέσματα MAXIM που παράγονται από ακριβώς τα ίδια σήματα. Οι τυπικές αποκλίσεις για HR είναι 4,7 bpm και 18,1 bpm, και για SpO2 0,9% και 4,4%, για RF και MAXIM, αντίστοιχα.

(Και τα δύο γραφήματα RF αντιστοιχούν σε ελάχιστο όριο αυτοσυσχέτισης 0,25 και κανένα όριο στη συσχέτιση R / IR. Ανατρέξτε στα βήματα 4 και 5 για επεξήγηση αυτών των όρων.)

Βήμα 1: Υλικό

Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
  1. Παλμικό οξύμετρο και αισθητήρας καρδιακών παλμών MAX30102 πλακέτα συστήματος από την MAXIM Integrated, Inc.
  2. Feather M0 Adalogger από την Adafruit, Inc.
  3. Μπαταρία ιόντων λιθίου από την Adafruit, Inc.

Συνδέσεις:

  • Οι καρφίτσες Adalogger SCL και SDA σε αντίστοιχες ακίδες SCL και SDA στον πίνακα MAX30102
  • Καρφίτσα Adalogger 10 στην καρφίτσα INT στον πίνακα MAX30102
  • Adalogger GND σε πίνακα GND MAX30102
  • Adalogger 3V έως MAX30102 VIN

Βήμα 2: Τα ψηφιακά σήματα επιστρέφονται από MAX30102

Τα ψηφιακά σήματα επιστρέφονται από MAX30102
Τα ψηφιακά σήματα επιστρέφονται από MAX30102
Τα ψηφιακά σήματα επιστρέφονται από MAX30102
Τα ψηφιακά σήματα επιστρέφονται από MAX30102

Οι αρχές λειτουργίας του αισθητήρα είναι πολύ απλές: δύο LED, ένα κόκκινο (660 nm) και ένα υπέρυθρο (880 nm, IR) λάμπουν φως στο ανθρώπινο δέρμα. Το φως απορροφάται εν μέρει από τους υποκείμενους ιστούς, συμπεριλαμβανομένου του περιφερικού αίματος. Ο φωτοανιχνευτής του αισθητήρα συλλέγει ανακλώμενο φως και στα δύο μήκη κύματος και επιστρέφει δύο αντίστοιχες σχετικές εντάσεις χρησιμοποιώντας το πρωτόκολλο I2C. Δεδομένου ότι τα φάσματα απορρόφησης για οξυγονωμένη και αποξυγονωμένη αιμοσφαιρίνη διαφέρουν και για τα δύο μήκη κύματος, το ανακλώμενο φως έχει ένα μεταβλητό συστατικό ως την ποσότητα του αρτηριακού αίματος που υπάρχει κάτω από τους παλμούς του δέρματος με κάθε παλμό της καρδιάς. Ο υπολογισμός του καρδιακού ρυθμού και του κορεσμού οξυγόνου εξαρτάται από το λογισμικό επεξεργασίας σήματος.

Παραδείγματα ακατέργαστων σημάτων (μόνο κανάλι IR) απεικονίζονται στις παραπάνω εικόνες. Κάποιος μπορεί να παρατηρήσει ένα περιοδικό στοιχείο που επικαλύπτεται σε μια μεταβλητή βασική γραμμή που μεταβάλλεται λόγω πολλών παραγόντων που αναφέρονται στη σελίδα της Wikipedia. Τα τεχνουργήματα που προκαλούνται από την κίνηση είναι ιδιαίτερα ενοχλητικά, καθώς μπορεί να καλύψουν το χρήσιμο σήμα HR και να προκαλέσουν ψευδή αποτελέσματα. Ως εκ τούτου, τα προηγμένα εμπορικά οξύμετρα διαθέτουν επιταχυνσιόμετρα που βοηθούν στην ακύρωση αυτών των τεχνουργημάτων.

Μπορεί να προσθέσω ένα επιταχυνσιόμετρο στην επόμενη έκδοση του οξύμετρου μου, αλλά για νυχτερινό HR/SpO2 καταγραφή, όταν ο αισθητήρας παραμένει ακίνητος τις περισσότερες φορές, αρκεί η ανίχνευση και η παράλειψη παραμορφωμένων σημάτων.

Ο ίδιος ο αισθητήρας MAX30102 διατίθεται σε ένα μικρό πακέτο που τοποθετείται στην επιφάνεια, αλλά το MAXIM προσφέρει ευγενικά έναν πίνακα διάσπασης (System Board 6300) καθώς και λογισμικό επεξεργασίας σήματος για Arduino και mbed - όλα στο πακέτο σχεδιασμού αναφοράς MAXREFDES117#. Το αγόρασα ευτυχώς περιμένοντας να κολλήσω μερικά καλώδια μεταξύ του αισθητήρα και του Adalogger και να έχω ένα λειτουργικό, καλό οξύμετρο σε μια μέρα. Προσάρμοσα την έκδοση RD117_ARDUINO του λογισμικού της MAXIM για να τρέχω στον επεξεργαστή ARM Cortex M0 του Adalogger. Βασικά, το μόνο που έπρεπε να κάνω ήταν να αντικαταστήσω ασυμβίβαστες λειτουργίες SofI2C στο max30102.cpp από τις αντίστοιχες κλήσεις βιβλιοθήκης Wire. Ο κώδικας συντάχθηκε καλά στο Arduino IDE v1.8.5 και έτρεξε στο M0 χωρίς κανένα σφάλμα. Τα καθαρά αποτελέσματα, ωστόσο, ήταν απογοητευτικά. Στο βήμα Εισαγωγής έχω ήδη δείξει πολύ υψηλή διακύμανση τόσο του HR όσο και του SpO2Το Φυσικά, κάποιος μπορεί να ισχυριστεί ότι έχω κάνει κάτι λάθος και αυτή ήταν η αρχική μου σκέψη. Ωστόσο, στο εκπαιδευτικό βίντεο της MAXIM, μπορείτε επίσης να παρατηρήσετε την άγρια περιστροφή των τιμών HR που εμφανίζονται στην οθόνη. Επιπλέον, τα σχόλια κάτω από το βίντεο επιβεβαιώνουν ότι και άλλοι έχουν παρατηρήσει παρόμοιο φαινόμενο.

Για να κάνω μια σύντομη ιστορία, μετά από κάποιους πειραματισμούς διαπίστωσα ότι ο αισθητήρας λειτουργεί κανονικά και μια εναλλακτική μέθοδος επεξεργασίας ψηφιακού σήματος έχει ως αποτέλεσμα πολύ καλύτερη σταθερότητα. Αυτή η νέα μέθοδος, που υποδεικνύεται με "RF", περιγράφεται στα επόμενα βήματα.

Βήμα 3: Προεπεξεργασία σημάτων

Προεπεξεργασία σήματος
Προεπεξεργασία σήματος
Προεπεξεργασία σήματος
Προεπεξεργασία σήματος
Προεπεξεργασία σήματος
Προεπεξεργασία σήματος
Προεπεξεργασία σήματος
Προεπεξεργασία σήματος

Στην εφαρμογή μας, το ακατέργαστο σήμα συλλέγεται με ρυθμό 25 Hz (ίδιο με αυτό του MAXIM) για πλήρη 4 δευτερόλεπτα (το λογισμικό της MAXIM συλλέγει μόνο 1 δευτερόλεπτο), με αποτέλεσμα 100 ψηφιοποιημένα χρονικά σημεία ανά τελικό σημείο δεδομένων. Κάθε ακολουθία 100 σημείων πρέπει να έχει προεπεξεργασθεί με τον ακόλουθο τρόπο:

  1. Κεντράρισμα μέσου όρου (γνωστός και ως «αφαίρεση του εξαρτήματος DC» σε ηλεκτρολόγους μηχανικούς). Τα ακατέργαστα δεδομένα που προέρχονται από τον αισθητήρα είναι μια χρονική σειρά ακεραίων στο 105 εύρος. Το χρήσιμο σήμα, ωστόσο, είναι μόνο ένα μέρος του φωτός που αντανακλάται από το αρτηριακό αίμα, το οποίο ποικίλλει μόνο με τη σειρά 102 - πρώτη φιγούρα. Για ουσιαστική επεξεργασία σήματος, είναι συνεπώς επιθυμητό να αφαιρείται ο μέσος όρος από κάθε σημείο σειράς. Αυτό το μέρος δεν διαφέρει από αυτό που κάνει ήδη το λογισμικό MAXIM. Αυτό που διαφέρει, ωστόσο, είναι το πρόσθετο μέσο κεντράρισμα των ίδιων των δεικτών χρόνου. Με άλλα λόγια, αντί των δεικτών σειράς με αριθμούς από 0 έως 99, οι νέοι δείκτες είναι πλέον αριθμοί -49,5, -48,5,…, 49,5. Μπορεί στην αρχή να φαίνεται περίεργο, αλλά χάρη σε αυτή τη διαδικασία το "κέντρο βάρους" της καμπύλης σήματος συμπίπτει με την προέλευση του συστήματος συντεταγμένων (δεύτερο σχήμα). Αυτό το γεγονός γίνεται αρκετά χρήσιμο στο επόμενο βήμα.
  2. Βασική ισοπέδωση. Μια άλλη ματιά στις κυματομορφές που εμφανίζονται στο Βήμα 2 απεικονίζει ότι η βασική γραμμή των σημάτων πραγματικής οξυμετρίας απέχει πολύ από το να είναι οριζόντια επίπεδη, αλλά ποικίλλει σε διαφορετικές κλίσεις. Το τρίτο σχήμα δείχνει ένα μέσο κεντραρισμένο σήμα IR (μπλε καμπύλη) και τη βασική του γραμμή (μπλε ευθεία γραμμή). Σε αυτή την περίπτωση, η κλίση της βάσης είναι αρνητική. Η μέθοδος επεξεργασίας σήματος που περιγράφεται προηγουμένως απαιτεί την αρχική γραμμή να είναι οριζόντια. Αυτό μπορεί να επιτευχθεί αφαιρώντας απλώς τη βασική γραμμή από το μέσο κεντροκεντρικό σήμα. Χάρη στο μέσο-κεντράρισμα και των συντεταγμένων Y και X, το σημείο αναφοράς της γραμμής αναφοράς είναι μηδέν και η εξίσωση κλίσης του είναι ιδιαίτερα απλή, όπως φαίνεται στο τέταρτο σχήμα. Το σήμα ισοπέδωσης βάσης εμφανίζεται με πορτοκαλί καμπύλη στο τρίτο σχήμα.

Έτσι, το προεπεξεργασμένο σήμα είναι έτοιμο για το επόμενο βήμα.

Βήμα 4: The Workhorse: Autocorrelation Function

The Workhorse: Autocorrelation Function
The Workhorse: Autocorrelation Function
The Workhorse: Autocorrelation Function
The Workhorse: Autocorrelation Function
The Workhorse: Autocorrelation Function
The Workhorse: Autocorrelation Function

Επιστρέφοντας στο συνηθισμένο ευρετήριο 1,…, n, το πρώτο σχήμα δείχνει τον ορισμό της συνάρτησης αυτοσυσχέτισης rΜ - μια ποσότητα που βρέθηκε πολύ χρήσιμη για τον εντοπισμό της περιοδικότητας του σήματος καθώς και της ποιότητας. Είναι απλά ένα κανονικοποιημένο κλιμακωτό προϊόν της χρονικής σειράς του σήματος με το ίδιο να μετατοπίζεται κατά υστέρηση m. Στην εφαρμογή μας, όμως, είναι βολικό να κλιμακώσουμε κάθε τιμή αυτοσυσχέτισης ως προς την τιμή της σε υστέρηση = 0, δηλαδή, να χρησιμοποιήσουμε σχετική αυτοσυσχέτιση που ορίζεται από το rΜ / r0.

Το γράφημα της σχετικής αυτοσυσχέτισης ενός τυπικού σήματος IR καλής ποιότητας φαίνεται στο δεύτερο σχήμα. Όπως ήταν αναμενόμενο, η τιμή της σε υστέρηση = 0 είναι στο παγκόσμιο μέγιστο ίσο με 1. Το επόμενο (τοπικό) μέγιστο εμφανίζεται σε υστέρηση = 23 και ισούται με 0,79. Η παρουσία τοπικών ελαχίστων και μεγίστων στο διάγραμμα αυτοσυσχέτισης είναι εύκολα κατανοητή: καθώς το σήμα μετατοπίζεται προς τα δεξιά, οι κορυφές του παρεμβαίνουν καταστροφικά μεταξύ τους στην αρχή, αλλά σε κάποιο σημείο η παρέμβαση γίνεται εποικοδομητική και επιτυγχάνει μέγιστη υστέρηση ίση με τον μέσο όρο περίοδο του σήματος.

Η τελευταία φράση είναι ζωτικής σημασίας: για να προσδιοριστεί η μέση χρονική περίοδος μεταξύ των κορυφών, από την οποία μπορεί κανείς να υπολογίσει τη συχνότητα του σήματος (δηλαδή, τον καρδιακό ρυθμό) αρκεί να βρεθεί το πρώτο τοπικό μέγιστο της συνάρτησης αυτοσυσχέτισης! Από προεπιλογή, το MAX30102 δειγματίζει αναλογική είσοδο με ρυθμό 25 πόντων ανά δευτερόλεπτο, επομένως σε δεδομένο m η περίοδος σε δευτερόλεπτα είναι ίση με m / 25. Αυτό οδηγεί σε καρδιακό ρυθμό που εκφράζεται σε παλμούς ανά λεπτό (σ.α.λ.) με:

HR = 60*25 / m = 1500 / m

Φυσικά, δεν είναι απαραίτητο να κάνουμε ακριβούς υπολογισμούς του rΜ σε όλες τις τιμές υστέρησης. Ο αλγόριθμός μας κάνει την πρώτη εικασία του καρδιακού ρυθμού = 60 σ.α.λ., που αντιστοιχεί σε m = 25. Η συνάρτηση αυτόματης συσχέτισης αξιολογείται σε εκείνο το σημείο και σε σύγκριση με την τιμή στον αριστερό της γείτονα, m = 24. Εάν η τιμή των γειτόνων είναι υψηλότερη, τότε η πορεία συνεχίζεται προς τα αριστερά μέχρι το rm-1 <rΜ Το Έτσι καθορισμένο τελικό m επιστρέφεται στη συνέχεια ως υστέρηση στο μέγιστο. Η επόμενη επανάληψη ξεκινά από αυτήν την τιμή αντί για 25 και όλη η διαδικασία επαναλαμβάνεται. Εάν ο πρώτος αριστερός γείτονας είναι χαμηλότερος, τότε οι παραπάνω πορείες ρουτίνας υστερούν προς τα δεξιά με παρόμοιο τρόπο. Τις περισσότερες φορές, η καθυστέρηση στο μέγιστο απαιτεί λίγες μόνο αξιολογήσεις της λειτουργίας αυτοσυσχέτισης. Επιπλέον, ως περιοριστικές τιμές χρησιμοποιούνται μέγιστες και ελάχιστες αποδεκτές καθυστερήσεις (που αντιστοιχούν σε ελάχιστο και μέγιστο καρδιακό ρυθμό, αντίστοιχα).

Τα παραπάνω λειτουργούν πολύ καλά για σήματα καλής ποιότητας, αλλά ο πραγματικός κόσμος απέχει πολύ από τον ιδανικό. Ορισμένα σήματα βγαίνουν παραμορφωμένα, κυρίως λόγω τεχνουργημάτων κίνησης. Ένα τέτοιο σήμα φαίνεται στο τρίτο σχήμα. Η κακή περιοδικότητα αντανακλάται στο σχήμα της συνάρτησης αυτοσυσχέτισης καθώς και σε χαμηλή τιμή, 0,28, του πρώτου τοπικού μέγιστου στα m = 11. Συγκρίνετε τη με τη μέγιστη τιμή 0,79 που καθορίζεται για το σήμα καλής ποιότητας. Μαζί με τις οριακές τιμές καθυστέρησης, επομένως, η τιμή του rΜ / r0 στο μέγιστο είναι ένας καλός δείκτης της ποιότητας του σήματος και μπορεί να χρησιμοποιηθεί απαίτηση για υπέρβαση ορισμένου ορίου για το φιλτράρισμα των τεχνουργημάτων κίνησης. Τα γραφήματα "RF" που εμφανίζονται στις εισαγωγές προέκυψαν από ένα τέτοιο όριο ίσο με 0,25.

Βήμα 5: Προσδιορισμός κορεσμού οξυγόνου

Προσδιορισμός κορεσμού οξυγόνου
Προσδιορισμός κορεσμού οξυγόνου
Προσδιορισμός κορεσμού οξυγόνου
Προσδιορισμός κορεσμού οξυγόνου
Προσδιορισμός κορεσμού οξυγόνου
Προσδιορισμός κορεσμού οξυγόνου
Προσδιορισμός κορεσμού οξυγόνου
Προσδιορισμός κορεσμού οξυγόνου

Το προηγούμενο βήμα ήταν αρκετό για τον προσδιορισμό του καρδιακού ρυθμού. Το SpO2 απαιτεί περισσότερη δουλειά. Πρώτον, πρέπει να ληφθεί υπόψη το μέχρι τώρα παραμελημένο σήμα στο κόκκινο (R) κανάλι. Στη συνέχεια, υπολογίζεται η αναλογία κόκκινων προς υπέρυθρων σημάτων, Z = R/IR, αμφότερα που αντανακλώνται από το αρτηριακό αίμα. Το μέρος "αρτηριακό αίμα" είναι ζωτικής σημασίας, καθώς το μεγαλύτερο μέρος του φωτός αντανακλάται στην πραγματικότητα από τους ιστούς και το φλεβικό αίμα. Πώς να επιλέξετε μέρος του σήματος που αντιστοιχεί στο αρτηριακό αίμα; Λοιπόν, αυτό είναι το παλμικό συστατικό που ποικίλλει με κάθε καρδιακό παλμό. Με λόγια ηλεκτρολόγων μηχανικών, είναι το "τμήμα AC", ενώ το υπόλοιπο ανακλώμενο φως είναι το "τμήμα DC". Δεδομένου ότι οι απόλυτες εντάσεις του φωτός R και IR δεν είναι ανάλογες, ο λόγος Ζ υπολογίζεται από σχετικές εντάσεις, όπως φαίνεται στο πρώτο σχήμα. Όσον αφορά τις πραγματικά υπολογισμένες ποσότητες, χρησιμοποιώ το τετράγωνο ρίζας-μέσου (RMS) του σήματος μεσοκεντρικού, επιπέδου βάσης, y, στον ήδη γνωστό μέσο όρο του ακατέργαστου σήματος, <Y>. δείτε το δεύτερο σχήμα. Ο λόγος Ζ είναι μόνο το ήμισυ της εργασίας, ωστόσο. Η μη γραμμική απόκριση του αισθητήρα απαιτεί μια εμπειρική βαθμονόμηση μεταξύ του Z και του τελικού SpO2 αξίες. Πήρα την εξίσωση βαθμονόμησης από τον κωδικό MAXIM:

SpO2 = (-45,06*Ζ + 30,354)*Ζ + 94,845

Λάβετε υπόψη ότι αυτή η εξίσωση ισχύει μόνο για πίνακα σχεδιασμού MAX30102 που αγοράστηκε το 2017! Είναι πιθανό ότι η MAXIM μπορεί να επαναβαθμονομήσει τους αισθητήρες της σε μεταγενέστερη ημερομηνία.

Η παραπάνω διαδικασία εξακολουθεί να παράγει πολλά ψευδή SpO2 αναγνώσεις. Το κόκκινο κανάλι πάσχει από πολλά τεχνουργήματα, όπως το IR. Είναι λογικό να υποθέσουμε ότι και τα δύο σήματα πρέπει να συσχετίζονται έντονα. Στην πραγματικότητα, τα σήματα καλής ποιότητας, όπως το παράδειγμα στο τρίτο σχήμα, συσχετίζονται πολύ καλά. Ο συντελεστής συσχέτισης Pearson είναι σε αυτήν την περίπτωση τόσο υψηλός όσο 0,99. Αυτό δεν συμβαίνει πάντα, όπως φαίνεται στο τέταρτο σχήμα. Αν και το σήμα IR θα περάσει το φίλτρο ποιότητας καρδιακού ρυθμού με το r τουΜ / r0 = 0,76, το παραμορφωμένο σήμα R οδηγεί σε έναν κακό συντελεστή συσχέτισης μεταξύ των δύο ίσο με μόνο 0,42. Αυτή η παρατήρηση προσφέρει το δεύτερο ποιοτικό φίλτρο: με συντελεστή συσχέτισης μεταξύ καναλιών μεγαλύτερο από ένα ορισμένο όριο.

Οι δύο τελευταίοι αριθμοί απεικονίζουν το καθαρό αποτέλεσμα αυτού του ποιοτικού φιλτραρίσματος. Πρώτον, ο μετρημένος κορεσμός οξυγόνου απεικονίζεται με κατώφλι ποιότητας HR 0,25, αλλά χωρίς το SpO2 φίλτρο. Η επόμενη πλοκή προκύπτει από το φιλτράρισμα των κακών HR και SpO2 αποτελέσματα στο 0,5 rΜ / r0 και 0,8 κατώφλια συντελεστή συσχέτισης. Συνολικά, τα κακά σημεία δεδομένων που ανέρχονται στο 12% του συνόλου φιλτράρονται από το αυστηρότερο καθεστώς.

Στον κωδικό μας, ο συντελεστής συσχέτισης, cc, υπολογίζεται σύμφωνα με τον τύπο στο πέμπτο σχήμα, όπου το y αντιπροσωπεύει το σήμα μεσοκεντρωμένο, βασικό επίπεδο, ενώ r0 ορίστηκε στο προηγούμενο βήμα.

Βήμα 6: Ο πηγαίος κώδικας

Ο πηγαίος κώδικας C για αυτό το έργο, μορφοποιημένος για το Arduino IDE, είναι διαθέσιμος από τον λογαριασμό μας στο Github στον ακόλουθο σύνδεσμο:

github.com/aromring/MAX30102_by_RF

Η σελίδα Readme περιγράφει μεμονωμένα στοιχεία.

Θα ήθελα να αφιερώσω ένα λεπτό για να επαινέσω την Adafruit που έφτιαξε ένα τόσο εξαιρετικό προϊόν όπως το Adalogger με βάση το M0. Ο γρήγορος επεξεργαστής ARM Cortex M0 48 MHz, με πολλή μνήμη RAM, σίγουρα βοήθησε να γίνει αυτό το έργο βιώσιμο, ενώ ο απευθείας προσαρτημένος αναγνώστης καρτών SD (συν τη βιβλιοθήκη SD του Adafruit) αφαιρεί όλους τους πόνους του χομπίστη που σχετίζονται με την αποθήκευση μεγάλου όγκου δεδομένων σε πραγματικό χρόνο.

Συνιστάται: