# innerprodintbits

Number of integer bits needed for fixed-point inner product

## Syntax

```innerprodintbits(a,b) ```

## Description

`innerprodintbits(a,b)` computes the minimum number of integer bits necessary in the inner product of `a'*b` to guarantee that no overflows occur and to preserve best precision.

• `a` and `b` are `fi` vectors.

• The values of `a` are known.

• Only the numeric type of `b` is relevant. The values of `b` are ignored.

## Examples

The primary use of this function is to determine the number of integer bits necessary in the output `Y` of an FIR filter that computes the inner product between constant coefficient row vector `B` and state column vector `Z`. For example,

``` for k=1:length(X); Z = [X(k);Z(1:end-1)]; Y(k) = B * Z; end ```

## Algorithms

In general, an inner product grows `log2(n)` bits for vectors of length `n`. However, in the case of this function the vector `a` is known and its values do not change. This knowledge is used to compute the smallest number of integer bits that are necessary in the output to guarantee that no overflow will occur.

The largest gain occurs when the vector `b` has the same sign as the constant vector `a`. Therefore, the largest gain due to the vector `a` is `a*sign(a')`, which is equal to `sum(abs(a))`.

The overall number of integer bits necessary to guarantee that no overflow occurs in the inner product is computed by:

```n = ceil(log2(sum(abs(a)))) + number of integer bits in b + 1 sign bit ```

The extra sign bit is only added if both `a` and `b` are signed and `b` attains its minimum. This prevents overflow in the event of (-1)*(-1).

## Version History

Introduced before R2006a