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