Анализатор ЭКГ на основе граничного импульса
Компоненты и расходные материалы
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Необходимые инструменты и машины
![]() |
| |||
![]() |
| |||
![]() |
|
Приложения и онлайн-сервисы
![]() |
| |||
![]() |
| |||
![]() |
| |||
![]() |
|
Об этом проекте
Внезапный сердечный приступ и рост смертности:растущее беспокойство
За последнее десятилетие резко увеличилось количество смертей от внезапных сердечных приступов.
В частности, в таких развивающихся странах, как Индия, помимо генетики и образа жизни, нехватка медицинских ресурсов в сельских районах является причиной большинства смертельных случаев от сердечного приступа.

Вклад технологий в решение этой глобальной проблемы:
Я работал над приложением TinyML на базе Edge Impulse, чтобы разработать устройство мини-диагностического анализатора ЭКГ, которое может поместиться в кармане и может самостоятельно диагностировать сердечные заболевания без подключения к облаку.
Существующие на рынке анализаторы ЭКГ и их особенности
• Настоящее медицинское устройство IoT отправляет объемные данные ЭКГ на мобильный / сервер, а анализ выполняется в высокопроизводительном / мобильном приложении
• Компьютерное приложение, которое принимает сигналы от устройства ЭКГ и анализирует модели ЭКГ
• Все устройства для анализа ЭКГ зависят от Интернета или компьютеров с высокой производительностью / мобильных приложений.
Таким образом, это можно резюмировать на диаграмме ниже;

Ключевое решение
• Анализатор ЭКГ на базе Edge Impulse будет анализировать данные ЭКГ независимо от Интернета.
• Задержка самая низкая по сравнению с устройствами Интернета вещей
• Модель TinyML для анализа ЭКГ объемом 15 Кбайт может работать на любых микроконтроллерах, поддерживающих TinyML.
• Устройство анализирует образцы ЭКГ и классифицирует их на нормальную, мерцательную аритмию и блокаду сердца первой степени
Архитектура
Анализатор ЭКГ включает
1. Считывание ЭКГ с помощью AD8232
2. Моделирование различных паттернов ЭКГ при сердечных заболеваниях
3. Новый подход к созданию качественных наборов данных
4. Обучение модели
5. Точность тестирования модели и Интеграция код приложения с развернутым библиотека

Знайте о графике ЭКГ
Прежде чем приступить к технической работе, сначала рассмотрим некоторые основы построения графика ЭКГ.
График ЭКГ был разделен на 5 волн - зубцы P, Q, R, S и T.

Мерцание предсердий

Блокада сердца первой степени

Давайте построим анализатор ЭКГ
1. Считывание ЭКГ с помощью AD8232
Подключите датчик ЭКГ AD8232 к датчику BLE Arduino Nano 33 в соответствии со схемой подключения ниже.
Запишите приведенный ниже код и нажмите «Ctrl + Shift + L», чтобы визуализировать графические данные потоковой передачи.
void setup () {
// инициализируем последовательную связь:
Serial.begin (115200);
pinMode (2, INPUT); // Настройка обнаружения отключения отведений LO +
pinMode (3, INPUT); // Настройка обнаружения отключения отведений LO -
}
void loop () {
if ((digitalRead (2) ==1) || (digitalRead (3) ==1)) {
Serial.println ('!');
}
else {
// отправляем значение аналогового входа 0:
Serial.println (analogRead (A0));
}
// Подождите, пока бит не перегрузит последовательные данные
delay (5);
}
1.1 Размещение электродов ЭКГ
Электроды ЭКГ размещаются в RA, LA и LL, как указано на схеме выше, и подключают разъем к датчику AD8232 на анализаторе ЭКГ.

2. Моделирование различных паттернов ЭКГ с помощью Matlab-signal builder
Шаг 2.1 : Сохраните обычные данные ЭКГ в Excel
Сначала скопируйте и сохраните данные последовательного монитора в файл Excel, как показано ниже. Значение ЭКГ должно быть во втором столбце под «Y». Первый столбец - это временной ряд. он должен увеличиваться до (* 0,005) 5 мс.

