Beruflich Dokumente
Kultur Dokumente
1 of 12
jar:file:///C:/Program%20Files/MATLAB/R2011a/help/toolbox/fixpoint/...
Fixed-Point Numbers
On this page
About Fixed-Point Numbers
Signed Fixed-Point Numbers
Binary Point Interpretation
Scaling
Quantization
Range and Precision
Constant Scaling for Best Precision
Fixed-Point Data Type and Scaling Notation
Scaled Doubles
Example: Scaled Doubles
Example: Port Data Type Display
A common representation of a binary fixed-point number , either signed or unsigned, is shown in the following figure.
where
bi are the binary digits (bits)
ws is the word length in bits
The most significant bit (MSB) is the leftmost bit, and is represented by location bws1
The least significant bit (LSB) is the rightmost bit, and is represented by location b0
The binary point is shown four places to the left of the LSB
Back to Top
11/26/2014 11:41 AM
2 of 12
jar:file:///C:/Program%20Files/MATLAB/R2011a/help/toolbox/fixpoint/...
Back to Top
Scaling
The dynamic range of fixed-point numbers is much less than floating-point numbers with equivalent word sizes. To avoid
overflow conditions and minimize quantization errors, fixed-point numbers must be scaled.
With the Simulink Fixed Point software, you can select a fixed-point data type whose scaling is defined by its binary point,
or you can select an arbitrary linear scaling that suits your needs. This section presents the scaling choices available for
fixed-point data types.
You can represent a fixed-point number by a general slope and bias encoding scheme
where
V is an arbitrarily precise real-world value.
is the approximate real-world value.
Q, the stored value, is an integer that encodes V.
E
S = F 2 is the slope.
B is the bias.
The slope is partitioned into two components:
E
The scaling modes available to you within this encoding scheme are described in the sections that follow. For detailed
information about how the supported scaling modes effect fixed-point operations, refer to Recommendations for Arithmetic
and Scaling.
Binary-Point-Only Scaling
Binary-point-only or power-of-two scaling involves moving the binary point within the fixed-point word. The advantage of
this scaling mode is to minimize the number of processor arithmetic operations.
With binary-point-only scaling, the components of the general slope and bias formula have the following values:
F=1
E
S = F2 = 2
B=0
The scaling of a quantized real-world number is defined by the slope S, which is restricted to a power of two. The negative
of the power-of-two exponent is called the fraction length. The fraction length is the number of bits to the right of the binary
point. For Binary-Point-Only scaling, specify fixed-point data types as
signed types fixdt(1, WordLength, FractionLength)
unsigned types fixdt(0, WordLength, FractionLength)
11/26/2014 11:41 AM
3 of 12
jar:file:///C:/Program%20Files/MATLAB/R2011a/help/toolbox/fixpoint/...
Integers are a special case of fixed-point data types. Integers have a trivial scaling with slope 1 and bias 0, or equivalently
with fraction length 0. Specify integers as
signed integer fixdt(1, WordLength, 0)
unsigned integer fixdt(0, WordLength, 0)
Unspecified Scaling
Specify fixed-point data types with an unspecified scaling as
fixdt(Signed, WordLength)
Simulink signals, parameters, and states must never have unspecified scaling. When scaling is unspecified, you must use
some other mechanism such as automatic best precision scaling to determine the scaling that the Simulink software uses.
Back to Top
Quantization
The quantization Q of a real-world value V is represented by a weighted sum of bits. Within the context of the general
slope and bias encoding scheme, the value of an unsigned fixed-point quantity is given by
where
bi are binary digits, with bi = 1,0, for i = 0,1,...,ws1.
The word size in bits is given by ws, with ws = 1, 2, 3,..., 128.
E
S is given by F2 , where the scaling is unrestricted because the binary point does not have to be contiguous with
the word.
i
Note that you cannot discern whether these numbers are signed or unsigned data types merely by inspection since this
information is not explicitly encoded within the word.
The binary number 0011.0101 yields the same value for the unsigned and two's complement representation because the
11/26/2014 11:41 AM
4 of 12
jar:file:///C:/Program%20Files/MATLAB/R2011a/help/toolbox/fixpoint/...
MSB = 0. Setting B = 0 and using the appropriate weights, bit multipliers, and scaling, the value is
Conversely, the binary number 1011.0101 yields different values for the unsigned and two's complement representation
since the MSB = 1.
Setting B = 0 and using the appropriate weights, bit multipliers, and scaling, the unsigned value is
Back to Top
Range
The range of representable numbers for an unsigned and two's complement fixed-point number of size ws, scaling S, and
bias B is illustrated in the following figure.
ws
For both the signed and unsigned fixed-point numbers of any data type, the number of different bit patterns is 2 .
For example, if the fixed-point data type is an integer with scaling defined as S =1 and B = 0, then the maximum unsigned
ws1
value is 2
, because zero must be represented. In two's complement, negative numbers must be represented as well
ws1
as zero, so the maximum value is 2
1. Additionally, since there is only one representation for zero, there must be an
ws1
ws1
unequal number of positive and negative numbers. This means there is a representation for 2
but not for 2
.
Precision
The precision of a data type is given by the slope. In this usage, precision means the difference between neighboring
11/26/2014 11:41 AM
5 of 12
jar:file:///C:/Program%20Files/MATLAB/R2011a/help/toolbox/fixpoint/...
representable values.
Name
Data Type
Low Limit
High Limit
Unsigned
Integer
fixdt(0,ws,0)
Signed Integer
fixdt(1,ws,0)
-2
ws - 1
ws
ws - 1- fl
Signed Binary
Point
fixdt(1,ws,fl)
-2
Unsigned Slope
Bias
fixdt(0,ws,s,b)
Signed Slope
Bias
fixdt(1,ws,s,b)
-s(2
(2
ws
ws - 1
)+b
- 1)2
s(2
ws
-1
ws - 1
s(2
-1
ws - 1
(2
Default Scaling
(~Precision)
-fl
- 1)2
-fl
- 1) + b
ws - 1
- 1) + b
-fl
-fl
Scaling
2
2
2
2
2
Precision
2.0
-256, 254
0, 510
1.0
-128, 127
0, 255
-1
0.5
-64, 63.5
0, 127.5
-2
0.25
-32, 31.75
0, 63.75
-3
0.125
-16, 15.875
0, 31.875
11/26/2014 11:41 AM
6 of 12
Scaling
2
2
2
2
2
jar:file:///C:/Program%20Files/MATLAB/R2011a/help/toolbox/fixpoint/...
Precision
-4
0.0625
-8, 7.9375
0, 15.9375
-5
0.03125
-4, 3.96875
0, 7.96875
-6
0.015625
-2, 1.984375
0, 3.984375
-7
0.0078125
-1, 0.9921875
0, 1.9921875
-8
0.00390625
-0.5, 0.49609375
0, 0.99609375
Bias
Slope/Precision
1.25
-159, 159.75
1, 319.75
0.625
-79, 80.375
1, 160.375
0.3125
-39, 40.6875
1, 80.6875
0.15625
-19, 20.84375
1, 40.84375
0.078125
-9, 10.921875
1, 20.921875
0.0390625
-4, 5.9609375
1, 10.9609375
0.01953125
-1.5, 3.48046875
1, 5.98046875
0.009765625
-0.25, 2.240234375
1, 3.490234375
0.0048828125
0.375, 1.6201171875
1, 2.2451171875
Back to Top
11/26/2014 11:41 AM
7 of 12
jar:file:///C:/Program%20Files/MATLAB/R2011a/help/toolbox/fixpoint/...
To understand how you might use this scaling mode, consider a 3-by-3 matrix of doubles, M, defined as
3.3333e-003
3.3333e-002
3.3333e-001
3.3333e-004
3.3333e-003
3.3333e-002
3.3333e-005
3.3333e-004
3.3333e-003
Now suppose you specify M as the value of the Gain parameter for a Gain block. The results of specifying your own
scaling versus using the constant scaling mode are described here:
Specified Scaling
Suppose the matrix elements are converted to a signed, 10-bit generalized fixed-point data type with
-7
binary-point-only scaling of 2 (that is, the binary point is located seven places to the left of the right most bit). With
this data format, M becomes
0
3.1250e-002
3.3594e-001
0
0
3.1250e-002
0
0
0
Note that many of the matrix elements are zero, and for the nonzero entries, the scaled values differ from the
original values. This is because a double is converted to a binary word of fixed size and limited precision for each
element. The larger and more precise the conversion data type, the more closely the scaled values match the
original values.
Constant Scaling for Best Precision
If M is scaled based on its largest matrix value, you obtain
2.9297e-003
3.3203e-002
3.3301e-001
0
2.9297e-003
3.3203e-002
0
0
2.9297e-003
Best precision would automatically select the fraction length that minimizes the quantization error. Even though
precision was maximized for the given word length, quantization errors can still occur. In this example, a few
elements still quantize to zero.
Back to Top
11/26/2014 11:41 AM
8 of 12
jar:file:///C:/Program%20Files/MATLAB/R2011a/help/toolbox/fixpoint/...
where
V is the real-world value.
is the approximate real-world value.
E
S = F2 is the slope.
F is the slope adjustment factor.
E is the fixed power-of-two exponent.
Q is the stored integer.
B is the bias.
For more information, see Scaling.
The following table provides a key for various symbols that appear in Simulink products to indicate the data type and
scaling of a fixed-point value.
Symbol
Description
Example
ufix
sfix
fltu
flts
10^
Negative
Decimal point
Container Type
Number Encoding
p2 equals 0.2
Scaling Encoding
11/26/2014 11:41 AM
9 of 12
jar:file:///C:/Program%20Files/MATLAB/R2011a/help/toolbox/fixpoint/...
Symbol
Description
Example
Slope
Bias
C,c,D, or d
T or t
Back to Top
Scaled Doubles
What are Scaled Doubles?
Scaled doubles are a hybrid between floating-point and fixed-point numbers. The Simulink Fixed Point software stores
them as doubles with the scaling, sign, and word length information retained. For example, the storage container for a
fixed-point data type sfix16_En14 is int16. The storage container of the equivalent scaled doubles data type,
flts16_En14 is floating-point double. For details of the fixed-point scaling notation, see Fixed-Point Data Type and
Scaling Notation. The Simulink Fixed Point software applies the scaling information to the stored floating-point double to
obtain the real-world value. Storing the value in a double almost always eliminates overflow and precision issues.
What is the Difference between Scaled Double and Double Data Types?. The storage container for both the scaled
double and double data types is floating-point double. Therefore both data type override settings, Double and Scaled
double, provide the range and precision advantages of floating-point doubles. Scaled doubles retain the information
about the specified data type and scaling, but doubles do not retain this information.
11/26/2014 11:41 AM
10 of 12
jar:file:///C:/Program%20Files/MATLAB/R2011a/help/toolbox/fixpoint/...
Consider an example where you are storing 0.75001 degrees Celsius in a data type sfix16_En13. For this data type:
The slope, S = 2
The bias, B = 0.
13
B = 0.
= SQ = 2
13
Q = 0.75001.
= 0.75001/2
-13
= 6144.08192.
The data type sfix16_En13 can only represent integers, so the ideal value of Q is quantized to 6144 causing precision
loss.
If you override the data type sfix16_En13 with Double, the data type changes to Double and you lose the information
about the scaling. The stored-value equals the real-world value 0.75001.
If you override the data type sfix16_En13 with Scaled Double, the data type changes to flts16_En13. The scaling
is still given by _En13 and is identical to that of the original data type. The only difference is the storage container used to
hold the stored value which is now double so the stored-value is 6144.08192. This example demonstrates one
advantage of using scaled doubles: the virtual elimination of quantization errors.
11/26/2014 11:41 AM
11 of 12
jar:file:///C:/Program%20Files/MATLAB/R2011a/help/toolbox/fixpoint/...
In this model:
The Constant block output data type is fixdt(1,8,4).
The Bitwise Operator block uses the AND operator and the bit mask 0xFF to pass the input value to the output.
Because the Treat mask as parameter is set to Stored Integer, the block outputs the stored integer value, S,
of its input. The encoding scheme is V=SQ+B, where V is the real-world value and Q is the stored integer value.
For more information, see Scaling.
11/26/2014 11:41 AM
12 of 12
jar:file:///C:/Program%20Files/MATLAB/R2011a/help/toolbox/fixpoint/...
The port display for fixed-point signals consists of three parts: the data type, the number of bits, and the scaling. These
three parts reflect the block Output data type parameter value or the data type and scaling that is inherited from the
driving block or through back propagation.
The following model displays its port data types.
In the model, the data type displayed with the In1 block indicates that the output data type name is sfix16_Sp2_B10.
This corresponds to fixdt(1, 16, 0.2, 10) which is a signed 16 bit fixed-point number with slope 0.2 and bias
10.0. The data type displayed with the In2 block indicates that the output data type name is sfix16_En6. This
corresponds to fixdt(1, 16, 6) which is a signed 16 bit fixed-point number with fraction length of 6.
Back to Top
Was this topic helpful?
Overview
Yes
No
Floating-Point Numbers
11/26/2014 11:41 AM