You can create fi objects using Fixed-Point Designer™ software in any of the following ways:
To get started, to create a fi object with the default data
type and a value of 0:
a = fi(0)
a =
0
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
This constructor syntax creates a signed fi object with a value
of 0, word length of 16 bits, and fraction length of 15 bits. Because you did not
specify any fimath object properties in the fi
constructor, the resulting fi object a has no
local fimath.
To see all of the fi, sfi, and ufi constructor syntaxes, refer
to the respective reference pages.
For information on the display format of fi objects, refer to
View Fixed-Point Data.
The following examples show you several different ways to construct
fi objects. For other, more basic examples of constructing
fi objects, see the Examples section of the following
constructor function reference pages:
Note
The fi constructor creates the fi object
using a RoundingMethod of Nearest and
an OverflowAction of Saturate. If you
construct a fi from floating-point values, the default
RoundingMethod and OverflowAction
property settings are not used.
You can use property name/property value pairs to set fi
and fimath object properties when you create the
fi object:
a = fi(pi, 'RoundingMethod','Floor', 'OverflowAction','Wrap')
a =
3.1415
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 13
RoundingMethod: Floor
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecisionYou do not have to specify every fimath object property in
the fi constructor. The fi object uses
default values for all unspecified fimath object
properties.
If you specify at least one fimath object property
in the fi constructor, the fi
object has a local fimath object. The
fi object uses default values for the remaining
unspecified fimath object properties.
If you do not specify any fimath object properties
in the fi object constructor, the
fi object uses default fimath
values.
You can use a numerictype object to define a
fi object:
T = numerictype
T =
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
a = fi(pi, T)
a =
1.0000
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
You can also use a fimath object with a
numerictype object to define a fi
object:
F = fimath('RoundingMethod', 'Nearest',... 'OverflowAction', 'Saturate',... 'ProductMode','FullPrecision',... 'SumMode','FullPrecision')
F =
RoundingMethod: Nearest
OverflowAction: Saturate
ProductMode: FullPrecision
SumMode: FullPrecision
a = fi(pi, T, F)
a =
1.0000
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
RoundingMethod: Nearest
OverflowAction: Saturate
ProductMode: FullPrecision
SumMode: FullPrecision
Note
The syntax a = fi(pi,T,F) is equivalent to a =
fi(pi,F,T). You can use both statements to define a
fi object using a fimath object
and a numerictype object.
You can create a fi object using a specific
fimath object. When you do so, a local
fimath object is assigned to the fi
object you create. If you do not specify any numerictype
object properties, the word length of the fi object defaults
to 16 bits. The fraction length is determined by best precision
scaling:
F = fimath('RoundingMethod', 'Nearest',... 'OverflowAction', 'Saturate',... 'ProductMode','FullPrecision',... 'SumMode','FullPrecision')
F =
RoundingMethod: Nearest
OverflowAction: Saturate
ProductMode: FullPrecision
SumMode: FullPrecision
F.OverflowAction = 'Wrap'F =
RoundingMethod: Nearest
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecision
a = fi(pi, F)
a =
3.1416
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 13
RoundingMethod: Nearest
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecision
You can also create fi objects using a
fimath object while specifying various
numerictype properties at creation
time:
b = fi(pi, 0, F)
b =
3.1416
DataTypeMode: Fixed-point: binary point scaling
Signedness: Unsigned
WordLength: 16
FractionLength: 14
RoundingMethod: Nearest
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecision
c = fi(pi, 0, 8, F)
c =
3.1406
DataTypeMode: Fixed-point: binary point scaling
Signedness: Unsigned
WordLength: 8
FractionLength: 6
RoundingMethod: Nearest
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecisiond = fi(pi, 0, 8, 6, F)
d =
3.1406
DataTypeMode: Fixed-point: binary point scaling
Signedness: Unsigned
WordLength: 8
FractionLength: 6
RoundingMethod: Nearest
OverflowAction: wrap
ProductMode: FullPrecision
SumMode: FullPrecision
When you are working with files in MATLAB®, you can build your fi object constructors
using the Insert fi Constructor dialog box. After
specifying the value and properties of the fi object in the
dialog box, you can insert the prepopulated fi object
constructor at a specific location in your file.
For example, to create a signed fi object with a value of
pi, a word length of 16 bits and a fraction length of 13 bits:
On the Home tab, in the File section, click New > Script to open the MATLAB Editor.
On the Editor tab, in the
Edit section, click
in the Insert
button group. Click Insert fi... to open the
Insert fi Constructor dialog box.
Use the edit boxes and drop-down menus to specify the following
properties of the fi object:
Value =
pi
Data type mode =
Fixed-point: binary point
scaling
Signedness =
Signed
Word length =
16
Fraction length =
13

To insert the fi object constructor in your file,
place your cursor at the desired location in the file, and click
OK on the Insert fi
Constructor dialog box. Clicking
OK closes the Insert fi
Constructor dialog box and automatically populates the
fi object constructor in your file:
![]()
The value of a property is taken from the last time it is set. For example,
create a numerictype object with a value of
true for the Signed property and a
fraction length of 14:
T = numerictype('Signed', true, 'FractionLength', 14)
T =
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 14 Now, create the following fi object in which you specify
the numerictype property after the
Signed property, so that the resulting
fi object is signed:
a = fi(pi,'Signed',false,'numerictype',T)
a =
1.9999
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 14
Contrast the fi object in this code sample with the
fi object in the following code sample. The
numerictype property in the following code sample is
specified before the Signed property, so
the resulting fi object is unsigned:
b = fi(pi,'numerictype',T,'Signed',false)
b =
3.1416
DataTypeMode: Fixed-point: binary point scaling
Signedness: Unsigned
WordLength: 16
FractionLength: 14
To copy a fi object, simply use assignment:
a = fi(pi)
a =
3.1416
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 13
b = a
b =
3.1416
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 13You can write a reusable MATLAB algorithm by keeping the data types of the algorithmic variables in a separate types table. For example,
function T = mytypes(dt) switch dt case 'double' T.b = double([]); T.x = double([]); T.y = double([]); case 'fixed16' T.b = fi([],1,16,15); T.x = fi([],1,16,15); T.y = fi([],1,16,14); end end
Cast the variables in the algorithm to the data types in the types table as described in Manual Fixed-Point Conversion Best Practices.
function [y,z]=myfilter(b,x,z,T) y = zeros(size(x),'like',T.y); for n=1:length(x) z(:) = [x(n); z(1:end-1)]; y(n) = b * z; end end
In a separate test file, set up input data to feed into your algorithm, and specify the data types of the inputs.
% Test inputs b = fir1(11,0.25); t = linspace(0,10*pi,256)'; x = sin((pi/16)*t.^2); % Linear chirp % Cast inputs T=mytypes('fixed16'); b=cast(b,'like',T.b); x=cast(x,'like',T.x); z=zeros(size(b'),'like',T.x); % Run [y,z] = myfilter(b,x,z,T);