Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: округление
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
dsp85

Подскажите, как по-научному правильно округлять?

Вход: I/Q (12 разрядов на квадратуру)
Выход: I'/Q' (7 разрядов на квадратуру)

чувствую, что просто использовать старшие 7 неверно. как нужно учитывать при округлении младшие 5 или не нужно?

SPACUM
Нужно прибавить к округляемому число с единичкой в 8-м разряде и отбросить от суммы младшие пять.
dsp85
Цитата(SPACUM @ Jul 6 2010, 23:14) *
Нужно прибавить к округляемому число с единичкой в 8-м разряде и отбросить от суммы младшие пять.

это верно, если и I и Q в доп коде?

все разобрался.

если X>0, то +
Цитата
число с единичкой в 8-м разряде


если X<0, то -
Цитата
число с единичкой в 8-м разряде
EvgenyV
А еще можно noise shaping использовать http://en.wikipedia.org/wiki/Noise_shaping

Для этого используется feedback loop, где в петлю обратной связи подается ошибка округления e[n-1].


jorikdima
Цитата(dsp85 @ Jul 6 2010, 22:35) *
Подскажите, как по-научному правильно округлять?

Вход: I/Q (12 разрядов на квадратуру)
Выход: I'/Q' (7 разрядов на квадратуру)

чувствую, что просто использовать старшие 7 неверно. как нужно учитывать при округлении младшие 5 или не нужно?

надо добавить половину цены деления и отбросить младшую часть. С отрицательными числами идея таже, как сделать решайте сами.
qxov
Цитата(dsp85 @ Jul 6 2010, 22:35) *
Подскажите, как по-научному правильно округлять?

Вход: I/Q (12 разрядов на квадратуру)
Выход: I'/Q' (7 разрядов на квадратуру)

чувствую, что просто использовать старшие 7 неверно. как нужно учитывать при округлении младшие 5 или не нужно?

output = (input + (1 << (12 - 7 - 1))) >> (12 - 7)
анатолий
Уточнение к округлению по-научному:
если в отбрасываемом коде попадется комбинация 10000,
то округлять прибавлением 1 нельзя.
alex_os
Цитата(анатолий @ Jul 13 2010, 22:51) *
Уточнение к округлению по-научному:
если в отбрасываемом коде попадется комбинация 10000,
то округлять прибавлением 1 нельзя.

Почему?!!
Oldring
Цитата(alex_os @ Jul 13 2010, 22:54) *
Почему?!!


Потому что их нужно округлять к ближайшему четному, иначе ошибка округления будет иметь ненулевое среднее. Но на такие блохи в DSP алгоритмах обычно плюют.
fontp
QUOTE (Oldring @ Jul 14 2010, 10:03) *
Но на такие блохи в DSP алгоритмах обычно плюют.


Плюют не всегда.
Это если алгоритм проприетарный или сделан для себя. Или такой, что небольшое смещение не имеет значения.
Если алгоритм стандартный и сделан на продажу, приходится считаться.
Иначе не пройдет тестирование на тестовых векторах, которые есть часто часть стандарта
Поэтому во многих современных DSP есть аппаратная поддержка того и другого режима округления.
анатолий
Вот здесь http://kanyevsky.kpi.ua/okruglenie.html
описано как на VHDL делать 8 способов округления
и что они дают, и что стоят.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.