Skip to content

piliff-e/PPG-correction

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

69 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PPG-correction

Предсказание поведения пульсовой волны

  • /scripts (сам код):

    • preprocessing.py содержит функции загрузки и предобработки данных.
    • forecasting.py - программа, предсказывающая K новых точек сигнала по N предыдущим.
    • main.py - основная программа.
    • train_basic_model.py - программа, обучающая модель предсказывать K новых точек сигнала по N предыдущим, в ней имеется возможность дообучить уже существующую модель, если она была сохранена в нужном формате.
    • plotting.py отрисовывает график со сравнением исходного и исправленного сигналов PPG.
    • compute_distance.py вычисляет пороговое значение оценки качества сигнала при помощи DTW.
    • requirements.txt содержит писок необходимых библиотек и их версий для работы проекта.
    • rate_model_quality.py - оценка качества итоговой модели с помощью оценок MAE и MSE.
  • /test_data (тестовые данные):

  • /unused содержит файлы, не использующиеся в нынешней реализации.


Постановка задачи из ИАП РАН

Предсказание пульсовой волны

Идея предлагаемого алгоритма, следующая - пусть у нас есть N известных точек сигнала, тогда попытаемся предсказать K следующих точек. Если предсказание достаточно близко к реальному сигналу, значит он не выбивается от предыдущих форм волн. Если же оно отличается, значит форма полученного сигнала является выбросом в сравнении с предыдущими. Тогда мы можем либо пометить этот участок как некачественный, либо заменить его на предсказание.

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

Строго говоря, данная задача называется forecasting. Начать бы предложил с ARIMA, а потом попытаться найти методы побыстрее. Большинство моделей либо использует авторегрессию, либо учат предсказывать на обучающей выборке. Первые модели не нужно предварительно обучать, они это делают в процессе, однако это влияет на скорость их работы. Было бы идеально, чтобы методика работала в real-time. Из библиотек могу предложить эту, но есть и другие

https://nixtlaverse.nixtla.io/

Теперь про нюансы.

Как по мне лучше пытаться предсказывать один период сигнала, впрочем, можно и некоторое фиксированное число точек. Также советую снижать частоту сэмплирования сигнала до 50 (если она и так не ниже), форму волны критично не ухудшите, и снизите время работы алгоритмов. Также из-за естественной вариабельности во времени между сердечными сокращениями, предсказанная форма волны может совпадать с полученной, но из-за смещения во времени выдавать слабые метрики. Если такая проблема действительно будет возникать, рекомендую посмотреть в сторону DWT (Dynamic Time Warping), по сути обычное выравнивание, которое Вы знаете. К слову о метриках. Саму точность предсказания можно оценить, например, MAE или тем же расстоянием DWT. Однако, если пойти на шаг дальше, то есть смысл сравнивать оценку ЧСС в течение некоторого времени с применением предложенной техники и без. Для этого будет достаточно heartpy.

About

Algorithm that detects artefacts in PPG signal and corrects them with local forecasts

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages