Привет, Хабр!

Сегодня говорим про мониторинг жизненно важных показателей (ЖВП) человека. ЖВП — это метрики, по которым можно понять, всё ли в порядке с нашим организмом: температура тела, давление, дыхание, ну и наш сегодняшний герой — пульс.

Когда речь заходит о мониторинге сердечной активности, первое, что приходит в голову — это ЭКГ. Электрокардиография уже давно считается золотым стандартом в медицине. Однако при всех её достоинствах у ЭКГ хватает минусов: запись короткая, провода и датчики сковывают движения, есть риск раздражения и даже заражения при повреждении кожи, да и ощущения от процедуры так себе — в целом комфорт сомнительный.

Пора применять более современные методы. Речь идет о биорадиолокации (ссылка) — есть радар, направляя который  на человека мы ловим отражённые волны от его грудной клетки. Затем полученные данные прогоняем через нейросеть и получаем полноценную ЭКГ.

Такой подход не требует контакта с телом, не ограничивает подвижность пациента — а значит, уменьшает артефакты и шумы, которые бывают при съехавших датчиках.

Всю эту красоту реализовал на нашем родном ресурсе Engee. Так что, если тема зацепила, то все демки, которые проводились над этой темой, можно почитать тут и тут

Снова эти нейросети

Нейросети теперь везде  и медицина не исключение. Нейросети используются для синтеза белков, точной сегментации раковых опухолей на снимках МРТ, помогают улучшать качество речи людям с нарушениями и дефектами разного рода и множество иных вещей.

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

С каким данными мы работаем?

Чтобы биорадар мог выдавать ЭКГ, необходимо обучить входящую в него нейросеть для реконструкции I/Q эхо-сигнала, отражающегося от грудной клетки. Для этого необходимы эталонные и измеренные данные.

В качестве эталонных сигналов является ЭКГ, в качестве измеренных — радарные сигналы. Оба типа сигналов сняты с одного человека при подключении электродов и направленного излучения радара. Важно, чтобы сигналы отображали одинаковую фазу работы сердца, для этого оба прибора работают одновременно. После получения сигналов, данные были оцифрованы и синхронизированы.

О том, как происходил сбор данных, можно почитать тут.

Визуализируем данные, чтобы понять с чем имеем дело:

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

Начало работы — фильтрация данных

Первым делом обработаем сигналы. Начнем с ЭКГ. 

Сначала сделаем фильтрацию на низких частотах для удаления дрейфа. Для этого применяем фильтр ФВЧ с аппроксимацией Баттерворта 5 порядка, где частота среза 0.5 Гц.

Далее выполняем фильтрацию режекторным БИХ фильтром для очистки сигналов от шумов сети переменного тока на частоте 50 Гц.

После фильтрации сигнал выглядит так:

Фильтрации эхо-сигнала

За счёт разделения радарного сигнала на I и Q каналы такие системы надёжно ловят слабые колебания грудной стенки. Но встречается проблема разбалансировки амплитуды и фазы между каналами.

Сначала с радарного приёмника снимается сырой I/Q-сигнал. Далее выполняется калибровка. В пространстве I–Q точки образуют эллипс. По его центру, полуосям и углу поворота оцениваются параметры амплитудного и фазового дисбаланса, после производится их компенсация. Для калибровки применяется метод алгебраической оценки параметров эллипса.

В идеальном случае сигнал от радара должен давать круг в I–Q  плоскости, если цель двигается периодически.

Метод оценки эллипса

Оценка параметров эллипса основывается на методе наименьших квадратов. Нужно найти параметры эллипса, которые наилучшим образом аппроксимируют заданный набор точек. В результате рассчитываются координаты центра, длины полуосей и угол поворота эллипса относительно осей координат.

Нормализация и обработка I/Q-Сигнала

На этапе обработки эхо-сигнала крайне важна его нормализация. Это необходимо для переноса эллипса, описывающего амплитуду и фазу сигнала, в начало координат. Такой перенос упрощает последующие операции — поворот и масштабирование, необходимые для приведения эллипса к единичному кругу.

Ниже отображается сигнал на комплексной окружности до всех преобразований.

Сначала выполняется центрирование сигнала.

Q = \operatorname{Im}\{IQ\} - y_cI = \operatorname{Re}\{IQ\} - x_c

Затем координатная система поворачивается так, чтобы полуоси эллипса стали параллельны осям.

\begin{pmatrix} I' \\ Q' \end{pmatrix} = \begin{pmatrix} \cos(\theta) & \sin(\theta) \\ -\sin(\theta) & \cos(\theta) \end{pmatrix} \cdot \begin{pmatrix} I \\ Q \end{pmatrix}

