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