Шаг 2.2:построитель сигналов в Matlab
Создайте новую модель Simulink в Matlab

Затем введите «построитель сигналов» в рабочей области и выберите его. Также вставьте
«прицел», чтобы подключить его к построителю сигналов. См. Снимок экрана ниже.


Чтобы загрузить сохраненные данные Excel, откройте построитель сигналов и выберите опцию «Импорт из файла».

Выберите указанные параметры для импорта данных.

Затем подтвердите выбор и импортируйте без сохранения модели. так как нам нужно еще несколько шагов.
2.3 : Визуализация данных ЭКГ в построителе сигналов
А 60-секундные данные ЭКГ будут выглядеть следующим образом в представлении построителя сигналов. Для ручного редактирования увеличьте изображение на 5 секунд и выполните «перетащите» для редактирования волны ЭКГ.


После масштабирования, поместив указатель мыши рядом с волной ЭКГ, вы сможете выбрать любые точки на ЭКГ и перетащить их в соответствии с требованиями вашего приложения.

2.4 : Редактирование данных интервала P-R в Signal Builder для случая AV-блока 1
Я вручную перетащите зубец P вниз и сместите зубец P намного раньше, чем зубец R, так что интервал P-R превышает 200 мс .
Повторите этот шаг на другой временной шкале в данных построителя сигналов.

После редактирования экспортируйте данные в файл mat. вы можете найти эту опцию в построителе сигналов. После сохранения файла мата, пожалуйста, выполните следующие действия.

Действия, которые необходимо выполнить -> Сначала дважды щелкните файл mat и дважды щелкните набор данных 1x1 -> вы увидите измененные данные в разделе «Данные:1».
Скопируйте и вставьте данные в новый файл Excel.
Шаг2.5. Экспорт данных Excel в массив
Я написали сценарий AM, который может преобразовывать данные Excel в массив.
Запустите этот сценарий в Matlab, перед запуском замените ExcelFilename на локальное сохраненное имя файла и ExcelSheetName на соответствующее имя листа.
data =xlsread ('ExcelFilename.xlsx', 'ExcelSheetName');
ECGExtract =(data (1:end, 1)); %% Столбец A данные
fid =fopen ('test.txt', 'wt');%, открытие с флагом t автоматически преобразует \ n в \ r \ n в Windows
fprintf (fid, '{');
FormatSpec =[repmat ('% i', 1, size (ECGExtract, 2)) ','];% или вместо этого должно было быть \ r \ n?
fprintf (fid, FormatSpec, ECGExtract);
fprintf (fid, '}')
fclose (fid);
Текстовый файл будет создан в текущем местоположении каталога.

Скопируйте содержимое массива и вставьте его в код ECGAnalyzer.c для моделирования мерцательной аритмии и блокады сердца первой степени.

3. Новый подход к созданию качественных наборов данных
Если вы посмотрите на данные ЭКГ, действительно трудно отличить различные данные ЭКГ о состоянии сердца от нормальных данных ЭКГ за меньшее время окна (пример:3 секунды)

Когда я обучаю модель только с отфильтрованными данными ЭКГ для фибрилляции предсердий, нормальной и первой степени блокады сердца, точность составила менее 23% . Причина заключалась в более коротком окне, модель не могла различить разницу.
Если я использую более длительное время окна, время обработки и пиковое использование ОЗУ значительно увеличиваются. Даже не было точности.
Предыстория нового подхода:
Когда Врач или обученный человек попытаются проанализировать график ЭКГ. Они будут считать маленькие прямоугольники между зубцами R и R, интервалом P и R и записывать их на графике или запоминать их для расчета.

Я создал отдельные кривые из отфильтрованных данных ЭКГ.
Новые формы сигналов:
- Интервал R-R
- Интервал PR


Созданные наборы данных для нормальной ЭКГ данные:

декодированные данные интервала R-R и интервала PR всегда равны 100 и 50 для нормальных данных ЭКГ.
Созданные наборы данных для фибрилляции предсердий - данные ЭКГ:

