Ways to Construct fi Objects - MATLAB & Simulink (original) (raw)
You can create a fi
object by using a fi
constructor function or you can build fi
object constructors using theInsert fi Constructor dialog box. You can also use afi
constructor function to copy an existing fi
object.
numerictype
and fimath
properties can be specified directly in the fi
constructor function or you can use an existingnumerictype
or fimath
object to construct afi
object. The value of a property is taken from the last time it is set.
You can write a reusable MATLABĀ® algorithm by keeping the data types of the algorithmic variables in a separate types table.
Use fi
Constructor to Create fi
Objects
These examples show you several different ways to construct fi
objects.
Construct fi
Object with Default Data Type and Property Values
Create a fi
object with the default data type and a value of 0
.
a =
0
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
The default fi
constructor syntax creates a signedfi
object with a value of 0
, word length of 16 bits, and fraction length of 15 bits.
Note
The fi
constructor creates the fi
object using a RoundingMethod
ofNearest
and an OverflowAction
of Saturate
. If you construct a fi
from floating-point values, the default RoundingMethod
and OverflowAction
property settings are not used.
For information on the display format of fi
objects, refer to View Fixed-Point Data.
Copy a fi
Object
To copy a fi
object, use assignment.
a =
3.1416
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 13
b =
3.1416
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 13
Construct fi
Object with Property Name-Value Pair Arguments
You can use property name-value pair arguments to set fi
object properties in the fi
constructor. Thefi
object has three types of properties:
For example, specify the fimath
object properties for the rounding method and overflow action to use when performing fixed-point arithmetic.
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: FullPrecision
If you specify at least one fimath
object property in thefi
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 thefi
object constructor, the fi
object uses default fimath
values and has no localfimath
.
You can use the isfimathlocal function to determine whether a fi
object has a localfimath
associated with it.
Construct fi
Object Using numerictype
Object
You can create a fi
object using anumerictype
object. The numerictype Properties define the data type and scaling attributes of a fi
object.
Create a numerictype
object with default property values.
T =
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
Create a fi
object from the numerictype
object T
.
a =
1.0000
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
You can use a fimath
object and anumerictype
object in the fi
constructor.
F = fimath('RoundingMethod','Nearest',... 'OverflowAction','Saturate',... 'ProductMode','FullPrecision',... 'SumMode','FullPrecision')
F =
RoundingMethod: Nearest
OverflowAction: Saturate
ProductMode: FullPrecision
SumMode: FullPrecision
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 afi
object using a fimath
object and a numerictype
object.
Construct fi
Object Using fimath
Object
You can create a fi
object using a specificfimath
object. When you do so, a localfimath
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.
For example, create a fimath
object that specifies the rounding method, overflow action, product mode, and sum mode to use.
F = fimath('RoundingMethod','Nearest',... 'OverflowAction','Saturate',... 'ProductMode','FullPrecision',... 'SumMode','FullPrecision')
F =
RoundingMethod: Nearest
OverflowAction: Saturate
ProductMode: FullPrecision
SumMode: FullPrecision
Use dot notation to change the overflow action of thefimath
object F
.
F.OverflowAction = 'Wrap'
F =
RoundingMethod: Nearest
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecision
Create a fi
object using the fimath
object 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 afimath
object while specifying variousnumerictype
properties at creation time. For example, create an unsigned fi
object with a value ofpi
, word length of 8 bits, fraction length of 6 bits, andfimath
F
.
b =
3.1406
DataTypeMode: Fixed-point: binary point scaling
Signedness: Unsigned
WordLength: 8
FractionLength: 6
RoundingMethod: Nearest
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecision
Use the Insert fi Constructor Dialog Box to Build fi
Object Constructors
You can build fi
object constructors in MATLAB by 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, create a signed fi
object with a value ofpi
, a word length of 16 bits and a fraction length of 13 bits.
- On the MATLABHome tab, in the File section, click New Script.
- On the Editor tab, in the Code section, click the Specify fixed-point data button arrow
. 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
- Value =
- To insert the
fi
object constructor in your file, place your cursor at the desired location in the file, then clickOK on the Insert fi Constructor dialog box. Clicking OK closes the Insert fi Constructor dialog box and automatically populates thefi
object constructor in your file.
Determine Property Precedence
The value of a property of a fi
object is taken from the last time it is set. For example, create a numerictype
object with theSigned
set to true
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
Create a fi
object that specifies thenumerictype
property T
after the Signed
property. The resultingfi
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
Create a second fi
object that specifies thenumerictype
T
before the Signed
property. The resultingfi
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
Create fi
Objects for Use in a Types Table
You 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);
See Also
fi | fimath | fipref | numerictype