Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вычисление СКО
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
alexPec
Всем добрый день. Не сталкивался ли кто с подобной задачей:
надо вычислить среднеквадратичное отклонение массива в 1024 байта аппаратно. Получается, при решении задачи в лоб, надо сначала пробежаться по массиву (1024 такта), сложить все элементы, поделить на 1024 (сдвинуть результат на 10 бит), затем снова пробежаться по массиву, вычитая из каждого отсчета среднее (возведения в квадрат опускаю, полагаем, что это делатеся на лету, не затрачивая тактов). Проблема в том, что частота отсчетов - 8 мгц, то есть при решении задачи в лоб после каждого отсчета нужно производить пересчет (2048 тактов). при частоте 8 мгц умнодаем на 2048 тактовая частота должна быть около 1,6 ГГц - плохо. Допустим, среднее можно на лету вычислять, используя FIFO, после каждого осчета добавляя куже имеющейся сумме новый и вычитая 1025-й. А с СКО как быть? Придется чтоли таки пробегаться по массиву, вычисляя разность со средним? Это частота должна быть 800 МГц - тоже плохо...
SSerge
σ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, остальное из них вычисляется.
alexPec
Вариант! Спасибо! Только сумма xi2 большое число будет (соответственно большой сумматор), но с этим уже ничего не поделаешь, я так понимаю?

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

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

добавлено:
(xii)2 можно тоже не накапливать а пихать на вход второго ФНЧ, это может быть экономнее по расходу памяти и необходимой разрядности.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.