Рекомендации по арифметике и масштабированию

Арифметические операции и масштабирование с фиксированной точкой

В следующих разделах описывается связь между арифметическими операциями и масштабированием с фиксированной точкой, и предлагаются некоторые основные рекомендации, которые могут быть подходящими для вашего проекта с фиксированной точкой. Для каждой арифметической операции,

  • Используется общая схема кодирования [Slope Bias], описанная в масштабирование.

  • Масштабирование результата автоматически выбирается на основе масштабирования двух входов. Другими словами, масштабирование наследуется.

  • Варианты масштабирования основаны на

    • Минимизация количества арифметических операций результата

    • Максимизация точности результата

    Кроме того, масштабирование только для двоичных точек представлено как частный случай общей схемы кодирования.

Во встраиваемых системах масштабирование переменных в интерфейсе оборудования (АЦП или DAC) фиксировано. Однако для большинства других переменных масштабирование является тем, что вы можете выбрать, чтобы дать лучший проект. При масштабировании переменных с фиксированной точкой важно помнить, что

  • Ваши варианты масштабирования зависят от конкретного проекта, который вы моделируете.

  • Нет наилучшего подхода к масштабированию. Все варианты имеют связанные преимущества и недостатки. Цель этого раздела - раскрыть эти преимущества и недостатки вам.

Сложение

Рассмотрим сложение двух реальных значений:

Va=Vb+Vc.

Эти значения представлены общей схемой кодирования [Наклон Смещения], описанной в масштабирование:

Vi=Fi2EiQi+Bi.

В системе с фиксированной точкой сложение значений приводит к нахождению переменной Qa:

Qa=FbFa2EbEaQb+FcFa2EcEaQc+Bb+BcBaFa2Ea.

Эта формула показывает

  • В целом Qa не вычисляется посредством простого сложения Qb и Qc.

  • В целом существует два умножения константы и переменной, два сложения и некоторая дополнительная перемена битов.

Наследуемое масштабирование для скорости

В процессе нахождения масштабирования суммы одной разумной целью является упрощение вычислений. Упрощение вычислений должно уменьшить количество операций, тем самым увеличив скорость выполнения. Следующие варианты могут помочь минимизировать количество арифметических операций:

  • Установите Ba = Bb + Bc. Это устраняет одно сложение.

  • Установите Fa = Fb или Fa = Fc. Любой из вариантов устраняет одну из двух переменных умножений в постоянное время.

Получившаяся формула

Qa=2EbEaQb+FcFa2EcEaQc

или

Qa=FbFa2EbEaQb+2EcEaQc.

Эти уравнения кажутся эквивалентными. Тем не менее, ваш выбор округления и точности может сделать один выбор выделиться над другим. Для дальнейшего упрощения можно выбрать Ea = Ec или Ea = Eb. Это исключит некоторую перемену бита.

Наследованное масштабирование для максимальной точности

В процессе нахождения масштабирования суммы одной разумной целью является максимальная точность. Можно определить масштабирование с максимальной точностью, если область значений переменной известна. Максимизация Точности показывает, что можно определить область значений операции с фиксированной точкой из max (Va) и min (Va). Для суммирования можно определить область значений из

min(V˜a)=min(V˜b)+min(V˜c),max(V˜a)=max(V˜b)+max(V˜c).

Теперь можно вывести уклон максимальной точности:

Fa2Ea=max(V˜a)min(V˜a)2wsa1=Fa2Eb(2wsb1)+Fc2Ec(2wsc1)2wsa1.

В большинстве случаев вход и выходного слова намного больше единицы, и наклон становится

Fa2EaFb2Eb+wsbwsa+Fc2Ec+wscwsa,

который зависит только от размера входного и выходного слов. Соответствующее смещение

Ba=min(V˜a)Fa2Eamin(Qa).

Значение смещения зависит от того, являются ли входы и выход подписанными или неподписанными номерами.

Если входы и выход все беззнаковые, то минимальные значения для этих переменных равны нулю, и смещение уменьшается до особенно простой формы:

Ba=Bb+Bc.

Если входы и выходы все подписаны, то смещение становится

