Перейти к содержанию
    

вычисление RMS

Нужно найти алгоритм вычисления RMS усреднённую за 1с при том что есть массив, куда ложатся отсчёты, имеющий всего 3 элемента.

Помогите советом :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не понятен вопрос. Вы хотите по трем элементам рассчитать RMS? Так математика это может от произвольного числа считать. Заодно и точность подсказывает (которая в этом случае будет +-километр:)).

 

А вообще накапливайте буфер и делайте усреднение N раз, где N - количество усреднений от 1 до бесконености (конфигурируемый параметр). Точность в этом случае будет зависеть уже от величины (N*3). После того как добьетесь приемлемого соотношения "время реакции/точность измерения", можете зафиксировать N.

 

P.S.: Поясните задачу и найдется 0чень много желающих помочь советом:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно найти алгоритм вычисления RMS усреднённую за 1с при том что есть массив, куда ложатся отсчёты, имеющий всего 3 элемента.

Помогите советом :laughing:

А если считать по фомуле

F = (F*(N-1) + X)/N

А если N степень двойки то умножение и деление заменяется сдвигом.

F = (F*N-F+X)/N

Массив совсем не нужен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Считать RMS можно и без накапливания буфера каждый раз - если реализовать алгоритм, как сделано в микросхемах RMS-DC.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

alpha подбирается для достижения нужного времени интеграции (1 с).

Изменено пользователем Alexey Lukin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В таких случаях можно вычислять 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., если БИХ более высокого порядка).

Естественно, все суммы нормируются в соответствии с фактическим или эквивалентным числом отсчетов, точнее, с учетом "площади" (интеграла) весовой функции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это всё прекрасно, но у автора по условию всего 3 ячейки памяти.

Естественно.

См. алгоритм накопления квадратов за время измерения.

1 или 2 ячейки (в зависимости от разрядности и типа переменной) - накапливаемая сумма квадратов.

1 ячейка - N.

Тогда алгоритм простой - накапливаем отсчеты за 1 сек, делим накопленное на N и извлекаем корень. "Скользящее" не получится, но оно далеко не всегда и надо.

Если же нужно приближение кскользящему среднему - использовать БИХ фильтр для квадратов, тогда, поскольку N хранить становится не надо, и если в каждую ячейку без существенных потерь точности влезает квадрат, то легко сформировать весовую функцию с БИХ фильтрацией огибающей вплоть до 3 порядка (а не первого, как в приведенном Вами примере). Соответственно, при необходимости можно получить лучшее приближение к "прямоугольной" весовой функции. Естественно, при вычислении конечного значения надо учесть нормировку, но она не будет зависеть от N, если длительность процесса существенно бОльше длины значимой части импульсной характеристики этого БИХ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно найти алгоритм вычисления RMS усреднённую за 1с при том что есть массив, куда ложатся отсчёты, имеющий всего 3 элемента.

Помогите советом :laughing:

Рекомендую почитать http://www.eetimes.com/design/embedded/400...an-calculations

Я по советам из статьи делал честный RMS - оказалось что нужно только 2 32-битовые статические переменные + несколько констант. Используется только текущий отсчет. Если надо - могу найти свой код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что-то как-то сложно: окна, фильтры.

 

надо посчитать (sum((Xa - Xi)^2)/(N-1))^0.5, Xa - среднее.

если возвести в квадрат и раскрыть скобки, то получится sum(Xa^2) + sum(Xi^2) - 2*Xa*sum(Xi)

sum(Xa^2) = N*(sum(Xi)/N)^2 = sum(Xi)^2/N

2*Xa*sum(Xi) = 2*sum(Xi)^2/N

то есть надо накапливать сумму выборок S1=sum(Xi) и сумму квадратов выборок S2=sum(Xi^2), ну и количество выборок N, тогда rms можно посчитать как:

((S2 - S1*S1/N)/(N-1))^0.5

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что-то как-то сложно: окна, фильтры.

 

надо посчитать (sum((Xa - Xi)^2)/(N-1))^0.5, Xa - среднее.

если возвести в квадрат и раскрыть скобки, то получится sum(Xa^2) + sum(Xi^2) - 2*Xa*sum(Xi)

sum(Xa^2) = N*(sum(Xi)/N)^2 = sum(Xi)^2/N

2*Xa*sum(Xi) = 2*sum(Xi)^2/N

то есть надо накапливать сумму выборок S1=sum(Xi) и сумму квадратов выборок S2=sum(Xi^2), ну и количество выборок N, тогда rms можно посчитать как:

((S2 - S1*S1/N)/(N-1))^0.5

Идея алгоритма в принципе правильна, но вычисляет он не RMS, а несмещенную оценку среднеквадратического отклонения (СКО) по данной выборке.

Это не одно и то же.

Простейший пример: допустим, что в последовательности X0, X1... XN-1 все Xn одинаковы. Соответственно СКО (X0...XN-1) == 0. Но RMS (X0...XN-1) == X.

 

Рекомендую почитать http://www.eetimes.com/design/embedded/400...an-calculations

Я по советам из статьи делал честный RMS - оказалось что нужно только 2 32-битовые статические переменные + несколько констант. Используется только текущий отсчет. Если надо - могу найти свой код.

Да, частный случай БИХ варианта формирования усредняющего окна. Статья хороша "объяснением на пальцах" прикладных вопросов реализации и точности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...