Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

ECG-analyser aangedreven door Edge Impulse

Componenten en benodigdheden

Arduino Nano 33 BLE Sense
× 1
SparkFun Hartslagmeter met enkele kabel - AD8232
× 1
ElectroPeak 0.96" OLED 64x128 displaymodule
× 1

Benodigde gereedschappen en machines

Soldeerbout (algemeen)
Soldeerdraad, loodvrij
10 St. Jumper Wire Kit, 5 cm lang

Apps en online services

Edge Impulse Studio
MATLAB
Arduino IDE
Microsoft Visual Studio 2017

Over dit project

Plotselinge hartaanval en toename van het aantal dodelijke slachtoffers:groeiende bezorgdheid

In de afgelopen tien jaar was het aantal sterfgevallen door plotselinge hartaanvallen enorm toegenomen.

Vooral in ontwikkelingslanden als India veroorzaakt een gebrek aan medische middelen in plattelandsgebieden, afgezien van genetische en levensstijlen, de meeste dodelijke slachtoffers bij een hartaanval.

Technologische bijdrage om dit wereldwijde probleem op te lossen:

Ik heb aan een TinyML-applicatie, mogelijk gemaakt door Edge Impulse, gewerkt om een ​​mini-Diagnose ECG-analyseapparaat te ontwikkelen dat in een broekzak past en dat onafhankelijk van elkaar een diagnose kan stellen van hartaandoeningen zonder cloudconnectiviteit.

Presenteer ECG-analysatormachines op de markt en de kenmerken ervan

•Het huidige medische IoT-apparaat verzendt bulk-ECG-gegevens naar de mobiel/server en de analyse wordt gedaan in een krachtige processor/mobiele app

•Computergebaseerde applicatie die signalen van het ECG-apparaat ontvangt en de ECG-patronen analyseert

•Alle ECG-analyseapparaten zijn afhankelijk van internet of computers met een hoge verwerkingssnelheid/mobiele applicatie.

Dit kan dus worden samengevat in onderstaande grafiek;

Sleuteloplossing

•ECG Analyzer aangedreven door Edge Impulse analyseert de ECG-gegevens zonder enige afhankelijkheid van internet.

•Latentie is het laagst in vergelijking met IoT-apparaten

•Een TinyML-model van 15 kb Rom - ECG-analyse kan draaien op alle door TinyML ondersteunde microcontrollers.

•Het apparaat analyseert ECG-patronen en classificeert het in normaal, atriumfibrilleren en eerstegraads hartblok

Architectuur

De ECG-analysator omvat

1. ECG-meting met AD8232

2. Verschillende ECG-patronen voor hartaandoeningen simuleren

3. Nieuwe benadering om kwaliteitsdatasets te produceren

4. Het model trainen

5. Nauwkeurigheid modeltest en Integreren toepassingscode met geïmplementeerd bibliotheek

Weet over ECG-grafiek

Voordat we verder gaan met het technische werk, zullen we eerst enkele basisprincipes van de ECG-grafiek doornemen.

De ECG-grafiek werd opgesplitst in 5 golven - P-, Q-, R-, S- en T-golven.

Atriale fibrillatie

Eerste graad hartblok

Laten we de ECG-analysator bouwen

1. ECG-meting met AD8232

Sluit de ECG-sensor AD8232 aan op de Arduino Nano 33 BLE sense volgens het onderstaande aansluitschema.

Flash de onderstaande code en druk vervolgens op "Ctrl+Shift+L" om de grafische streaminggegevens te visualiseren.

void setup() {
// initialiseer de seriële communicatie:
Serial.begin(115200);
pinMode(2, INPUT); // Setup voor detectie van afleidingen LO +
pinMode (3, INPUT); // Setup voor detectie van afleidingen LO -

}

void loop() {

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

// stuur de waarde van analoge ingang 0:
Serial.println(analogRead(A0));
}
//Wacht even om te voorkomen dat seriële gegevens verzadigen
delay(5);
}

1.1 Plaatsing van ECG-elektroden

De ECG-elektroden worden in RA, LA en LL geplaatst zoals vermeld in het bovenstaande diagram en sluit de aansluiting aan op de AD8232-sensor op de ECG-analysator.

2. Verschillende ECG-patronen simuleren met behulp van Matlab-signaalbouwer

Stap 2.1 :Sla de normale ECG-gegevens op in Excel

