innerprodintbits

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

Синтаксис

innerprodintbits(a,b)

Описание

innerprodintbits(a,b) вычисляет минимальное количество целочисленных бит, необходимых во скалярном произведении a'*b гарантировать, что никакие переливы не происходят и сохранить лучшую точность.

  • a и b являются fi векторы.

  • Значения a известны.

  • Только числовой тип b уместно. Значения b игнорируются.

Примеры

Основное использование этой функции состоит в том, чтобы определить количество целочисленных бит, необходимых в выход Y Конечная импульсная характеристика, который вычисляет скалярное произведение между вектором-строкой с постоянным коэффициентом B и состояние вектора-столбца Z. Для примера,

      for k=1:length(X);
        Z = [X(k);Z(1:end-1)];
        Y(k) = B * Z;
      end

Алгоритмы

В целом скалярное произведение растёт log2(n) биты для векторов длины n. Однако в случае с этой функцией вектор a известно, и его значения не изменяются. Это знание используется для вычисления наименьшего числа целочисленных бит, которые необходимы в выходе, чтобы гарантировать, что переполнение не произойдет.

Наибольшее усиление происходит, когда вектор b имеет тот же знак, что и вектор константы a. Поэтому самый большой коэффициент усиления из-за вектора a является a*sign(a'), что равно sum(abs(a)).

Общее количество целочисленных бит, необходимых для гарантии того, что переполнение не происходит во скалярном произведении, вычисляется:

n = ceil(log2(sum(abs(a)))) + number of integer bits in b + 1 sign bit

Дополнительный бит знака добавляется только в том случае, если оба a и b подписаны и b достигает своего минимума. Это предотвращает переполнение в случае (-1) * (-1).

Представлено до R2006a