BaBb+Bc+Fb2Eb(2wsb1+2wsb1)+Fc2Ec(2wsc1+2wsc1),BaBb+Bc.

Масштабирование только для двоичных точек

Для двоичного масштабирования только для точек, нахождение Qa приводит к этому простому выражению:

Qa=2EbEaQb+2EcEaQc.

Этот выбор масштабирования результатов только в одном сложении и некоторых битах перемены. Избегание любых умножений является большим преимуществом двоичного масштабирования только для точек.

Примечание

Вычитание значений дает результаты, которые аналогичны тем, которые получаются путем сложения значений.

Накопление

Накопление значений тесно связано с сложением:

Va_new=Va_old+Vb.

Нахождение Qa_new включает одно умножение константы и переменной, два сложения и некоторую перемену бита:

Qa_new=Qa_old+FbFa2EbEaQb+BbFa2Ea.

Важным различием для реализаций с фиксированной точкой является то, что масштабирование выхода идентично масштабированию первого входа.

Масштабирование только для двоичных точек

Для двоичного масштабирования только для точек, нахождение Qa_new приводит к этому простому выражению:

Qa_new=Qa_old+2EbEaQb.

Эта опция масштабирования включает только одно сложение и некоторую перемену битов.

Примечание

Отрицательное накопление значений дает результаты, которые аналогичны тем, которые генерируются накоплением значений.

Умножение

Рассмотрим умножение двух реальных значений:

Va=VbVc.

Эти значения представлены общей схемой кодирования [Наклон Смещения], описанной в масштабирование:

Vi=Fi2EiQi+Bi.

В системе с фиксированной точкой умножение значений приводит к нахождению переменной Qa:

Qa=FbFcFa2Eb+EcEaQbQc+FbBcFa2EbEaQb+FcBbFa2EcEaQc+BbBcBaFa2Ea.

Эта формула показывает

  • В целом Qa не вычисляется посредством простого умножения Qb и Qc.

  • В целом существует одно умножение константы и две переменные, два умножения константы и переменной, три сложения и некоторая дополнительная перемена битов.

Наследуемое масштабирование для скорости

Количество арифметических операций может быть уменьшено с помощью этих вариантов:

  • Установите Ba = Bb Bc. Это устраняет одну операцию сложения.

  • Установите Fa = Fb Fc. Это упрощает тройное умножение - безусловно, самую трудную часть уравнения, которое можно реализовать.

  • Установите Ea = Eb + Ec. Это устраняет некоторые битовые перемены.

Получившаяся формула

Qa=QbQc+BcFc2EcQb+BbFb2EbQc.

Наследованное масштабирование для максимальной точности

Можно определить масштабирование с максимальной точностью, если область значений переменной известна. Максимизация Точности показывает, что можно определить область значений операции с фиксированной точкой из

max(V˜a)

и

min(V˜a).

Для умножения можно определить область значений из

min(V˜a)=min(VLL,VLH,VHL,VHH),max(V˜a)=max(VLL,VLH,VHL,VHH),

где

VLL=min(V˜b)min(V˜c),VLH=min(V˜b)max(V˜c),VHL=max(V˜b)min(V˜c),VHH=max(V˜b)max(V˜c).

Масштабирование только для двоичных точек

Для двоичного масштабирования только для точек, нахождение Qa приводит к этому простому выражению:

Qa=2Eb+EcEaQbQc.

Выгода

Рассмотрим умножение константы и переменной

Va=KVb,

где K является константой, называемой усилением. Поскольку Va является результатом умножения константы и переменной, нахождение Qa является упрощенной версией общей формулы умножения с фиксированной точкой:

Qa=(KFb2EbFa2Ea)Qb+(KBbBaFa2Ea).

Обратите внимание, что условия в круглых скобках могут быть вычислены в автономном режиме. Поэтому существует только одно умножение константы и переменной и одно сложение.

Чтобы реализовать вышеописанное уравнение, не меняя его на более сложную форму, константы должны быть закодированы с использованием двоичного формата только для точек. Для каждой из этих констант область значений является тривиальным случаем только одного значения. Несмотря на тривиальную область значений, двоичные формулы точек для максимальной точности все еще действительны. Представления максимальной точности являются наиболее полезными вариантами, если нет переопределяющей необходимости избегать каких-либо перемен. Кодировка констант

