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

 
 
 
Reply to this topicStart new topic
> Вычисление СКО, на аппаратной платформе
alexPec
сообщение Aug 22 2010, 09:16
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Всем добрый день. Не сталкивался ли кто с подобной задачей:
надо вычислить среднеквадратичное отклонение массива в 1024 байта аппаратно. Получается, при решении задачи в лоб, надо сначала пробежаться по массиву (1024 такта), сложить все элементы, поделить на 1024 (сдвинуть результат на 10 бит), затем снова пробежаться по массиву, вычитая из каждого отсчета среднее (возведения в квадрат опускаю, полагаем, что это делатеся на лету, не затрачивая тактов). Проблема в том, что частота отсчетов - 8 мгц, то есть при решении задачи в лоб после каждого отсчета нужно производить пересчет (2048 тактов). при частоте 8 мгц умнодаем на 2048 тактовая частота должна быть около 1,6 ГГц - плохо. Допустим, среднее можно на лету вычислять, используя FIFO, после каждого осчета добавляя куже имеющейся сумме новый и вычитая 1025-й. А с СКО как быть? Придется чтоли таки пробегаться по массиву, вычисляя разность со средним? Это частота должна быть 800 МГц - тоже плохо...
Go to the top of the page
 
+Quote Post
SSerge
сообщение Aug 22 2010, 11:02
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



σ2 = (1/n) Σ(xi-ξ)2 = (1/n) Σ(xi2 - 2xiξ + ξ2) = (1/n) ( Σxi2 - 2ξΣxi + nξ2 )

Вспоминаем, что среднее это ξ = (1/n) Σxi после подстановки получается:
σ2 = (1/n) ( Σxi2 - (Σxi)2/n )

Таким образом получается что достаточно накапливать две суммы Σxi и Σxi2, остальное из них вычисляется.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Aug 22 2010, 15:56
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Вариант! Спасибо! Только сумма xi2 большое число будет (соответственно большой сумматор), но с этим уже ничего не поделаешь, я так понимаю?



Сообщение отредактировал alexPec - Aug 22 2010, 16:09
Go to the top of the page
 
+Quote Post
SSerge
сообщение Aug 22 2010, 17:34
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Если среднее заранее неизвестно, то да.
Если же оно изменяется не слишком быстро, то можно его более-менее точно отслеживать с помощью ФНЧ и использовать "на лету" при вычислении среднеквадратичного прямо по определению σ2 = (1/n) Σ(xii)2, где ξi есть текущая оценка среднего (выход ФНЧ).

Я делал подобное на AVR-ке для грубой оценки энергии сигнала с простейшим IIR 1-го порядка (аналог RC-цепочки). Вроде работало, но там дрейф среднего значения был очень медленный, поэтому проблем не было.
Вопрос о вносимых таким методом погрешностях я не исследовал, ничего определённого сказать не могу.

добавлено:
(xii)2 можно тоже не накапливать а пихать на вход второго ФНЧ, это может быть экономнее по расходу памяти и необходимой разрядности.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 16:17
Рейтинг@Mail.ru


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