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