Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Алгоритм усреднения без деления
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Newegor
Подскажите алгоритм усреднения величины во времени без деления. 12 бит получаю с АЦП.
VAI
http://www.may.nnov.ru/mak/DSP/chEMA.shtml
Но я в double всё считаю.
fontp
Скользящее среднее? Это CIC-фильтр порядка 1. По СIC-фильтрам много ссылок в сети

Экспоненциальное усреднение тоже годится
DRUID3
Ну да, ага... среднее smile.gif Уж скорее скользящая медиана.
slog
Если делить на 2-4-8-16... то это просто сдвиги вправо.
fontp
Цитата(DRUID3 @ Apr 23 2007, 11:49) *
Ну да, ага... среднее smile.gif Уж скорее скользящая медиана.



Хорошо бы, если б медиана :-) Для CIC-фильтра нормировка остаётся проблемой, но окно обычно есть N=2^n, так что это не беда. При аппаратной реализации берутся старшие разряды, при программной - сдвиг. Ну если окно кривое - можно в крайнем случае умножать на нормировочную константу 1/N
Где деление? :-)
=GM=
Цитата(Newegor @ Apr 23 2007, 06:20) *
Подскажите алгоритм усреднения величины во времени без деления. 12 бит получаю с АЦП.

Складываете 256 величин, при чтении результата игнорируете младший байт. Если усредняете на ДСП, то складываете 2^n раз, результат при чтении сдвигаете одной командой на n бит вправо.
mse
Без делення...А с умножением на 0х10000/N, например, покатит? ;О)
fontp
Цитата(mse @ Apr 23 2007, 17:03) *
Без делення...А с умножением на 0х10000/N, например, покатит? ;О)


Если мыслить в фикспойнте 15.1, то умножать очевидно нужно на 32768/N. Это если накопляемая сумма всё-таки укладывается в 16 разрядов. Если даже не укладывается, в любом случае деление на константу делением не является :-) Существуют трюки для программистов

Фильтр Хогенауэра (CIC) первого порядка это просто фильтр
S(n) = S(n-1) + X(n) - X(n-N)
Для целочисленных вычислений он абсолютно устойчив, поскольку отсутствует источник шума округления. Для float он на границе устоячивости и будет медленно расходиться
v_shamaev
Цитата(Newegor @ Apr 23 2007, 11:20) *
Подскажите алгоритм усреднения величины во времени без деления. 12 бит получаю с АЦП.

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