Кстати, я слышал, что врач-кардиолог, рассматривая ЭКГ, просто расфокусирует зрение.
Тем самым устраняются высокочастотные помехи.
Это ли не путь к решению?
А вообще-то, кардиограф имеет аппаратные (аналоговые) фильтры для устранения всякой левятины.
В первую очередь — 50гц, потому что напряжение наводки имеет порядок вольт, а не искомых микровольт. Ясно, что 8-разрядный АЦП не сможет справиться с ТАКИМ отношением сигнал-шум.
---
Итак, возможное решение:
1) сглаживание принятой ЭКГ (то, что делает врач расфокусировкой)
какое именно сглаживание (например, гауссово или просто среднеарифметическое) —
наверно, подскажет опыт.
2) перемасштабирование
3) нахождение пиков
Все это делается на потоке, нужно только хранить "окно" (для сглаживающего фильтра)
и засечку предыдущего пика.
Перемасштабирование нужно потому, что амплитуда сигнала может меняться
(сравните нитевидный и здоровый пульс; изменение кожного сопротивления; и т.п.)
Масштаб выбирается так, чтобы амплитуда предыдущего пика стала равной условной 1, а среднее значение сигнала — нулю.
Это позволит ожидать следующий пик в некотором диапазоне амплитуд.
(игнорировать экстремумы с малой амплитудой).
Пик выявляется по признакам:
1) максимум амплитуды (это очевидно)
2) в окрестности пика крутизна амплитуды (т.е. ее производная) существенно больше, чем на плато.
3) пик ожидается во временном диапазоне, скажем, 50%-150% от предыдущего периода
4) (наворот) можно распознавать характерную форму сигнала — "букву N"