(KFb2EbFa2Ea)=2EXQX(KBbBaFa2Ea)=2EYQY

в результате чего формула

Qa=2EXQXQB+2EYQY.

Наследуемое масштабирование для скорости

Количество арифметических операций может быть уменьшено с помощью этих вариантов:

  • Установите Ba = KBb. Это устраняет один постоянный член.

  • Установите Fa = KFb и Ea = Eb. Это устанавливает другой постоянный термин в единство.

    Получившаяся формула просто

    Qa=Qb.

Если количество бит отличается, то либо обработка потенциальных переполнений, либо выполнение расширений знаков является единственно возможной операцией.

Наследованное масштабирование для максимальной точности

Масштабирование для максимальной точности не должно отличаться от масштабирования для скорости, если выход не имеет меньше биты, чем вход. Если это так, то насыщения следует избегать путем деления наклона на 2 для каждого потерянного бита. Это предотвращает насыщение, но приводит к округлению.

Деление

Деление значений является операцией, которую следует избегать во встраиваемых системах с фиксированной точкой, но она может происходить местами. Поэтому рассмотрим деление двух реальных значений:

Va=Vb/Vc.

Эти значения представлены общей схемой кодирования [Наклон Смещения], описанной в масштабирование:

Vi=Fi2EiQi+Bi.

В системе с фиксированной точкой деление значений приводит к нахождению переменной Qa:

Qa=Fb2EbQb+BbFcFa2Ec+EaQc+BcFa2EaBaFa2Ea.

Эта формула показывает

  • В целом Qa не вычисляется посредством простого деления Qb на Qc.

  • В целом существует два умножения константы и переменной, два сложения, одно деление переменной на переменную, одно деление константы на переменную и некоторую дополнительную перемену битов.

Наследуемое масштабирование для скорости

Количество арифметических операций может быть уменьшено с помощью этих вариантов:

  • Установите Ba = 0. Это устраняет одну операцию сложения.

  • Если Bc = 0, задайте дробный наклон Fa = Fb/ Fc. Это устраняет одно умножение переменных в постоянные моменты времени.

Получившаяся формула

Qa=QbQc2EbEcEa+(Bb/Fb)Qc2EcEa.

Если Bc ≠ 0, то никакие четкие рекомендации не могут быть сделаны.

Наследованное масштабирование для максимальной точности

Можно определить масштабирование с максимальной точностью, если область значений переменной известна. Максимизация Точности показывает, что можно определить область значений операции с фиксированной точкой из

max(V˜a)

и

min(V˜a).

Для деления можно определить область значений из

min(V˜a)=min(VLL,VLH,VHL,VHH),max(V˜a)=max(VLL,VLH,VHL,VHH),

где для ненулевых знаменателей

VLL=min(V˜b)/min(V˜c),VLH=min(V˜b)/max(V˜c),VHL=max(V˜b)/min(V˜c),VHH=max(V˜b)/max(V˜c).

Масштабирование только для двоичных точек

Для двоичного масштабирования только для точек, нахождение Qa приводит к этому простому выражению:

Qa=QbQc2EbEcEa.

Примечание

Для последних двух формул, связанных с Qa, возможны деление на ноль и ноль, разделенное на нули. В этих случаях оборудование даст некоторое поведение по умолчанию, но вы должны убедиться, что эти ответы по умолчанию дают значимые результаты для встраиваемой системы.

Сводные данные

Из предыдущего анализа переменных с фиксированной точкой, масштабируемых в рамках общей схемы кодирования [Slope Bias], можно сделать вывод

  • Сложение, вычитание, умножение и деление могут быть очень вовлечены, если не сделан определенный выбор для смещений и склонов.

  • Масштабирование только для двоичных точек гарантирует более простую математику, но обычно жертвует некоторой точностью.

Обратите внимание, что в предыдущих формулах не отображается следующее:

  • Константы и переменные представлены конечным числом бит.

  • Переменные либо подписаны, либо не подписаны.

  • Схемы округления и переполнения. Необходимо принять эти решения до достижения фактической реализации с фиксированной точкой.

См. также