Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

EKG-Analysator mit Edge Impulse

Komponenten und Verbrauchsmaterialien

Arduino Nano 33 BLE Sense
× 1
SparkFun Ein-Elektroden-Herzfrequenzmesser - AD8232
× 1
ElectroPeak 0,96" OLED 64x128 Anzeigemodul
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)
Lötdraht, bleifrei
10 Stk. Jumper Wire Kit, 5 cm lang

Apps und Onlinedienste

Edge Impulse Studio
MATLAB
Arduino-IDE
Microsoft Visual Studio 2017

Über dieses Projekt

Plötzlicher Herzinfarkt und Zunahme der Sterblichkeit:Wachsende Besorgnis

In den letzten zehn Jahren haben die plötzlichen Herzinfarkt-Todesfälle enorm zugenommen.

Vor allem in Entwicklungsländern wie Indien verursacht der Mangel an medizinischen Ressourcen in ländlichen Gebieten, abgesehen von genetischen und Lebensstilen, die meisten Todesfälle bei Herzinfarkten.

Technologiebeitrag zur Lösung dieses globalen Problems:

Ich habe an einer TinyML-Anwendung mit Edge Impulse gearbeitet, um ein Mini-Diagnose-EKG-Analysegerät zu entwickeln, das in eine Tasche passt und Herzerkrankungen ohne Cloud-Konnektivität unabhängig diagnostizieren kann.

Präsentieren Sie die auf dem Markt befindlichen EKG-Analysegeräte und ihre Funktionen

•Das aktuelle medizinische IoT-Gerät sendet EKG-Massendaten an das Mobiltelefon/den Server und die Analyse erfolgt in einer leistungsstarken/mobilen App

•Computerbasierte Anwendung, die Signale vom EKG-Gerät empfängt und die EKG-Muster analysiert

•Alle EKG-Analysegeräte sind vom Internet oder Computern mit hoher Verarbeitungsleistung/Mobilanwendung abhängig.

Dies kann in der folgenden Tabelle zusammengefasst werden;

Schlüssellösung

•ECG Analyzer powered by Edge Impulse analysiert die EKG-Daten ohne Abhängigkeit vom Internet.

•Die Latenz ist im Vergleich zu IoT-Geräten am niedrigsten

•Ein 15Kb Rom - EKG-analysierendes TinyML-Modell kann auf jedem TinyML-unterstützten Mikrocontroller ausgeführt werden.

•Das Gerät analysiert EKG-Muster und klassifiziert in Normal, Vorhofflimmern und Herzblock ersten Grades

Architektur

Der EKG-Analysator beinhaltet

1. EKG-Messung mit AD8232

2. Simulation verschiedener EKG-Muster bei Herzerkrankungen

3. Neuer Ansatz zur Erstellung hochwertiger Datensätze

4. Training des Modells

5. Genauigkeit des Modelltests und Integrieren Anwendungscode mit bereitgestelltem Bibliothek

EKG-Grafik kennen

Bevor Sie mit den technischen Arbeiten fortfahren, werden zunächst einige Grundlagen der EKG-Grafik durchgegangen.

Das EKG-Diagramm wurde in 5 Wellen unterteilt - P-, Q-, R-, S- und T-Wellen.

Vorhofflimmern

Herzblock ersten Grades

Lassen Sie uns den EKG-Analysator bauen

1. EKG-Messung mit AD8232

Verbinden Sie den EKG-Sensor AD8232 mit dem Arduino Nano 33 BLE Sense gemäß dem folgenden Anschlussdiagramm.

Flashen Sie den folgenden Code und drücken Sie dann "Strg+Shift+L", um die grafischen Streaming-Daten anzuzeigen.

void setup() {
// Initialisieren der seriellen Kommunikation:
Serial.begin(115200);
pinMode(2, INPUT); // Setup für die Erkennung von Ableitungen LO +
pinMode (3, INPUT); // Setup für die Erkennung von Ableitungen LO -

}

void loop() {

if((digitalRead(2) ==1) ||(digitalRead(3) ==1)){
Serial.println('!');
}
else{

// Wert senden des Analogeingangs 0:
Serial.println(analogRead(A0));
}
//Warten Sie auf ein Bit, damit die seriellen Daten nicht gesättigt werden
delay(5);
}

1.1 Platzierung der EKG-Elektroden

Die EKG-Elektroden werden in RA, LA und LL wie in der obigen Abbildung beschrieben platziert und die Buchse mit dem AD8232-Sensor am EKG-Analysator verbunden.

2.Simulation verschiedener EKG-Muster mit Matlab-Signal Builder

Schritt 2.1 :Speichern Sie die normalen EKG-Daten in Excel

Kopieren und speichern Sie zuerst die seriellen Monitordaten in die Excel-Datei als untenstehende Vorlage. Der EKG-Wert sollte in der zweiten Spalte unter 'Y' stehen. Die erste Spalte enthält Zeitreihen. es sollte um ( * 0,005) 5 ms erhöht werden.

