## Cast from Doubles to Fixed Point

This example shows you how to simulate a continuous real-world doubles signal using a
generalized fixed-point data type. Using the `fxpdemo_dbl2fix`

model,
you can explore many of the important features of the Fixed-Point Designer™ software, including

Data types

Scaling

Rounding

Logging minimum and maximum simulation values to the workspace

Overflow handling

To open the model, at the MATLAB^{®} command line, enter

fxpdemo_dbl2fix

In this example, you configure the Signal Generator block to output a sine wave signal with an amplitude
defined on the interval `[-5 5]`

. The Signal Generator
block always outputs double-precision numbers.

The `Dbl-to-FixPt`

Data Type Conversion block converts the
double-precision numbers from the Signal Generator block into one of the
Fixed-Point Designer data types. For simplicity, the size of the output signal is 5 bits in
this example.

The `FixPt-to-Dbl`

Data Type Conversion block converts one of the Fixed-Point Designer data types into a Simulink^{®} data type. In this example, it outputs double-precision numbers.

### Simulate Using Binary-Point-Only Scaling

When using binary-point-only scaling, your goal is to find the optimal
power-of-two exponent *E*, as defined in Scaling. For this scaling mode, the fractional slope
*F* is 1 and there is no bias.

To set up the model to use binary-point-only scaling:

Configure the Signal Generator block to output a sine wave signal with an amplitude defined on the interval

`[-5 5]`

.Double-click the Signal Generator block to open the

**Block Parameters**dialog.Set the

**Wave form**parameter to`sine`

.Set the

**Amplitude**parameter to`5`

.Click

**OK**.

Configure the Data Type Conversion (Dbl-to-FixPt) block.

Double-click the

**Dbl-to-FixPt**block to open the**Block Parameters**dialog.Verify that the

**Output data type**parameter is`fixdt(1,5,2)`

. This specifies a 5-bit, signed, fixed-point number with scaling`2^-2`

, which puts the binary point two places to the left of the rightmost bit. Hence the maximum value is 011.11 = 3.75, the minimum value is 100.00 = -4.00, and the precision is (1/2)^{2}= 0.25.Verify that the

**Integer rounding mode**parameter is set to`Floor`

. This rounds the fixed-point result toward negative infinity.Select the

**Saturate on integer overflow**check box to prevent the block from wrapping on overflow.Click

**OK**.

To simulate the model, in the

**Simulation**tab, click**Run**.

The Scope displays the ideal and the fixed-point simulation results.

The simulation shows the quantization effects of fixed-point arithmetic. Using a 5-bit word with a precision
of (1/2)^{2} = 0.25 produces a discretized output that does
not span the full range of the input signal.

To span the complete range of the input signal with 5 bits using binary-point-only
scaling, set the output scaling to `2^-1`

. This puts the binary
point one place to the left of the rightmost bit, giving a maximum value of 0111.1 =
7.5 and a minimum value of 1000.0 = -8.0. However, the precision is reduced to
(1/2)^{1} = 0.5. If you want to span the complete range
of the input signal with 5 bits using binary-point-only scaling, then your only
option is to sacrifice precision. Hence, the output scaling is
`2^-1`

, which puts the binary point one place to the left of
the rightmost bit. This scaling gives a maximum value of 0111.1 = 7.5, a minimum
value of 1000.0 = -8.0, and a precision of (1/2)^{1} =
0.5.

To see the effect of reducing the precision to 0.5, set the **Output data
type** parameter of the `Dbl-to-FixPt`

Data Type Conversion block to `fixdt(1,5,1)`

and
rerun the simulation.

### Simulate Using [Slope Bias] Scaling

When using [Slope Bias] scaling, your goal is to find the optimal fractional slope
*F* and fixed power-of-two exponent *E*,
as defined in Scaling. There is no bias for this example because
the sine wave is defined on the interval `[-5 5]`

.

To find the slope, you begin by assuming a fixed power-of-two exponent of -2. To
find the fractional slope, divide the maximum value of the sine wave by the maximum
value of the scaled 5-bit number. The result is 5.00/3.75 = 1.3333. The slope (and
precision) is 1.3333(0.25) = 0.3333. You specify the [Slope Bias] scaling as [0.3333
0] by entering the expression `fixdt(1,5,0.3333,0)`

as the value of
the **Output data type** parameter.

You could also specify a fixed power-of-two exponent of -1 and a corresponding
fractional slope of 0.6667. The resulting slope is the same since
*E* is reduced by 1 bit but *F* is
increased by 1 bit. The Fixed-Point Designer software would automatically store *F* as 1.3332
and *E* as -2 because of the normalization condition of 1 ≤
*F* < 2.

To set up the model to use [Slope Bias] scaling:

Configure the Signal Generator block to output a sine wave signal with an amplitude defined on the interval

`[-5 5]`

.Double-click the Signal Generator block to open the

**Block Parameters**dialog.Set the

**Wave form**parameter to`sine`

.Set the

**Amplitude**parameter to`5`

.Click

**OK**.

Configure the

`Dbl-to-FixPt`

Data Type Conversion block.Double-click the

**Dbl-to-FixPt**block to open the**Block Parameters**dialog.To specify a [Slope Bias] scaling of [0.3333 0], set the

**Output data type**parameter to`fixdt(1,5,0.3333,0)`

.Verify that the

**Integer rounding mode**parameter is`Floor`

. This rounds the fixed-point result toward negative infinity.Select the

**Saturate on integer overflow**check box to prevent the block from wrapping on overflow.Click

**OK**.

To simulate the model, in the

**Simulation**tab, click**Run**.

The Scope displays the ideal and the fixed-point simulation results.

If you do not know the slope, you can achieve reasonable simulation results by selecting your scaling based on the formula

$$\frac{\left(max\_value-min\_value\right)}{{2}^{ws}-1},$$

where

*max_value*is the maximum value to be simulated*min_value*is the minimum value to be simulated*ws*is the word size in bits2

^{ws}- 1 is the largest value of a word with size*ws*

For this example, the formula produces a slope of 0.32258.