|
берется N выборок. N всегда фиксировано и выбрано изначально. Далее рассчитывается (например в матлабе) окно. Они разные бывают, например хемминга, блэкмен-харриса и т.п. Получается массив W[] Далее возводится каждый коэффициент в квадрат. Получаем массив, содержащий выборки оконной функции, возведенные в квадрат. Это будет хранится в памяти процессора, но приведенное к формату Q15 например. Еще надо посчитать в том-же матлабе сумму всех элементов массива W и получить обратную величину к ней. Тоже привести к Q15 (опять-же к примеру, форматы чисел на свое усмотрение) - тоже пригодится.
Теперь в процессоре считаем (x[] - это N выборок сигнала
+- -+
| N-1 N-1 |
RMS = sqrt | (1/(sum(w[n]*w[n]) * sum (w[n]*w[n]*x[n]*x[n]) |
| n=0 n=0 |
+- -+
Первая половина - обратная величина к сумме квадратов окна - посчитана предварительно, и есть просто нормирующий множитель, на который нужно домножить результат второй суммы. Вторая сумма - есть сумма произведений двух величин: квадрата окна (посчитано заранее) и квадрата сигнала. Вот в общем и все. Главное тут не запутаться в форматах чисел c фиксированной точкой (Q15, Q16, Q31 и т.п.) и правилах их перемножения.
Ну и на последок - если N достаточно большое, и обрезки неполных на краях окна не внесут ощутимой погрешности, то можно взять прямоугольное окно - это ликвидирует одно умножение (на 1-цу множить нет смысла :)
E-mail: info@telesys.ru