Schritt 2.2 :Signalgenerator in Matlab

Erstellen Sie ein neues Simulink-Modell in Matlab

Geben Sie dann 'Signal Builder' in den Arbeitsbereich ein und wählen Sie es aus. Auch einfügen

das 'Scope', um es mit dem Signalbuilder zu verbinden. Bitte beachten Sie den Screenshot unten.

Um die gespeicherten Excel-Daten zu laden, öffnen Sie den Signalgenerator und wählen Sie die Option "Aus Datei importieren".

Bitte wählen Sie die genannten Optionen aus, um die Daten zu importieren.

Bestätigen Sie anschließend die Auswahl und importieren Sie, ohne das Modell zu speichern. da müssen wir noch ein paar Schritte machen.

2.3 : EKG-Datenvisualisierung im Signalgenerator

A 60-Sekunden-EKG-Daten sehen in der Signal-Builder-Ansicht so aus. Zur manuellen Bearbeitung bitte für 5-Sekunden-Daten zoomen und "ziehen" um die EKG-Kurve zu bearbeiten.

Wenn Sie nach dem Zoomen den Mauszeiger in die Nähe der EKG-Kurve platzieren, können Sie beliebige Punkte im EKG auswählen und gemäß Ihren Anwendungsanforderungen ziehen.

2.4 :P-R-Intervalldaten im Signal Builder für AV-Block 1-Fall bearbeiten

Ich manuell die P-Welle nach unten ziehen und die P-Welle viel vor der R-Welle verschieben, sodass dasP-R-Intervall 200ms überschreitet.

Wiederholen Sie diesen Schritt in einer anderen Zeitleiste in den Signal-Builder-Daten.

Exportieren Sie die Daten nach der Bearbeitung in die Mattendatei. Sie finden diese Option im Signalbuilder. Sobald die Mattendatei gespeichert ist, befolgen Sie bitte die folgenden Schritte.

Zu befolgende Schritte --> Doppelklicken Sie zuerst auf die Mat-Datei und doppelklicken Sie auf den 1x1-Datensatz --> Sie können die geänderten Daten unter Daten:1 sehen.

Kopieren Sie die Daten und fügen Sie sie in eine neue Excel-Datei ein.

Schritt 2.5:Exportieren Sie die Excel-Daten in ein Array

Ich habe ein .m-Skript geschrieben, das die Excel-Daten in ein Array umwandeln kann.

Führen Sie dieses Skript in Matlab aus, bevor Sie es ausführen, ersetzen Sie ExcelFilename durch Ihren lokal gespeicherten Dateinamen und ExcelSheetName in einen entsprechenden Tabellennamen.

data=xlsread('ExcelFilename.xlsx','ExcelSheetName');

ECGExtract=(data(1:end,1)); %%Daten von Spalte A

fid=fopen('test.txt','wt');%Öffnen mit dem t-Flag konvertiert automatisch \n in \r\n unter Windows
fprintf(fid,'{');
FormatSpec=[repmat('%i ',1,size(ECGExtract,2)) ','];%oder hätte das stattdessen \r\n sein sollen?
fprintf(fid,FormatSpec, ECGExtract);
fprintf(fid,'}')
fclose(fid);

Die Textdatei wird am aktuellen Speicherort des Verzeichnisses generiert.

Kopieren Sie den Array-Inhalt und fügen Sie ihn in den ECGAnalyzer.c-Code zur Simulation von Vorhofflimmern und Herzblock ersten Grades ein.

3. Neuartiger Ansatz zur Erstellung hochwertiger Datensätze

Wenn Sie sich die EKG-Daten ansehen, ist es wirklich schwierig, die verschiedenen Herzerkrankungen EKG-Daten von normalen EKG-Daten in einem kürzeren Zeitfenster zu unterscheiden (Beispiel:3 Sekunden)

Wenn ich ein Modell allein mit gefilterten EKG-Daten für Vorhofflimmern, normalen Herzblock und Herzblock ersten Grades trainiere, war die Genauigkeit weniger als 23 % . Der Grund dafür war, dass das Modell im kürzeren Fenster den Unterschied nicht unterscheiden kann.

Wenn ich eine längere Fensterzeit wähle, wurden die Verarbeitungszeit und die maximale RAM-Auslastung erheblich erhöht. Sogar Es gab keine Genauigkeit.

Hintergrund des neuartigen Ansatzes:

Wann ein Arzt oder eine geschulte Person versuchen, das EKG-Diagramm zu analysieren. Sie werden die kleinen Kästchen zwischen R-R-Welle, P-R-Intervall zählen und die Zählungen in das Diagramm schreiben oder zur Berechnung speichern.

Ich habe aus gefilterten EKG-Daten separate Wellenformen erstellt.

Neue Wellenformen:

  • R-R-Intervall
  • PR-Intervall

Erzeugte Datensätze für normales EKG Daten:

Die decodierte R-R-Intervall- und PR-Intervalldaten sind immer 100 und 50 für normale EKG-Daten.