Kopieer en sla eerst de seriële monitorgegevens op in het Excel-bestand zoals hieronder sjabloon. De ECG-waarde moet in de tweede kolom onder 'Y' staan. De eerste kolom is tijdreeksen. het moet worden verhoogd als ( * 0.005) 5ms.

Stap 2.2 :Signaalbouwer in Matlab

Maak een nieuw Simulink-model in Matlab

Typ vervolgens 'signaalbouwer' in de werkruimte en selecteer deze. Voeg ook in

de 'scope' om deze aan te sluiten op de signaalbouwer. Raadpleeg de onderstaande schermafbeelding.

Om de opgeslagen Excel-gegevens te laden, opent u de signaalbouwer en selecteert u de optie 'importeren uit bestand'.

Selecteer de genoemde opties om de gegevens te importeren.

Bevestig vervolgens de selectie en importeer zonder het model op te slaan. omdat we nog wat meer stappen nodig hebben.

2.3 : ECG-gegevensvisualisatie in signaalbouwer

Een ECG-gegevens van 60 seconden zien er zo uit in de weergave van de signaalbouwer. Voor handmatige bewerking, zoom in op gegevens van 5 seconden en doe 'slepen' om de ECG-golf te bewerken.

Wanneer u na het zoomen de muisaanwijzer dicht bij de ECG-golf plaatst, kunt u alle punten in de ECG selecteren en deze slepen volgens uw toepassingsvereisten.

2.4 :P-R-intervalgegevens bewerken in Signaalbuilder voor AV Block 1 Case

Ik sleep de P-golf handmatig naar beneden en verschuif de P-golf veel voor de R-golf, zodat hetP-R-interval groter is dan 200 ms.

Herhaal deze stap in een andere tijdlijn in de gegevens van de signaalbouwer.

Exporteer de gegevens na het bewerken naar het mat-bestand. je kunt deze optie vinden in signaalbuilder. Zodra het mat-bestand is opgeslagen, volgt u alstublieft de onderstaande stappen.

Te volgen stappen --> Dubbelklik eerst op het matbestand en dubbelklik op de 1x1 gegevensset --> u kunt de gewijzigde gegevens zien onder Gegevens:1.

Kopieer en plak de gegevens in een nieuw Excel-bestand.

Stap2.5:Exporteer de Excel-gegevens naar Array

Ik hebben een a.m-script geschreven dat de Excel-gegevens naar een array kan converteren.

Voer dit script uit in Matlab, vervang voordat u begint de ExcelFilename door uw lokaal opgeslagen bestandsnaam en ExcelSheetName in een overeenkomstige bladnaam.

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

ECGExtract=(data(1:end,1)); %%Column A data

fid=fopen('test.txt','wt');%opening met de t vlag converteert automatisch \n naar \r\n op Windows
fprintf(fid,'{');
FormatSpec=[repmat('%i ',1,size(ECGExtract,2)) ','];%of had dat in plaats daarvan \r\n moeten zijn?
fprintf(fid,FormatSpec, ECGExtract);
fprintf(fid,'}')
fclose(fid);

Het tekstbestand wordt gegenereerd in de huidige maplocatie.

Kopieer de array-inhoud en plak deze in de ECGAnalyzer.c-code voor het simuleren van atriale fibrillatie en eerstegraads hartblok.

3. Nieuwe benadering om kwaliteitsdatasets te produceren

Als u naar ECG-gegevens kijkt, is het erg moeilijk om de verschillende hartaandoeningen te onderscheiden ECG-gegevens met normale ECG-gegevens in een kortere venstertijd (voorbeeld:3 seconden)

Toen ik een model train met alleen gefilterde ECG-gegevens voor atriale fibrillatie, normaal en eerstegraads hartblok, was de nauwkeurigheid minder dan 23%. De reden was in het kortere venster dat het model het verschil niet kan onderscheiden.

Als ik voor een langere venstertijd ga, is de verwerkingstijd en het piek-RAM-gebruik behoorlijk toegenomen. Zelfs Er was geen nauwkeurigheid.

Achtergrond van nieuwe benadering:

Wanneer een arts of getraind persoon probeert de ECG-grafiek te analyseren. Ze tellen de kleine vakjes tussen R tot R-golf, P tot R-interval en noteren de tellingen in de grafiek of onthouden deze voor berekening.

Ik heb afzonderlijke golfvormen gemaakt van gefilterde ECG-gegevens.

Nieuwe golfvormen:

  • RR-interval
  • PR-interval

Gegenereerde datasets voor normaal ECG gegevens :

De gedecodeerde RR-interval- en PR-intervalgegevens zijn altijd 100 en 50 voor normale ECG-gegevens.

