Вы не станете намного быстрее, чем метод суммирования квадратов.
Одна из оптимизаций, которую вы, возможно, не выполняете, - это использование промежуточной суммы.То есть на каждом временном шаге вместо суммирования квадратов последних n выборок сохраняйте промежуточную сумму и обновляйте ее квадратом самой последней выборки.Чтобы избежать увеличения и увеличения вашего промежуточного итога, добавьте экспоненциальный спад.В псевдокоде:
decay_constant=0.999; // Some suitable value smaller than 1
total=0;
for t=1,...
// Exponential decay
total=total*decay_constant;
// Add in latest sample
total+=current_sample;
if total>threshold
// do something
end
end
Конечно, вам придется настроить константу и порог затухания в соответствии с вашим приложением.Если это не достаточно быстро, чтобы работать в режиме реального времени, у вас есть серьезно DSP ...