Analyseur ECG alimenté par Edge Impulse
Composants et fournitures
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Outils et machines nécessaires
| ||||
| ||||
|
Applications et services en ligne
| ||||
| ||||
| ||||
|
À propos de ce projet
Crise cardiaque soudaine et augmentation de la mortalité :préoccupation croissante
Au cours de la dernière décennie, le nombre de décès soudains par crise cardiaque a considérablement augmenté.
Particulièrement dans un pays en développement comme l'Inde, en dehors des modes de vie génétiques et de vie, le manque de ressources médicales dans les zones rurales est à l'origine de la plupart des décès par crise cardiaque.
Contribution technologique pour résoudre ce problème mondial :
J'ai travaillé sur une application TinyML optimisée par Edge Impulse pour développer un mini-analyseur ECG de diagnostic qui peut tenir dans une poche et qui peut diagnostiquer les maladies cardiaques de manière indépendante sans connectivité cloud.
Présenter les machines d'analyseur d'ECG sur le marché et ses fonctionnalités
• L'appareil médical IoT actuel envoie des données ECG en masse au mobile/serveur et l'analyse est effectuée dans une application mobile/processeur élevée
• Application informatique qui reçoit les signaux de l'appareil ECG et analyse les schémas ECG
• Tous les appareils d'analyse ECG dépendent d'Internet ou d'ordinateurs à traitement élevé/d'une application mobile.
Cela peut donc être résumé dans le tableau ci-dessous ;
Solution clé
• L'analyseur ECG alimenté par Edge Impulse analysera les données ECG sans aucune dépendance à Internet.
• La latence est la plus faible par rapport aux appareils IoT
• Un modèle TinyML d'analyse d'ECG de 15 Ko Rom peut s'exécuter sur n'importe quel microcontrôleur pris en charge par TinyML.
• L'appareil analysera les schémas ECG et les classera en bloc cardiaque normal, fibrillation auriculaire et du premier degré
Architecture
L'analyseur ECG implique
1. Lecture ECG avec AD8232
2. Simulation de différents schémas ECG de maladies cardiaques
3. Nouvelle approche pour produire des ensembles de données de qualité
4. Former le modèle
5. Précision du test du modèle et Intégrer code d'application avec déployé bibliothèque
Connaître le graphique ECG
Avant de procéder au travail technique, d'abord passera par quelques bases du graphique ECG.
Le graphique ECG a été divisé en 5 ondes - ondes P, Q, R, S et T.
Fibrillation auriculaire
Bloc cardiaque du premier degré
Construisons l'analyseur ECG
1. Lecture ECG à l'aide de l'AD8232
Connectez le capteur ECG AD8232 au sens Arduino Nano 33 BLE selon le schéma de connexion ci-dessous.
Flashez le code ci-dessous, puis appuyez sur "Ctrl+Maj+L" pour visualiser les données de streaming graphiques.
void setup() {
// initialiser la communication série :
Serial.begin(115200);
pinMode(2, INPUT); // Configuration pour la détection de dérivation LO +
pinMode(3, INPUT); // Configuration pour la détection de dérivations LO -
}
boucle vide() {
if((digitalRead(2) ==1) ||(digitalRead(3) ==1)){
Serial.println('!');
}
else{
// envoyer la valeur de l'entrée analogique 0 :
Serial.println(analogRead(A0));
}
//Attendez un peu pour empêcher les données série de saturer
delay(5) ;
}
1.1 Placement des électrodes ECG
Les électrodes ECG sont placées dans RA, LA et LL comme mentionné dans le schéma ci-dessus et connectez la prise au capteur AD8232 sur l'analyseur ECG.
2.Simulation de différents modèles ECG à l'aide du générateur de signaux Matlab
Étape 2.1 :Enregistrer les données ECG normales dans Excel
Copiez et enregistrez d'abord les données du moniteur série dans le fichier Excel comme ci-dessous. La valeur ECG doit figurer dans la deuxième colonne sous « Y ». La première colonne est une série chronologique. il doit être incrémenté de ( * 0.005) 5ms.
Étape 2.2 :Générateur de signaux dans Matlab
Créer un nouveau modèle Simulink dans Matlab
Tapez ensuite « signal builder » dans l'espace de travail et sélectionnez-le. Insérez également
le « scope » pour le connecter au générateur de signaux. Veuillez vous référer à la capture d'écran ci-dessous.
Pour charger les données Excel enregistrées, ouvrez le générateur de signaux et sélectionnez l'option « Importer depuis un fichier ».
Veuillez sélectionner les options mentionnées pour importer les données.
Confirmez ensuite la sélection et importez sans enregistrer le modèle. car nous avons besoin de quelques étapes supplémentaires.
2.3 : Visualisation des données ECG dans le générateur de signaux
Un Les données ECG de 60 secondes ressembleront à ceci dans la vue du générateur de signaux. Pour une édition manuelle, veuillez effectuer un zoom pendant 5 secondes sur les données et le faire 'faire glisser' pour modifier l'onde ECG.
Après le zoom, lorsque vous placez le pointeur de la souris près de l'onde ECG, vous pouvez sélectionner n'importe quel point de l'ECG et le faire glisser selon les exigences de votre application.
2.4 :Modification des données d'intervalle P-R dans le générateur de signaux pour le cas du bloc AV 1
Je avoir manuellement fait glisser l'onde P vers le bas et décaler l'onde P bien avant l'onde R, de sorte que l'intervalle P-R dépasse 200 ms.
Répétez cette étape dans une chronologie différente dans les données du générateur de signaux.
Après l'édition, exportez les données dans le fichier mat. vous pouvez trouver cette option dans le générateur de signaux. Une fois le fichier de tapis enregistré, veuillez suivre les étapes ci-dessous.
Étapes à suivre --> Double-cliquez d'abord sur le fichier mat et double-cliquez sur l'ensemble de données 1x1 --> vous pouvez voir les données modifiées sous Data:1.
Copiez et collez les données dans le nouveau fichier Excel.
Étape 2.5 :Exportez les données Excel dans Array
Je ont écrit un script a.m qui peut convertir les données Excel en un tableau.
Exécutez ce script dans Matlab, avant de l'exécuter, remplacez ExcelFilename par votre nom de fichier enregistré local et ExcelSheetName dans un nom de feuille correspondant.
data=xlsread('ExcelFilename.xlsx','ExcelSheetName');
ECGExtract=(data(1:end,1)); %%Column A data
fid=fopen('test.txt','wt');%opening avec l'indicateur t convertit automatiquement \n en \r\n sous Windows
fprintf(fid,'{');
FormatSpec=[repmat('%i ',1,size(ECGExtract,2)) ','];%ou cela aurait-il dû être \r\n à la place ?
fprintf(fid,FormatSpec, ECGExtract);
fprintf(fid,'}')
fclose(fid);
Le fichier texte sera généré dans l'emplacement du répertoire actuel.
Copiez le contenu du tableau et collez-le dans le code ECGAnalyzer.c pour simuler la fibrillation auriculaire et le bloc cardiaque du premier degré.
3. Nouvelle approche pour produire des ensembles de données de qualité
Si vous regardez les données ECG, il est vraiment difficile de distinguer les données ECG des différentes conditions cardiaques avec les données ECG normales dans une fenêtre de temps plus courte (exemple :3 secondes)
Lorsque j'entraîne un modèle avec des données ECG filtrées uniquement pour la fibrillation auriculaire, les blocs cardiaques normaux et du premier degré, la précision était inférieure à 23 %. La raison en était que dans la fenêtre la plus courte, le modèle ne pouvait pas différencier la différence.
Si je choisis une fenêtre plus longue, le temps de traitement et l'utilisation maximale de la RAM ont beaucoup augmenté. Même Il n'y avait aucune précision.
Contexte de l'approche Novel :
Quand un médecin ou une personne qualifiée essaie d'analyser le graphique ECG, ils compteront les petites cases entre l'onde R à R, l'intervalle P à R et notent les comptes dans le graphique ou les mémorisent pour le calcul.
J'ai créé une forme d'onde distincte à partir des données ECG filtrées.
Nouvelles formes d'onde :
- Intervalle R-R
- Intervalle PR
Ensembles de données générés pour l'ECG normal données :
Le L'intervalle R-R décodé et les données d'intervalle PR sont toujours de 100 et 50 pour les données ECG normales.
Ensembles de données générés pour la fibrillation auriculaire - Données ECG :
Chaque fois il y a un écart entre l'intervalle R-R précédent et l'intervalle R-R actuel, intervalle R-R les données seront ramenées à -100 pour un cycle.
Ensembles de données générés pour le bloc cardiaque ECG du premier degré Données :
Chaque fois l'intervalle P à R dépasse 200 ms, les données de l'intervalle PR seront alors ramenées à -50 pour un cycle.
Cette approche a amélioré la précision de mon modèle à plus de 90 %.
4. Entraîner le modèle dans Edge Impulse
Avant d'entrer dans Edge Impulse Training ML, nous devons configurer certains paramètres dans le fichier de bibliothèque pour la simulation et la lecture du capteur ECG en temps réel.
étape 4.1 :configurer la SIMULATION à 0, si l'acquisition des données était à partir de la lecture du capteur ECG en temps réel
ou
Configurez la SIMULATION sur 1, si l'acquisition des données provenait de données ECG simulées pour la fibrillation auriculaire et le bloc cardiaque du premier degré (suivi des sessions Matlab).
Etape4.2 :Commentez/décommentez les données requises tampon pour la simulation
Étape 4.3 :Acquisition de données
Recueillez les données ECG sous trois étiquettes différentes :Normal, Fibrillation auriculaire et Bloc cardiaque du premier degré
https://docs.edgeimpulse.com/docs/arduino-nano-33-ble-sense
et sélectionnez la fréquence comme 202
$ edge-impulse-daemon --fréquence 202
Étape 4.4 :Créer une impulsion
Dans une section de création d'impulsion, la taille de la fenêtre est de 3000 ms et l'augmentation de la fenêtre est de 2999 ms, sélectionnez la détection d'anomalie k-means
Étape 4.5 :Fonctionnalités spectrales
Dans une caractéristique spectrale, sélectionnez le type de filtre Aucun.
Étape 4.6 :Classificateur NN :
Je ont fixé le nombre de cycles de formation et le taux d'apprentissage à 0,005. J'ai une précision de 92,9.
et pour la détection d'anomalies, j'ai sélectionné RMS d'intervalle PR et RMS d'intervalle RR.
5. Précision et intégration du test du modèle
Dans un modèle de test de précision, la précision est d'environ 97 %.
5.1 Déploiement :
sélectionner Arduino comme déploiement ;
Ajoutez le fichier déployé EI téléchargé à la bibliothèque Arduino
Remarque : Ajoutez également la bibliothèque ECG_Analyzer du lien GitHub à la bibliothèque Arduino
Cela permet d'intégrer mon code d'algorithme de décodage ECG pour l'intégrer au modèle généré par EI.
5.2 Intégration du code de l'application au code EI généré par le noyau
Je ont fusionné le code de l'application dans EI déployé "nano_ble33_sense_accelerometer_continuous " et l'a enregistré sous le nom ECGAnalyzer.ino.
Il est disponible dans le lien GitHub ci-joint. Flashez le code avec SIMULATION comme 0 dans ECG_Analyzer.c dans l'appareil.
Matériel :
Connectez-vous selon le schéma fritzing :
Assemblage :
Produit final :
Voici le produit final et le niveau de précision des données de test !!!
Crédits :
ECG :https://geekymedics.com/how-to-read-an-ecg/
Code
https://github.com/Manivannan-maker/ECGAnalyzer
décompressez le ECGAnalyzer.zipCode dans Flash:EI_Deployed_Library\examples\ECGAnalyzer\ECGAnalyzer.inoLibrary pour éditer la simulation :ECGAnalyzer_lib\ecg_analyzer.cMatlab script et signalbuilder model:script à exécuter dans matlab --> Matlab_Simulation\Excel2Simulation\Excel2Arrayconverter. signalbuilder.slxhttps://github.com/Manivannan-maker/ECGAnalyzerSchémas
Connectez-vous selon le schéma ecgdefault_SjMMcgW8jY.fzzProcessus de fabrication
- Diadème
- Fil barbelé
- Toilet Tracker (Powered by Walabot)
- Démos d'apprentissage machine reTerminal (Edge Impulse et Arm NN)
- Camion jouet alimenté par Raspberry Pi
- MOSMusique
- 6 types d'organisation pour mener la révolution de l'informatique de périphérie
- Machine à treillis métallique hexagonale
- Initiation à la coupe au fil