Эта работа направлена ​​на обнаружение нарушений работы сердца по звуку. Обычно врачи проводят регулярный контроль с помощью стетоскопа (возможно, один раз в год). Стетоскоп действительно полезен для обнаружения нарушений, указывающих на необходимость дальнейшего исследования.

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

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

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

Набор данных

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

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

В этом наборе данных есть 4 класса звуков:

  1. Нормально: здоровые тоны сердца
  2. Шепот: дополнительные звуки, которые возникают при турбулентности кровотока, вызывающей дополнительные вибрации, которые можно услышать.
  3. Extrahls: есть дополнительный звук
  4. Артефакты: есть множество разных звуков

Все отдельные аудиофайлы имеют правильный класс.

Структура сердцебиения

Обычно сердцебиение создает два звука, lub-dub, которые можно услышать через стетоскоп. Эти звуки называются соответственно S1 и S2 для первого и второго тонов сердца в пределах одного удара. S1 возникает, когда митральный и трикуспидальный клапаны закрываются в конце систолы, когда кровь из предсердий заполняет желудочки. S2 слышен, когда створки аортального и легочного клапана закрываются после диастолы, когда кровь выталкивается из желудочков. Эти два звука составляют то, как должно звучать нормальное сердцебиение.

ASP - обработка аудиосигнала

Какой звук? Звук - это изменение давления воздуха, а звуковой сигнал - изменение давления воздуха во времени.

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

Для людей, заинтересованных в более глубоком изучении ASP, я бы посоветовал отличный бесплатный онлайн-ресурс (книгу), в котором также есть библиотека для Python thinkDSP, и у них также есть бесплатный код в github, который выполняет упражнения, приведенные в книге.

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

Мы регистрируем звук с микрофона и сигнал преобразуется из аналогового в цифровой.

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

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

Говоря о частотах, на изображении ниже мы можем понять, о каких частотах идет речь:

Мы ясно видим, что человек может воспринимать частоты от 20 Гц до 20 кГц, в то время как некоторые животные могут слышать также более низкие или более высокие частоты.

В этом проекте мы сосредоточимся на нормальном сердцебиении, а также на сердцебиении с шумом. Частоты для нормального режима находятся в диапазоне 0–200 Гц, а для шума мы должны рассматривать частоты в диапазоне 0–600 Гц.

Архитектура

В проекте мы использовали два подхода: первый основан на анализе временных рядов, а второй - на извлечении признаков.

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

О домене Frequencies мы использовали различную информацию:

Мы использовали библиотеку librosa, но есть и другие библиотеки, которые можно использовать как thinkDSP и pyAudioAnalysis.

Мы также использовали капре, то есть препроцессор звука keras, который позволяет вам вычислять STFT / мелспектрограммы прямо в вашей модели keras на лету, не сохраняя их в хранилище.

Еще мы пробовали КРЕП. CREPE - это монофонический трекер высоты тона, основанный на глубокой сверточной нейронной сети, работающей непосредственно на входе сигнала во временной области. CREPE является современным (по состоянию на 2018 год), опережая популярные питч-трекеры, такие как pYIN и SWIPE.

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

Исследовательский анализ данных EDA

Мы начали с EDA во временной области для двух рассматриваемых классов (нормальный и шумный), и мы можем ясно видеть на изображении ниже, что шумное сердцебиение имеет «шум» между сегментами S1 и S2, и это также подтверждается распределением амплитуды, которые мы видим на гистограммах:

Предварительная обработка данных

При предварительной обработке мы вырезали все аудиофайлы, которые имеют продолжительность менее 2 секунд, потому что они не могут содержать полное сердцебиение, особенно учитывая, что мы также вырезаем первую секунду всего звука из-за начального шума, вероятно, из-за контакт микрофона с телом.

Все файлы имеют частоту дискретизации 44100 Гц. Мы также уменьшили размер файлов в 10 раз, чтобы уменьшить шум на высоких частотах, но при этом сохранив всю необходимую информацию.

Мы также нормализовали данные.

Извлечение функций (3 группы функций)

В этом подходе мы взяли особенности как из временной области, так и из частотной области.

Во временной области мы брали среднее значение каждые 10 отсчетов.

Из частотной области мы взяли результат MFCC после уменьшения PCA до 1 компонента, а также результат STFT после уменьшения PCA до 1 компонента.

Мы использовали все эти функции для классификации сердечных сокращений. Здесь у нас есть информация о начальной форме наших данных и изменении формы, чтобы предоставить наши данные на входе в модель. Мы также разделили данные на поезд (70%) и тест (30%), применив GridSearch для лучших параметров:

Точность тестового набора составляет 94,7%. Взглянув на матрицу неточностей, можно сказать, что в тестовой выборке 19 образцов (10 шумовых и 9 нормальных). Набор для испытаний, так как поезд набор сбалансирован.

Что касается прогноза по 10 образцам шума, мы правильно определили все 10 как шум; вместо 9 отсчетов нормалей мы правильно определили 8 как нормальных и 1 как шум (ошибка I типа).

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

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

И если вы хотите поддержать меня в написании других подобных статей, купи мне кофе :)