ПРОГРАММНАЯ РЕАЛИЗАЦИЯ СИСТЕМЫ КОМПЬЮТЕРНОГО АНАЛИЗА ЭКГ С РАСШИРЕННЫМИ ВОЗМОЖНОСТЯМИ АВТОМАТИЗИРОВАННОГО ПОИСКА ХАРАКТЕРНЫХ УЧАСТКОВ
Aннотация
В статье рассматривается система компьютерного анализа ЭКГ и вопросы программной реализации этой системы. Особенностью системы является автоматическое распознавание особых точек ЭКГ и автоматизированный поиск характерных участков ЭКГ. При проектировании и реализации системы компьютерного анализа ЭКГ широко использовались конечные автоматы. Это позволило наглядно представить логику работы системы, избежать ошибок проектирования и ускорить процесс создания системы. Упомянутая система повышает достоверность расшифровки ЭКГ врачём-кардиологом с целью постановки диагноза и существенно сокращает время на выполнение этой процедуры.
Электрокардиография представляет собой недорогой, но достаточно информативный метод кардиологического исследования. Результатом электрокардиографии является электрокардиограмма (ЭКГ) - графическое представление разности потенциалов, возникающих в результате работы сердца.
В кардиологической практике широко используется компьютерный анализ ЭКГ, основной целью которого является освобождение врача от значительной части рутинной работы. При этом можно автоматизировать распознавание особых точек и участков ЭКГ. Также поддается автоматизации этап дальнейшего анализа выделенных участков ЭКГ. Существует много алгоритмов выделения особых точек ЭКГ и методик анализа ЭКГ [1].
Постановка диагноза не может быть полностью автоматизирована, окончательный диагноз ставит врач. Использование компьютерного анализа ЭКГ, повышает производительность врача, но и в этом случае объем информации, которую нужно проанализировать врачу для постановки диагноза остаются значительным.
Для повышения производительности врача авторским коллективом предложена система компьютерного анализа ЭКГ, в которой реализованы функции двух видов:
1. Функции выполнения аннотирования ЭКГ, назначение которых заключается в выполнении автоматического распознавания особых точек ЭКГ и присвоении каждой такой точке некоторого уникального кода.
2. Функции, реализующие расширенные возможности автоматизированного поиска характерных участков (линий) ЭКГ. Каждая линия состоит из участка ЭКГ начинающегося в аннотированной точке с заданным кодом, включая эту точку, и заканчивающегося в следующей аннотированной точке с заданным кодом, не включая эту точку.
В дальнейшем данная система будет дополняться функциями, реализующими различные методики анализа ЭКГ. Но, даже в существующем виде система значительно повышает производительность врача. Это достигается за счет качества пользовательского интерфейса рабочего места врача, качества аннотирования и возможностей поиска произвольных линий ЭКГ.
На данном этапе реализован прототип системы, обладающий следующий функциональностью:
1. Ввод данных ЭКГ из файлов в формате банка PhysioBank [2].
2. Просмотр сигнала ЭКГ на графике с возможностью выбора и просмотра отдельных участков (окон) ЭКГ.
3. Запоминание параметров выбранных окон и передвижение по ним.
4. Автоматическое аннотирование ЭКГ.
5. Перемещение по аннотированным точкам.
6. Перемещение по зубцам R.
7. Выбор начального кода аннотации и автоматический поиск линий ЭКГ.
8. Выбор линии и перемещение по выбранным линиям ЭКГ.
Рассмотрим некоторые аспекты программной реализации системы. Реализация системы выполнена в среде LabVIEW [3]. Такой выбор обусловлен тем, что LabVIEW обладает широкими возможностями по обработке сигналов и позволяет быстро создавать приложения. При аннотировании ЭКГ используются исходный код библиотеки, представленной в работе [4, 6].
Исходные данные программы представляются собой массив вещественных чисел D размера lenD. Элемнт массива D[i] содержит оцифрованное значение сигнала ЭКГ в i-ый момент времени (отсчет сигнала ЭКГ). Аннотация ЭКГ сохраняется в виде двух массивов AT и AS размера lenA. Элемент AT[j] содержит код аннотации присвоенный j-ой особой точке ЭКГ. Элемент AS[j] содержит номер отсчета этой особой точки.
В настоящее время система распознает 44 особых точки ЭКГ. С особыми точками ЭКГ связываются некоторые цепочки символов, раскрывающие смысловое содержание аннотации в этой точке. Каждая цепочка имеет уникальный код, поэтому можно считать, что с каждой особой точкой ЭКГ связан некоторый символ аннотации с данным кодом. Аннотации и соответствующие цепочки символов сведены в таблицу№1.
Таблица 1
Коды аннотации
Table 1
Annotations codes
№ | Цепочка | Аннотация | № | Код | Аннотация |
1. | NotQRS | Нет QRS комплекса | 23. | STCH | ST изменение |
2. | N | Нормальный ритм | 24. | PACESP | Блокада |
3. | LBBB | Блокада левой ножки пучка Гиса | 25. | T | Зубец T |
4. | RBBB | Блокада правой ножки пучка Гиса | 26. | RTM | Изменения ритма |
5. | ABERR | Ранняя предсердная экстрасистола | 27. | LEARN | Обучение |
6. | PVC | Желудочковая экстрасистола | 28. | FLWAV | Волны трепетание желудочков |
7. | FUSION | Слияние желудочкового и нормального ритма | 29. | VFON | Начало фибрилляции |
8. | NPC | Узловая экстрасистола | 30. | VFOFF | Конец фибрилляции |
9. | APC | Предсердная экстрасистола | 31. | AESC | Предсердный выскальзывающий импульс |
10. | SVPB | Преждевременная или эктопическая суправентрикулярная экстрасистола | 32. | SVESC | Суправентрикулярный выскальзывающий импульс |
11. | VESC | Желудочковый ритм | 33. | NAPC | Нет проведения зубца P |
12. | NESC | Узловой ритм | 34. | PFUSE | Переход в сунусовый ритм |
13. | PACE | Ритм | 35. | FLWAV | Волны трепетание желудочков |
14. | Q | Зубец Q | 36. | RONT | Экстрасистолия по типу R на Т |
15. | ARFCT | Изолированный QRS комплекс | 37. | (p | Начало зубца P |
16. | STCH | ST изменение | 38. | p) | Конец зубца P |
17. | TCH | Изменение волны Т | 39. | (t | Начало зубца T |
18. | SYSTOLE | Систола | 40. | t) | Конец зубца T |
19. | DIASTOLE | Диастола | 41. | ECT | Электрокардиостимулятор |
20. | MEASURE | Параметр аннотации | 42. | R | Зубец R |
21. | P | Зубец P | 43 | S | Зубец S |
22. | BBB | Левая или правая ножки пучка Гиса | 44. | RONT | Экстрасистолия по типу R на Т |
При проектировании системы широко использовались конечные автоматы. Такой подход обусловлен тем, что фактически аннотация ЭКГ представляют собой язык L=w, где w – алфавит, состоящий из 44 символов с кодами, которые могут быть присвоены особым точкам ЭКГ при выполнении автоматического аннотирования. Язык L относится к классу регулярных языков, а для формализации процессов обработки цепочек регулярного языка хорошо подходят конечные автоматы.
Проиллюстрируем использование конечных автоматов при проектировании функций, реализующих расширенные возможности автоматизированного поиска линий ЭКГ. Для хранения линий ЭКГ использовалась структура гнездового типа, представленная на рис.1. Линии ЭКГ сохраняются в массиве LT. На начало i-ой линии указывает i-ый элемент массива uLT размера numL+1, где numL – число линий. Таким образом, i-я линия ЭКГ состоит из аннотированных точек со следующими кодами: LT[uLT[i]],…,LT[uLT[i+1]-1], а размер массива LT равен uLT[numL+1]-1.
Рис.1. Структуры данных для хранения линий ЭКГ
Fig.1. Data structures for storing ECG lines
Формирование данной структуры осуществляет конечный автомат, представленный на рис.2 в виде диаграммы состояний UML [5].
Рис.2. Диаграмма состояний конечного автомата, формирующего структуру данных для хранения линий ЭКГ
Fig.2. The state diagram of a finite automaton, forming a data structure for storing ECG lines
Код аннотации начальной точки линии хранится в переменной cl. Текущая линия сохраняется в массиве L длины lenL. Также в автомате используются функции SearchL() и AddL(). Функция SearchL() осуществляет поиск линии L в структуре LT, uLT. Данная функция возвращает: 0 - линия аннотации не уникальна; 1 - линия аннотации уникальна и может быть добавлена в структуру LT, uLT; -1 - линия аннотации уникальна, но для ее добавления в структуру LT, uLT нет места в массиве LT; -2 - линия аннотации уникальна, но для ее добавления в структуру LT, uLT нет места в массиве uLT. Функция AddL() добавляет линию L в структуру LT, uLT. Также в автомате распознаются следующие ситуации: 0 - не найден начальный код линии аннотации; 1 - ошибок нет, линии аннотации выделены, структура LT, uLT сформирована; -3 - для массива L требуется больший размер.
На основе разработанного автомата создается функция. Все функции оформляются в виде dll. При этом используется язык Си и среда Microsoft Visual Studio. Всем возможным ситуациям нехватки памяти соответствуют уникальные коды, возвращаемые функциями. Функции вызываются из среды LabVIEW с помощью Call Library Function Node. После завершения работы функции анализируется возвращаемый код, и если возникла ошибка, связанная с нехваткой памяти, то в LabVIEW выделяется больше памяти и функция вызывается повторно. Для демонстрационной функции pr_mem10() такая схема проиллюстрирована на рис.3. Текст функции следующий:
int pr_mem10(int* arr,int *len) {
if (*len<10) return -1;
*len=10;
for(int i=0;i<*len;i++) arr[i]=i;
return 0; }
При первом вызове функции pr_mem10() возникает ошибка, т.к. входной массив состоит из 7 элементов, а требуется 10. Перед вторым вызовом функции размер массива увеличивается на 7 и ошибка не возникает. На выход выдается массив A1=(0,1,2,3,4,5,6,7,8,9,0,0,0,0). Далее в вызывающей программе на LabVIEW из этого массива удаляются лишние элементы, и получается массив A2=(0,1,2,3,4,5,6,7,8,9).
Рис.3. Функциональной панель LabVIEW, иллюстрирующая вызов внешней функции, в которой может возникнуть ошибка нехватки памяти
Fig. 3. The functional LabVIEW panel illustrating the call of external function in which the memory error may occur
Отметим, что размеры используемых данных известны на этапе выполнения программы или хорошо предсказуемы. Поэтому ситуации, связанные с нехваткой памяти, крайне редки. Использование же статических структур позволяет повысить скорость обработки данных и отказаться от механизмов Labview Memory Manager, что в свою очередь позволяет создать независимые от LabVIEW библиотеки внешних функций.
После того как все линии ЭКГ найдены, пользователю предоставляется возможность выбрать интересующую его линию. После осуществления данного выбора формируется список начальных отсчетов выбранной линии. Эти действия осуществляет автомат представленный на рис.4. Номер выбранной линии записан в переменной nL. Список начальных отсчетов хранится в массиве LS размера lenLS. В автомате распознаются следующие ситуации: 0 - линия аннотации с номером nL не существует; 1 - ошибок нет, массив LS сформирован; -4 - для массива LS требуется больший размер. На основе данного автомата создается соответствующая функция. Реализация и вызов данной функции осуществляется аналогично функции, рассмотренной выше.
После того, как список начальных отсчетов выбранной линии сформирован, пользователю предоставляется возможность перемещаться по данным отсчетам с целью поиска характерных участков ЭКГ и их анализа.
Рис.4. Диаграмма состояний конечного автомата, формирующего список начальных отсчетов выбранной линии
Fig. 4. The state diagram of a finite automaton, generating a list of initial samples of a selected line
Итак, мы рассмотрели два автомата, которые служат для организации поиска и просмотра линий ЭКГ. Данные автоматы использовались при проектировании средств автоматизированного поиска характерных участков ЭКГ. В рассматриваемой системе конечные автоматы также применялись при проектировании других функций, например, расчета изолинии ЭКГ, преобразования форматов исходных данных и др. Использование конечных автоматов при проектировании системы позволило наглядно представить логику работы системы, избежать ошибок проектирования и в целом ускорить процесс создания системы.
Анализ результатов тестирования прототипа системы компьютерного анализа ЭКГ с расширенными возможностями автоматизированного поиска характерных участков позволяет сделать вывод о том, что достоверность расшифровки ЭКГ врачём-кардиологом с целью постановки диагноза повышается при существенном сокращении времени на выполнение этой процедуры. Это достигается за счет хороших результатов автоматического распознавания особых точек ЭКГ и автоматизированных средств поиска линий ЭКГ.
Список литературы
1. Петров С.П., Епишина Е.В., Воронин В.В. Оценка алгоритмов распознавания образов для задач автоматического анализа электрокардиограмм // Евразийский Союз Ученых (ЕСУ). Ежемесячный научный журнал. 2014. № 8., С.27-29, Режим доступа URL: http://euroasia-science.ru/wp-content/uploads/2016/02/evro_8p8_6-169.pdf (дата обращения 20.03.2016).
2. PhysioBank Archive Index. Режим доступа: http://physionet.org/physiobank/database/ (дата обращения 20.03.2016).
3. National Instruments. Режим доступа URL: http://www.ni.com, (дата обращения 20.03.2016)
4. ECG Annotation C++ Library. Режим доступа URL: http://www.codeproject.com/Articles/20995/ECG-Annotation-C-Library, (дата обращения 20.03.2016)
5. Documents associated with Unified Modeling. Режим доступа URL: UML http://www.omg.org/spec/UML/2.5/, (дата обращения 20.03.2016).
6. Ефремова О.А., Камышникова Л.А., Никитин В.М., Железнова Е.А., Липунова Е.А., Анохин Д.А. Диагностика ишемической болезни сердца интелектуальной системой «АРМ-кардиолог» // Журнал «Человек и его здоровье». 2014. №1. С.69-75.