Когда угодно есть отклонение между предыдущим интервалом R-R и текущим интервалом R-R, интервал R-R данные будут сброшены до -100 за один цикл.
Созданные наборы данных для ЭКГ-блокады сердца первой степени Данные :

Когда угодно если интервал от P до R превышает 200 мс, тогда данные об интервале PR будут сброшены до -50 за один цикл.
Этот подход повысил точность моей модели до более 90% .
4. Обучение модели в Edge Impulse
Прежде чем перейти к обучению машинному обучению Edge Impulse, нам необходимо настроить некоторые параметры в файле библиотеки для моделирования и считывания показаний датчика ЭКГ в реальном времени.
step4.1 :установите для МОДЕЛИРОВАНИЯ значение 0, если данные были получены из показаний датчика ЭКГ в реальном времени
или
Установите для МОДЕЛИРОВАНИЯ значение 1. Если данные были получены на основе данных моделирования ЭКГ для фибрилляции предсердий и блокады сердца первой степени (после сеансов Matlab).

Шаг4.2. Прокомментируйте / раскомментируйте требуемые данные буфер для моделирования

Шаг4.3 : Сбор данных
Соберите данные ЭКГ под тремя разными ярлыками:Нормальный, Фибрилляция предсердий и Блокада сердца первой степени

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

и выберите частоту 202
$ edge-impulse-daemon --frequency 202
Шаг4.4. Создайте импульс
В секция создания импульса, размер окна составляет 3000 мс, а увеличение окна - 2999 мс, выберите обнаружение аномалии k-средних

Шаг 4.5. Спектральные характеристики
В спектральных характеристик, выберите тип фильтра "Нет".

Шаг 4.6. Классификатор NN:
Я установили 40 циклов обучения и скорость обучения 0,005. У меня точность 92,9.

а для обнаружения аномалий я выбрал RMS интервала PR и RMS интервала RR.
5. Точность модельных испытаний и интеграция
По результатам модельных испытаний точность составила 97%.

5.1 Развертывание:
выберите Arduino как развертывание;

Добавьте загруженный развернутый файл EI в библиотеку Arduino

Примечание. Добавьте библиотеку ECG_Analyzer из ссылки GitHub также в библиотеку Arduino
Это помогает интегрировать мой код алгоритма декодирования ЭКГ для интеграции с моделью, созданной EI.
5.2 Интеграция кода приложения в основной код EI
Я объединили код приложения с развернутым EI " nano_ble33_sense_accelerometer_continuous "и сохранил его как ECGAnalyzer.ino.
Он доступен по прикрепленной ссылке на GitHub. Прошить код с SIMULATION как 0 в ECG_Analyzer.c в устройстве.

Оборудование:
Подключите согласно схеме фритзинга:


Сборка :


Конечный продукт:
Вот конечный продукт и уровень точности тестовых данных !!!


Кредиты:
ЭКГ:https://geekymedics.com/how-to-read-an-ecg/
Код
https://github.com/Manivannan-maker/ECGAnalyzer
разархивируйте файл ECGAnalyzer.zipCode во Flash:EI_Deployed_Library \ examples \ ECGAnalyzer \ ECGAnalyzer.inoLibrary для редактирования моделирования:ECGAnalyzer_lib \ ecg_analyzer.c Сценарий Matlab и модель signalbuilder:сценарий для запуска в matlab -> Excel_Simulation_Simulation> Matlab -> Matlab -> Matlab -> Matlab -> Matlab -> Matlab -> Matlab -> Matlab_Simulation> signalbuilder.slx https://github.com/Manivannan-maker/ECGAnalyzerСхема
Подключите согласно схеме ecgdefault_SjMMcgW8jY.fzz
Производственный процесс
- Тиара
- Колючая проволока
- Счетчик туалета (на платформе Walabot)
- Демонстрации машинного обучения reTerminal (Edge Impulse и Arm NN)
- Игрушечный грузовик на базе Raspberry Pi
- MOSMusic
- 6 типов организаций, которые возглавят революцию в области периферийных вычислений
- Шестиугольная машина для плетения проволочной сетки
- Введение в резку проволокой
- Что такое резка проволоки с ЧПУ?