Как средствами программирования посчитать частоту сердцебиения?

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

Подскажите алгоритм или код на С(С++), Python, Pascal.

Сигнал в виде массива со значениями:

d979e672b16748628b2822d0c546c6a2.jpg
  • Вопрос задан
  • 1366 просмотров
Пригласить эксперта
Ответы на вопрос 4
@vanyamasnuha
Получить спектр сигнала. Гармоника с наибольшей амплитудой будет частотой пульса.
Ответ написан
1. Отфильтруйте сигнал. (варианты: фурье-преобразование, вейвлет-преобразование)
2. Выделите особые точки (например пики)
Это можно сделать например так:
i. Находим максимальное значение амплитуды
ii. Находим все точки, которые > 0.5 от максимального. ( 0.5 взято наобум, можно взять больше/меньше в зависимости от возможной разницы)
iii. У нас получится набор интервалов точек, для каждого интервала выбираем максимальное значение. Это и есть наш пик.
Для улучшения работы алгоритма можно искать точки не на самом сигнале, а на Вейвлет-разложении этого сигнала ( то есть для каждого уровня разложения выполняем описанную выше операцию, затем сопоставляем данные).
Делал нечто похожее на matlab, для питона библиотека с Вейвлет/фурье-преобразованиями точно имеется.
Ответ написан
@SeptiM
Можно сделать двухпороговую функцию. Пусть сигнал меняется от нуля до единицы. Возьмем два порога один на 0.1, другой на 0.9. Возьмем переменную x, которая принимает два состояния: высоко и низко. Если значение сигнала падает ниже 0.1 и x = "высоко", меняем на x на "низко". Поднимается с x = "низко" до 0.9, меняем на "высоко".

Каждый раз, когда переменная меняет свое значение на высоко, считаем пульс. Единственное, надо понаблюдать, как амплитуда себя ведет. Может делить на максимум за последние секунд 10, ну и параметры понаблюдать. Лучше всего, если есть приличная размеченная история с пульсом и можно сразу запустить тестирование на обучающей, кросс и контрольной выборках.
Ответ написан
Проанализировать количество пауз за промежуток времени.
Нужно также учесть, что могут быть пороки сердца (аритмия и т.д.), из-за которых график может выглядеть по-другому.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы