Perform Binary-Point Scaling
This example shows how to perform binary point scaling using a fi object.
Construct fi Object
Use the fi constructor, a = fi(v,s,w,f), to return a fi object with value v, signedness s, word length w, and fraction length f. If s is true (signed), the leading or most significant bit (MSB) in the resulting fi object is always the sign bit. The fraction length f gives the scaling, 2^(-f). The fraction length or the scaling determines the position of the binary point in the fi object.
For example, create a signed 8-bit fi object with a value of 0.5 and a scaling of 2^(-7).
a = fi(0.5,true,8,7)
a =
0.5000
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 8
FractionLength: 7
Fraction Length Positive and Less than Word Length
When the fraction length f is positive and less than the word length, the binary point lies f places to the left of the least significant bit (LSB) and within the word.
For example, in a signed 3-bit fi with fraction length of 1 and value -0.5, the binary point lies 1 place to the left of the LSB. In this case, each bit is set to 1 and the binary equivalent of the fi with its binary point is 11.1.
The real world value of -0.5 is obtained by multiplying each bit by its scaling factor, starting with the LSB and working up to the signed MSB.
(1*2^-1) + (1*2^0) + (-1*2^1) = -0.5
storedInteger(a) returns the stored signed, unscaled integer value -1.
(1*2^0) + (1*2^1) + (-1*2^2) = -1
a = fi(-0.5,true,3,1)
a =
-0.5000
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 3
FractionLength: 1
bin(a)
ans = '111'
storedInteger(a)
ans = int8
-1
Fraction Length Positive and Greater than Word Length
When the fraction length f is positive and greater than the word length, the binary point lies f places to the left of the LSB and outside the word.
For example the binary equivalent of a signed 3-bit word with fraction length of 4 and value of -0.0625 is ._111 Here, _ in the ._111 denotes an unused bit that is not a part of the 3-bit word. The first 1 after the _ is the MSB or the sign bit.
The real world value of -0.0625 is computed as follows (LSB to MSB).
(1*2^-4) + (1*2^-3) + (-1*2^-2) = -0.0625
b = fi(-0.0625,true,3,4)
b =
-0.0625
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 3
FractionLength: 4
bin(b)
ans = '111'
storedInteger(b)
ans = int8
-1
Fraction Length Is Negative Integer and Less than Word Length
When the fraction length f is negative, the binary point lies f places to the right of LSB and is outside the physical word.
For instance, in c = fi(-4,true,3,-2) the binary point lies 2 places to the right of the LSB 111__.. Here, the two right most spaces are unused bits that are not part of the 3-bit word. The right most 1 is the LSB and the leading 1 is the sign bit.
The real world value of -4 is obtained by multiplying each bit by its scaling factor 2^(-f), for instance 2(-(-2)) = 2^(2) for the LSB, and then adding the products together.
(1*2^2) + (1*2^3) +(-1*2^4) = -4
c = fi(-4,true,3,-2)
c =
-4
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 3
FractionLength: -2
bin(c)
ans = '111'
storedInteger(c)
ans = int8
-1
Fraction Length Set Automatically to the Best Precision Possible and Is Negative
Create a signed 3-bit fi where the fraction length is set automatically depending on the value that the fi is supposed to contain. The resulting fi has a value of 6, with a wordlength of 3 bits and a fraction length of -1. Here the binary point is 1 place to the right of the LSB: 011_.. The _ is again an unused bit and the first 1 before the _ is the LSB. The leading 1 is the sign bit.
The real world value of 6 is obtained as follows:
(1*2^1) + (1*2^2) + (-0*2^3) = 6
d = fi(5,true,3)
d =
6
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 3
FractionLength: -1
bin(d)
ans = '011'
storedInteger(d)
ans = int8
3
Interactive fi Binary Point Scaling Example
To run an interactive binary-point scaling example, enter fibinscaling at the MATLAB® Command Window.
This interactive example allows you to change the fraction length of a 3-bit fixed-point number by moving the binary point using a slider. The fraction length can be varied from -3 to 5. You can change the value of the 3 bits to '0' or '1' for either signed or unsigned numbers.
%#ok<*NOPTS,*NASGU>See Also
fi | bin | storedInteger