Gegenereerde datasets voor atriale fibrillatie-ECG-gegevens:

Wanneer dan ook er is een afwijking tussen het vorige R-R-interval en het huidige R-R-interval, R-R-interval gegevens worden verwijderd naar -100 voor één cyclus.

Gegenereerde datasets voor eerstegraads hartblok-ECG Gegevens:

Wanneer dan ook het P tot R-interval overschrijdt 200 ms, dan worden de PR-intervalgegevens verlaagd naar -50 voor één cyclus.

Deze aanpak verbeterde de nauwkeurigheid van mijn model tot meer dan 90%.

4. Het model trainen in Edge Impulse

Voordat we beginnen met Edge Impulse-training ML, moeten we enkele parameters in het bibliotheekbestand configureren voor simulatie en realtime ECG-sensormeting.

stap4.1 :configureer de SIMULATIE op 0, als de data-acquisitie afkomstig was van realtime ECG-sensormeting

of

Configureer de SIMULATIE op 1, als de data-acquisitie afkomstig was van gesimuleerde ECG-gegevens voor atriale fibrillatie en eerstegraads hartblok (gevolgde Matlab-sessies).

Stap4.2:commentaar toevoegen/verwijderen van de vereiste gegevens buffer voor simulatie

Stap4.3 :Data-acquisitie

Verzamel de ECG-gegevens onder drie verschillende labels:normaal, atriale fibrillatie en eerstegraads hartblok

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

en selecteer de frequentie als 202

$ edge-impulse-daemon --frequency 202 

Stap4.4:Impuls creëren

In maak een impulssectie, de venstergrootte is 3000 ms en de venstertoename is 2999 ms, selecteer de k-means anomaliedetectie

Stap 4.5:Spectrale kenmerken

In een spectrale functie, selecteer het filtertype als Geen.

Stap 4.6:NN-classificatie:

Ik hebben 40 aantal trainingscycli en leersnelheid ingesteld op 0,005. Ik heb een nauwkeurigheid van 92,9.

en voor anomaliedetectie heb ik PR-interval RMS en RR-interval RMS geselecteerd.

5. Nauwkeurigheid en integratie van modeltests

De nauwkeurigheid van een modeltest was ongeveer 97% nauwkeurig.

5.1 Implementatie:

selecteer Arduino als implementatie;

Voeg het gedownloade EI-implementatiebestand toe aan de Arduino-bibliotheek

Opmerking: Voeg ook de ECG_Analyzer-bibliotheek van de GitHub-link toe aan de Arduino-bibliotheek

Dit helpt om mijn ECG-decoderingsalgoritmecode te integreren om te integreren met het door EI gegenereerde model.

5.2 Applicatiecode integreren in de door de kern gegenereerde EI-code

Ik hebben de applicatiecode samengevoegd in EI geïmplementeerd "nano_ble33_sense_accelerometer_continuous " en opgeslagen als ECGAnalyzer.ino.

Het is beschikbaar in de bijgevoegde GitHub-link. Flash de code met SIMULATIE als 0 in ECG_Analyzer.c in apparaat.

Hardware:

Sluit aan volgens het fritzing-diagram:

Montage :

Eindproduct:

Hier het eindproduct en het nauwkeurigheidsniveau in testgegevens!!!

Credits:

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

Code

https://github.com/Manivannan-maker/ECGAnalyzer
unzip de ECGAnalyzer.zipCode naar Flash:EI_Deployed_Library\examples\ECGAnalyzer\ECGAnalyzer.inoLibrary om simulatie te bewerken :ECGAnalyzer_lib\ecg_analyzer.cMatlab script en signalbuilder model:script om te draaien in matlab --> Matlab_Slabignalcon\Excel2. signalbuilder.slxhttps://github.com/Manivannan-maker/ECGAnalyzer

Schema's

Sluit aan volgens het diagram ecgdefault_SjMMcgW8jY.fzz

Productieproces

  1. Tiara
  2. Prikkeldraad
  3. Toilet Tracker (Powered by Walabot)
  4. reTerminal Machine Learning-demo's (Edge Impulse en Arm NN)
  5. Speelgoedtruck aangedreven door Raspberry Pi
  6. MOSMusic
  7. 6 soorten organisaties om de edge computing-revolutie te leiden
  8. Zeshoekige gaasmachine
  9. Inleiding tot draadsnijden
  10. Wat is een CNC-draadsnede?
  11. De mythische EDM-snijder