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

 
 
> Округление при сдвиговом делении, возможно, детский вопрос, но все же...
RHnd
сообщение Nov 20 2007, 16:26
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 518
Регистрация: 12-04-07
Из: Санкт-Петербург
Пользователь №: 26 997



Итак, есть число, знаковое. Его надо разделить
Вариант 1: на степень двойки. Сдвигаем вправо и все. Округление, на сколько я знаю, до ближайшего целого в сторону минус бесконечности.
Вариант 2: не на степень двойки, а, скажем, на 1.6. Деление на 1.6 выполняем следующим образом:
1/1.6 = 0.625 = (1/2+1/8). Т.е. сдвигаем на один бит и прибавляем результат сдвига на 3 бита. Какое округление происходит в данном случае я даже не знаю.

А теперь вопрос: как выполнить деление по первому и второму варианту, но гарантировать округление до ближайшего целого (и для положительных, и для отрицательных)? Причем, в проекте это одно из самых узких мест, не хотелось бы накручивать сложную логику и плодить задержки.
Заранее спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rloc
сообщение Nov 20 2007, 16:36
Сообщение #2


Узкополосный широкополосник
******

Группа: Свой
Сообщений: 2 316
Регистрация: 13-12-04
Из: Moscow
Пользователь №: 1 462



Цитата(RHnd @ Nov 20 2007, 19:26) *
А теперь вопрос: как выполнить деление по первому и второму варианту, но гарантировать округление до ближайшего целого (и для положительных, и для отрицательных)? Причем, в проекте это одно из самых узких мест, не хотелось бы накручивать сложную логику и плодить задержки.

В самом простом случае добавляете к числу +0.5 и для положительных и для отрицательных чисел, и откидываете дробную часть.
Go to the top of the page
 
+Quote Post
RHnd
сообщение Nov 21 2007, 06:12
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 518
Регистрация: 12-04-07
Из: Санкт-Петербург
Пользователь №: 26 997



Цитата(rloc @ Nov 20 2007, 19:36) *
В самом простом случае добавляете к числу +0.5 и для положительных и для отрицательных чисел, и откидываете дробную часть.

Хм. Осталось только придумать, как это реализовать.

Цитата(Гвоздик @ Nov 21 2007, 00:47) *
Вы дробную арифметику самостоятельно в целочисленную приводите?!? Матлабом пользоваться не пробовали? Советую попробовать связку программ: AccelDSP + Matlab (HDL-код напишется автоматически)

А что мне предлагается делать на матлабе? Мне нужно выполнить квантование на набор заранее рассчитанных коефициентов, округляя результат к ближайшему целому. Что мне тут сделать на матлабе и чем он мне поможет? Я сегодня проверю, но, на сколько помню, функции округления в матлабе - не hdl синтезируемые.
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Nov 21 2007, 06:45
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



Похоже, Вы масштабируете на заранее известные коэффициенты: попробуйте заменить деление умножением. Или условия другие?
Go to the top of the page
 
+Quote Post
RHnd
сообщение Nov 21 2007, 08:23
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 518
Регистрация: 12-04-07
Из: Санкт-Петербург
Пользователь №: 26 997



Цитата(Волощенко @ Nov 21 2007, 09:45) *
Похоже, Вы масштабируете на заранее известные коэффициенты: попробуйте заменить деление умножением. Или условия другие?

Ну да, есть входной поток d0, d1, d2,..., d63. Есть набор значений, заранее известных и доступных небольшому варьированию q0, q1, q2,..., q63. На выходе нужно d0/q0, d1/q1, d2/q2, ..., d63/q34 с округлением к ближайшему целому.
Можно пример замены деления умножением?
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Nov 21 2007, 08:48
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



Если у Вас есть свободный умножитель в ПЛИС, .... тогда лучше объяснить все на примерах:
1. Укажите значения для коэффициентов, например, q0, q1, чтобы вычислить обратные значения.
2. Затем укажите пределы изменения d0, d1.
3. Выбираем разрядную сетку и фиксируем запятые для сомножителей.
4. Определяем положение запятой в произведении на выходе умножителя.
5. Округление - путем суммирования в единицей произведения в старшем отбрасываемом разряде.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- RHnd   Округление при сдвиговом делении   Nov 20 2007, 16:26
|- - RHnd   Цитата(Волощенко @ Nov 21 2007, 11:48) Ес...   Nov 21 2007, 15:05
- - Гвоздик   Вы дробную арифметику самостоятельно в целочисленн...   Nov 20 2007, 21:47
- - AsJohnAs   Тут правельно сказано что надо добавлять 0,5. Реал...   Nov 21 2007, 12:00
|- - YuP   Цитата(AsJohnAs @ Nov 21 2007, 16:00) Тут...   Dec 11 2007, 14:52
|- - Singer   Цитата(AsJohnAs @ Nov 21 2007, 15:00) Тут...   Dec 12 2007, 06:39
- - Евгений Николаев   Методы существуют разные. Скажите - а какую ПЛИС В...   Nov 23 2007, 08:58
- - alex5991   Цитата(RHnd @ Nov 20 2007, 20:26) Итак, е...   Nov 23 2007, 10:47
- - syoma   Кстати в матлаб+ system generator очень хорошо про...   Nov 24 2007, 10:43


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:36
Рейтинг@Mail.ru


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