Количество целочисленных битов, необходимых для внутреннего продукта с фиксированной точкой
innerprodintbits(a,b)
innerprodintbits(a,b) вычисляет минимальное количество целых битов, необходимых во внутреннем произведении a'*b гарантировать отсутствие переполнений и сохранять наилучшую точность.
a и b являются fi векторы.
Значения a известны.
Только числовой тип b является актуальным. Значения b игнорируются.
Основное использование этой функции заключается в определении количества целочисленных битов, необходимых для вывода Y фильтра FIR, который вычисляет внутреннее произведение между вектором строки с постоянным коэффициентом 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).