Мне нужна рекомендация с вашей стороны. В настоящее время я работаю с датчиком ЭМГ (мышечным) на Arduino, и моя цель — определить и измерить время мышечной активности. На картинке ниже вы найдете необработанные данные. Как видите, во время мышечной деятельности диапазон аналогового выхода намного выше. Но я не знаю, какой математический подход подходит для этой задачи.
Использовать раздвижное окно...
выберите размер окна
это время, когда вы будете анализировать свойства сигнала. Он должен быть достаточно длинным, чтобы удерживать хотя бы один период сигнала, но лучше 2-3 периода.
теперь передайте свой сигнал через FIFO размером, равным размеру вашего окна
после того, как ваш FIFO заполнен при каждом новом входном значении, удалите из него первое и вычислите минимальное и максимальное содержимое FIFO. Такой FIFO лучше всего реализовать в виде циклического буфера фиксированной длины. Разница max-min
заключается в динамическом диапазоне окна и сообщит вам, обнаруживает ли ваш датчик активность или нет.
Порог max(t)-min(t)
поэтому для каждого вычисляемого окна t
вычислить:
d(t) = max(t) - min(t)
где t
— время начала вашего окна. Сейчас:
if (d(t)>=threshold) muscle_is_working;
пассивная область в вашем сигнале имеет разницу до ~40
поэтому установите порог больше, чем это, но меньше, чем активная область в вашем сигнале, например
threshold = 50
Если вам нужно больше скорости (поскольку вы находитесь на бог знает каком MCU ... и да, Arduino - это не MCU, а просто фреймворк), вы можете вместо этого использовать абс-сумму окна, которая не требует обработки всего содержимого FIFO на каждом слайде окно. Вместо этого вы просто удаляете первый элемент из суммы и добавляете к нему последний. Таким образом, уравнение будет таким:
d(t) = sum(i=t,...,t+size-1) of abs(signal(t)-inactive_average)
Также рекомендуется округлить размер окна до степени 2, чтобы вы могли использовать битовые операции вместо деления и по модулю в реализации циклического буфера.
Вау, спасибо за ваш ответ. Постараюсь закончить завтра или в понедельник и сообщу о результатах.
Может быть, среднее абсолютных значений и какой-то порог, если он слишком отличается от долгосрочного среднего?