Количество целочисленных бит, необходимых для скалярного произведения с фиксированной точкой
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).