После этого сигнал масштабируется.

I_{final} = \frac{I'}{a}Q_{final} = \frac{Q'}{b}

В идеальном состоянии нужно получить окружность одного радиуса. Но мы и так неплохо отмасштабировали и отцентрировали данные.

Выделение фазы и оценка перемещения

Из нормализованного сигнала извлекается фаза, которая связана с микродвижениями грудной клетки.

\varphi = \operatorname{arctg} \left( \frac{Q_{final}}{I_{final}} \right)

Далее фаза преобразуется в линейное смещение грудной клетки. При этом исключается постоянная составляющая, чтобы смещение на начальном этапе считалось нулевым.

R = \frac{\varphi}{4 \pi} \lambda - R_0

Такой подход позволяет отслеживать изменения положения, игнорируя абсолютную дальность до объекта.

Выделение жизненно важных показателей перед подачей в ИНС

После получения смещения нужно выделить такие показатели, как пульс и дыхание. Для этого используем фильтры, настроенные на тот диапазон частот, в котором находится тот или иной показатель.

Диапазон частот от 0.05 Гц до 0.5 Гц выбран для дыхания, так как частота дыхания у человека обычно находится в пределах 12–30 вдохов в минуту. Полосой от 1 Гц до 6 Гц выделяется пульсовой сигнал, отражающий сердечные сокращения.

Построим выделенные с помощью фильтров графики.

Для получения сердечного сигнала рассчитывается вторая производная от смещения — ускорение грудной стенки — позволяющая лучше выявлять резкие изменения в пульсовом сигнале. Вычисляется по формуле ниже.

a(t) = \frac{d^2 R(t)}{dt^2}

 

Нейросеть

В качестве нейронной сети рассматривалась UNet модифицированная. Ее архитектура представлена на рисунке ниже.

Как видно, она состоит из расширяющихся в ширину сверточных слоев ConvBlock и сужающихся транспонированных сверточныхслоев — UpBlock. Далее представлена  архитектура отдельного блока.

Как видно на рисунке, в ConvBlock есть блок сжатия-расширения (SEBlock), который отвечает за выделение на картах признаков полезных признаков. Ниже ее архитектура.

Данная модель ИНС реализована на ЯП Julia — основная рабочая лошадка среды Engee. Модель была обучена на данных и переведена в формат ONNX.

Парадигма МОП

Я также не обошел стороной парадигму МОП и реализовал модель ИНС в виде блоков в Engee.

Концепция остается той же. На входе источник данных — блок FromWorkspace — аналог радара. Данные поступают от источника необработанные, далее стоит блок обработки данных радара, где делается реконструкция эллипсом, масштабирование и все вышеперечисленное. Этот блок реализован через «Engee Function», который позволяет использовать пользовательский код.

Выделение ЖВП осуществляется через блок «Дискретный фильтр», которые реализует поведение КИХ фильтра. Коэффициенты фильтра были получены через встроенное приложение «Дизайнер фильтров», который позволяет в удобном режиме вычислить те самые коэффициенты числителя и знаменателя для необходимой частотной избирательности.

После этого следует еще один блок Engee Function в котором реализуется расчет ускорения смещения грудной клетки и срез — из поступающего вектора длинны N он выдает несколько окон длинны L. Далее окна передаются в блок с ИНС.

Блок ИНС также реализован через Engee Function, он работает с нейросетью через ONNX библиотеку на языке С (ЯП Julia позволяет такие обращения).

Итоговая модель представлена на рисунке внизу.

Результаты

Теперь пришло время оценить способности нашей сети в работе. Посмотрим, как она ведет себя на данных, которые еще никогда не встречала. 

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

Также при обучения нейронной сети велось логирование данных, поэтому можно оценить рассчитанные метрики.

С ростом числа эпох MAE и RMSE быстро уменьшаются. Сначала они падают (RMSE с ~0.25 до ~0.10, MAE с ~0.18 до ~0.05), а после пятидесяти эпох почти выровнялись и держатся на минимальных значениях. Коэффициент детерминации стабилизируется примерно в районе 0.85. Это говорит о том, что модель всё лучше объясняет поведение данных. Точность достигает около 0.85–0.9, то есть в 85–90% случаев модель предсказывает значение с ошибкой меньше, чем 0.05.

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

Заключение

Данная статья рассказывает как обучить нейронную сеть для реконструкции ЭКГ и радарных данных, а также наглядно показывает возможность внедрения всего цикла работы системы — предобработку и инференс модели — в блочную систему отечественного продукта Engee. Результаты работы положительные. 

Комментарии (0)