## Conversions and Arithmetic Operations

This example uses the Discrete FIR Filter block to illustrate when parameters are converted from a double to a fixed-point number, when the input data type is converted to the output data type, and when the rules for addition, subtraction, and multiplication are applied.

**Note**

If a block can perform all four arithmetic operations, then the rules for multiplication and division are applied first. The Discrete FIR Filter block is an example of this.

Suppose you configure the Discrete FIR Filter block for two outputs, where the first output is given by

$${y}_{1}\left(k\right)=13\cdot u\left(k\right)+11\cdot u\left(k-1\right)-7\cdot u\left(k-2\right),$$

and the second output is given by

$${y}_{2}\left(k\right)=6\cdot u\left(k\right)-5\cdot u\left(k-1\right).$$

Additionally, the initial values of *u*(*k*–1) and *u*(*k*–2) are given by 0.8 and 1.1, respectively, and all inputs, parameters,
and outputs have binary-point-only scaling.

To configure the Discrete FIR Filter block for this situation, on the
**Main** pane of its dialog box, you must specify the
**Coefficients** parameter as `[13 11 -7; 6 -5 0]`

and the **Initial states** parameter as `[0.8 1.1]`

,
as shown here.

Similarly, configure the options on the **Data Types** pane of the
block dialog box to appear as follows:

The Discrete FIR Filter block performs parameter conversions and block operations in the following order:

The

**Coefficients**parameter is converted offline from doubles to the**Coefficients**data type using round-to-nearest and saturation.The

**Initial states**parameter is converted offline from doubles to the input data type using round-to-nearest and saturation.The coefficients and inputs are multiplied together for the initial time step for both outputs. For

*y*_{1}(0), the operations 13·*u*(0), 11·0.8, and –7·1.1 are performed, while for*y*_{2}(0), the operations 6·*u*(0) and –5·0.8 are performed.The results of these operations are stored as

**Product output**.The sum is carried out in

**Accumulator**. The final summation result is then converted to**Output**.Steps 2 and 3 repeat for subsequent time steps.