|
|
  |
Формат представления чисел, в алгоритмах ЦОС |
|
|
|
Aug 18 2014, 05:35
|
Группа: Новичок
Сообщений: 9
Регистрация: 13-01-14
Пользователь №: 80 010

|
Добрый день.
Нужен совет по следующей проблеме. Допустим необходимо реализвать на ПЛИС некоторый алгоритм ЦОС, который состоит в последовательном выполнении простых операций (умножение, дифференцирование, фильтрация и т.д). На входе - целые числа (скажем 18 разрядов). В процессе математических вычислений разрядность результата растет очень быстро. Соответственно встает вопрос об округлении промежуточных результатов. То есть или использовать фиксированную точку или числа с плавающей точкой. Если использовать Xilinx IP cores, то фильтры на вход принимают числа с фиксированной точкой. Все остальные операции можно производить в формате с фиксированной точкой. Таким образом максимальная тоность вычислений будет в том случае, если в определенных местах переводить числа fixed_point -> floating_point и обратно? Собственно основной вопрос вот в чем. Можно ли найти хороший вариант по вычислительной_сложности/точности без построения моделей в Matlab (при условии что алгоритм не сложный, т.е. посчитать "на бумажке")? Что самое интересное, в интернете крайне мало информации по этой теме. Быть может кто встречал книжку, где описаны расчеты точности при таких вычислениях.
|
|
|
|
|
Aug 18 2014, 06:37
|
Местный
  
Группа: Свой
Сообщений: 316
Регистрация: 20-02-05
Из: Ленинградская обл.
Пользователь №: 2 765

|
Плавающая точка даёт расширение динамического диапазона, а вот точность определяется длиной мантиссы, которая, при одинаковой с целочисленным представлением длине слова, имеет меньше разрядов, чем целое. А про точность: Представьте себе, что Ваши данные имеют общий множитель 2**(-n), где n - разрядность числа. Т.е. Ваши числа лежат в диапазоне ]-1;1[. Множители фильтров можно рассматривать аналогично. Поэтому, умножение двух чисел, меньших единицы, в результате даёт число, также меньшее единицы. Следовательно, разрядами, меньшими чем меньшие во входном сигнале, можно пренебречь и отбросить. Хуже со сложением - но в этом случае рост разрядности равен двоичному логарифму от количества сложений, т.е 2 сложения <=> 1 разряд, 4 сложения <=> 2 разряда и т.д.. Мысленные множители можно учесть на выходе алгоритма ( или вообще не учитывать ). Так что варианты нарисовать можно!
|
|
|
|
|
Aug 18 2014, 07:08
|
Группа: Новичок
Сообщений: 9
Регистрация: 13-01-14
Пользователь №: 80 010

|
Цитата(Maverick @ Aug 18 2014, 10:52)  максимальная разрядность какая, получается после вычислений? В том и дело, что максимальная разрядность на входе фильтра - 48. Опишу такую ситуацию. Например, на первом шаге умножаем два 18-разрядных числа, произведение 36 бит. Далее фильтруем (коэффициенты 16 бит) и уже приходится округлять до 48 бит (чтобы подать на вход другого фильтра).
|
|
|
|
|
Aug 18 2014, 09:36
|
Группа: Новичок
Сообщений: 9
Регистрация: 13-01-14
Пользователь №: 80 010

|
Цитата(des00 @ Aug 18 2014, 12:04)  смеситель с НЧ фильтром ? Верно) Просто интересен подход к такому роду задач. К примеру, если представить такую схему, в которой идут подряд несколько умножителей + задана некоторая требуемая точность вычисления результата. Как выбрать разрядности, чтобы наименьшим образом искажался результат в процессе вычислений. bve писал выше по теме. То есть если на входе я имею целые числа (или числа с фиксированной точкой), то могу выбрать некоторый формат, скажем signed_fixed_point_N_M, при этом если нормировать промежуточные результаты и отбрасывать младшие биты произведений я не уйду далеко от точности заданного формата?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|