Erzeugte Datensätze für Vorhofflimmern- EKG-Daten:

Immer wenn es gibt eine Abweichung zwischen dem vorherigen R-R-Intervall und dem aktuellen R-R-Intervall, R-R-Intervall Daten werden auf -100 gesenkt für einen Zyklus.

Erzeugte Datensätze für Herzblock-EKG ersten Grades Daten:

Immer wenn das P-zu-R-Intervall 200 ms überschreitet, dann werden die PR-Intervalldaten auf -50 fallen gelassen für einen Zyklus.

Dieser Ansatz verbesserte meine Modellgenauigkeit auf mehr als 90 %.

4. Trainieren des Modells in Edge Impulse

Bevor wir in Edge Impulse Training ML einsteigen, müssen wir einige Parameter in der Bibliotheksdatei für die Simulation und die Echtzeit-EKG-Sensorablesung konfigurieren.

Schritt 4.1 :Konfigurieren Sie die SIMULATION auf 0, wenn die Datenerfassung von der Echtzeit-EKG-Sensormessung stammt

oder

Konfigurieren Sie die SIMULATION auf 1, wenn die Datenerfassung aus simulierten EKG-Daten für Vorhofflimmern und Herzblock ersten Grades (gefolgt von Matlab-Sitzungen) erfolgte.

Schritt 4.2 :Kommentieren/entkommentieren Sie die erforderlichen Daten Puffer für Simulation

Schritt 4.3 :Datenerfassung

Sammeln Sie die EKG-Daten unter drei verschiedenen Bezeichnungen:Normal, Vorhofflimmern und Herzblock ersten Grades

https://docs.edgeimpulse.com/docs/arduino-nano-33-ble-sense

und wählen Sie die Frequenz als 202

$ edge-impulse-daemon --frequency 202 

Schritt 4.4:Impulse erzeugen

In einen Impulsabschnitt erstellen, die Fenstergröße beträgt 3000 ms und die Fenstervergrößerung beträgt 2999 ms, wählen Sie die K-Means-Anomalieerkennung

Schritt 4.5:Spektralfunktionen

In a Spektraleigenschaften, wählen Sie den Filtertyp als Keine.

Schritt 4.6:NN-Klassifikator:

Ich haben die Anzahl der 40 Trainingszyklen und die Lernrate auf 0,005 festgelegt. Ich habe eine Genauigkeit von 92,9.

und für die Anomalieerkennung habe ich PR-Intervall RMS und RR-Intervall RMS ausgewählt.

5. Modelltestgenauigkeit &Integration

Die Genauigkeit eines Modelltests betrug etwa 97 %.

5.1 Bereitstellung:

auswählen Arduino als Bereitstellung;

Fügen Sie die heruntergeladene EI-implementierte Datei zur Arduino-Bibliothek hinzu

Hinweis: Fügen Sie die ECG_Analyzer-Bibliothek vom GitHub-Link auch zur Arduino-Bibliothek hinzu

Dies hilft, meinen EKG-Decodierungsalgorithmuscode zu integrieren, um ihn in das EI-generierte Modell zu integrieren.

5.2 Integrieren von Anwendungscode in den vom Kern generierten EI-Code

Ich haben den Anwendungscode in das bereitgestellte EI "nano_ble33_sense_accelerometer_continuous . zusammengeführt " und als ECGAnalyzer.ino gespeichert.

Es ist im beigefügten GitHub-Link verfügbar. Flashen Sie den Code mit SIMULATION als 0 in ECG_Analyzer.c im Gerät.

Hardware:

Verbinden Sie gemäß dem Fritzing-Diagramm:

Zusammenbau :

Endprodukt:

Hier das Endprodukt und die Genauigkeit der Testdaten!!!

Credits:

EKG:https://geekymedics.com/how-to-read-an-ecg/

Code

https://github.com/Manivannan-maker/ECGAnalyzer
Entpacken Sie die ECGAnalyzer.zipCode to Flash:EI_Deployed_Library\examples\ECGAnalyzer\ECGAnalyzer.inoLibrary to Edit simulation :ECGAnalyzer_lib\ecg_analyzer.cMatlab script und signalbuilder model:script zum Ausführen in Matlab --> Matlab_Simulation\Excel2Arrayconvert --> Matlab_Simulation\Excel2Arrayconvert signalbuilder.slxhttps://github.com/Manivannan-maker/ECGAnalyzer

Schaltpläne

Verbinden Sie sich gemäß dem Diagramm ecgdefault_SjMMcgW8jY.fzz

Herstellungsprozess

  1. Tiara
  2. Stacheldraht
  3. Toiletten-Tracker (Powered by Walabot)
  4. reTerminal Machine Learning Demos (Edge Impulse und Arm NN)
  5. Spielzeug-LKW mit Raspberry Pi
  6. MOSMusic
  7. Sechseckige Drahtgeflechtmaschine
  8. Einführung in das Drahtschneiden
  9. Was ist ein CNC-Drahtschnitt?
  10. Der mythische EDM-Cutter