В общем, как я делал.
Т.к. железо везде слабое, то в Arduino использую скользящую среднюю по 3 для результатов пиков, а на входе использовал простой lowpass фильтр. Для ускорения писал на Atmel библиотеках, а не на Arduino. Так объем кода вырос, но итоговый файл сократился и стал быстрее работать.
uint16_t lowpass(uint16_t prev, uint16_t cur, float a)
{
return prev + a * (cur*1.0 - prev*1.0);
}
Т.к. при частоте 100 герц, на один пик приходилось 4-5 измерений, то не было нужды искать пики сложно, искал просто как минимум - максимум из 3.
Получившуюся амплитуду фильтровал также sma по 3. И отправлял в COM порт сразу 3 значения.