реклама на сайте
подробности

 
 
> вычисление RMS, когда мало памяти
Zelepuk
сообщение Apr 19 2012, 04:55
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Нужно найти алгоритм вычисления RMS усреднённую за 1с при том что есть массив, куда ложатся отсчёты, имеющий всего 3 элемента.
Помогите советом laughing.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alexey Lukin
сообщение Apr 19 2012, 07:41
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 159
Регистрация: 3-01-11
Пользователь №: 62 000



В таких случаях можно вычислять RMS не с прямоугольным окном, а с экспоненциальным, по рекурсивной формуле RMS[t] = (1 - alpha) * RMS[t-1] + alpha * x2[t].
alpha подбирается для достижения нужного времени интеграции (1 с).

Сообщение отредактировал Alexey Lukin - Apr 19 2012, 07:44
Go to the top of the page
 
+Quote Post
SIA
сообщение Apr 19 2012, 12:58
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 462
Регистрация: 26-06-07
Пользователь №: 28 723



Цитата(Alexey Lukin @ Apr 19 2012, 10:41) *
В таких случаях можно вычислять RMS не с прямоугольным окном, а с экспоненциальным, по рекурсивной формуле RMS[t] = (1 - alpha) * RMS[t-1] + alpha * x2[t].
alpha подбирается для достижения нужного времени интеграции (1 с).

Строго говоря, самих RMS - не один-единственный вариант в отношении "Mean" (способа усреднения), а несколько, то есть надо смотреть по условиям задачи.
Во-первых, есть средний квадрат за интервал времени наблюдения, то есть с "прямоугольным" окном переменной длины, равной всему интервалу наблюдения - от начала до текущего момента. Такой способ методически наиболее точен для определения характеристик стационарных стохастических величин. Компактную реализацию этого метода тут уже приводили - в 3 посте: MS[n] = MS[n-1]*((n-1)/n) + (x^2)/n, или, более явно, MS[n] = MS[n-1] + (x^2 - MS[n-1])/n, RMS[n] = SQRT(MS[n]/n), однако нужно иметь в виду, что она (как и БИХ фильтрация, см. ниже) критична к вычислительным погрешностям, то есть при вычислениях нужен запас по разрядности, порядка 1.5*Log2(n).
Самая быстрая (и точная) реализация этого алгоритма - с "пост-масштабированием", когда по ходу дела просто накапливается сумма квадратов (естественно, с соответствующей разрядностью накопителя, во избежание переполнения), и только потом, когда данные уже собраны, накопленное делится на n, после чего извлекается корень.
Во-вторых, есть скользящее среднее - т.е. с прямоугольным окном фиксированной длины, этот метод часто применяется для подавления периодической помехи и ее гармоник (пример - вычисление RMS для частоты 50 Гц, как правило, эффективнее всего выполнять за интервал 20 мс). Для реализации нужен циклический буфер на длину окна (с разрядностью для квадрата, если нет желания дважды его вычислять).
В-третьих, можно явно сформировать КИХ весовую функцию, применив алгоритм КИХ фильтрации (в любой форме) к квадратам мгновенных значений.
Ну и в-четвертых, можно применить не КИХ, а БИХ-фильтрацию к "мгновенным" значениям квадрата, формой "окна" при этом будет служить импульсная характеристика БИХ фильтра. Тогда число хранимых величин определяется порядком фильтра. (Выше как раз фактически использован простейший БИХ первого порядка).
Обычно это самый эффективный в вычислительном отношении алгоритм (или сразу после п.1., если БИХ более высокого порядка).
Естественно, все суммы нормируются в соответствии с фактическим или эквивалентным числом отсчетов, точнее, с учетом "площади" (интеграла) весовой функции.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th August 2025 - 20:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016