fi オブジェクトの作成方法
コンストラクター関数 fi を使用して fi オブジェクトを作成するか、[fi コンストラクターの挿入] ダイアログ ボックスを使用して fi オブジェクト コンストラクターを作成できます。また、コンストラクター関数 fi を使用して既存の fi オブジェクトをコピーすることもできます。
コンストラクター関数 fi では numerictype プロパティと fimath プロパティを直接指定できます。または、既存の numerictype オブジェクトまたは fimath オブジェクトを使用して fi オブジェクトを作成できます。プロパティの値は、前回の設定から取得されます。
アルゴリズムの変数のデータ型を別の型テーブルに維持することで、再利用可能な MATLAB® アルゴリズムを記述できます。
fi コンストラクターを使用した fi オブジェクトの作成
以下の例は、fi オブジェクトを作成するさまざまな方法を示しています。
既定のデータ型とプロパティ値を使用した fi オブジェクトの作成
既定のデータ型と値 0 をもつ fi オブジェクトを作成します。
a = fi(0)
a =
0
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
既定の fi コンストラクター構文によって、値が 0、語長が 16 ビット、小数部の長さが 15 ビットの符号付き fi オブジェクトが作成されます。
メモ
fi コンストラクターは Nearest の RoundingMethod と Saturate の OverflowAction を使用して fi オブジェクトを作成します。浮動小数点値から fi を作成する場合、RoundingMethod および OverflowAction プロパティの既定の設定は使用されません。
fi オブジェクトの表示形式の詳細は、固定小数点データの表示を参照してください。
fi オブジェクトのコピー
fi オブジェクトをコピーするには、代入を使用します。
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: 13プロパティの名前と値のペアの引数を使用した fi オブジェクトの作成
プロパティの名前と値のペアの引数を使用して、fi コンストラクターで fi オブジェクトのプロパティを設定できます。fi オブジェクトには次の 3 種類のプロパティがあります。
たとえば、固定小数点演算の実行時に使用する丸め手法とオーバーフロー アクションの fimath オブジェクト プロパティを指定します。
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: FullPrecisionfi コンストラクターで fimath オブジェクト プロパティを少なくとも 1 つ指定した場合は、fi オブジェクトにローカルの fimath オブジェクトがあります。fi オブジェクトは、残りの未指定の fimath オブジェクト プロパティに既定値を使用します。
fi オブジェクト コンストラクターで fimath オブジェクト プロパティを指定しなかった場合、fi オブジェクトは既定の fimath 値を使用するため、このオブジェクトにはローカル fimath がありません。
関数 isfimathlocal を使用して、fi オブジェクトに関連付けられたローカル fimath があるかどうかを判断できます。
numerictype オブジェクトを使用した fi オブジェクトの作成
numerictype オブジェクトを使用して fi オブジェクトを作成できます。numerictype のプロパティは、fi オブジェクトのデータ型とスケーリングの属性を定義します。
numerictype オブジェクトを既定のプロパティ値で作成します。
T = numerictype
T =
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
numerictype オブジェクト T から fi オブジェクトを作成します。
a = fi(pi,T)
a =
1.0000
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
fi コンストラクターで fimath オブジェクトと numerictype オブジェクトを使用できます。
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
メモ
構文 a = fi(pi,T,F) は a = fi(pi,F,T) と等価です。両方のステートメントで fimath オブジェクトと numerictype オブジェクトを使用して fi オブジェクトを定義できます。
fimath オブジェクトを使用した fi オブジェクトの作成
特定の fimath オブジェクトを使用して fi オブジェクトを作成できます。そのとき、作成した fi オブジェクトにローカルの fimath オブジェクトが割り当てられます。numerictype オブジェクトのどのプロパティも指定しないと、fi オブジェクトの語長は既定の 16 ビットになります。小数部の長さは、最大精度のスケーリングによって決まります。
たとえば、使用する丸め手法、オーバーフロー アクション、乗算モード、および加算モードを指定する fimath オブジェクトを作成します。
F = fimath('RoundingMethod','Nearest',... 'OverflowAction','Saturate',... 'ProductMode','FullPrecision',... 'SumMode','FullPrecision')
F =
RoundingMethod: Nearest
OverflowAction: Saturate
ProductMode: FullPrecision
SumMode: FullPrecision
ドット表記を使用して、fimath オブジェクト F のオーバーフロー アクションを変更します。
F.OverflowAction = 'Wrap'F =
RoundingMethod: Nearest
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecision
fimath オブジェクト F を使用して fi オブジェクトを作成します。
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
また、作成時にさまざまな numerictype プロパティを指定する一方で、fimath オブジェクトを使用して fi オブジェクトを作成することもできます。たとえば、fimath F を使用して値 pi、語長 8 ビット、小数部の長さ 6 ビットの符号なし fi オブジェクトを作成します。
b = fi(pi,0,8,6,F)
b =
3.1406
DataTypeMode: Fixed-point: binary point scaling
Signedness: Unsigned
WordLength: 8
FractionLength: 6
RoundingMethod: Nearest
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecision[fi コンストラクターの挿入] ダイアログ ボックスを使用した fi オブジェクト コンストラクターの作成
MATLAB で [fi コンストラクターの挿入] ダイアログ ボックスを使用して fi オブジェクト コンストラクターを作成できます。このダイアログ ボックスで fi オブジェクトの値とプロパティを指定した後、事前入力されている fi オブジェクト コンストラクターをファイルの特定の場所に挿入できます。
たとえば、値が pi、語長が 16 ビット、小数部の長さが 13 ビットの符号付き fi オブジェクトを作成します。
MATLAB の [ホーム] タブの [ファイル] セクションで、[新規スクリプト] をクリックします。
[エディター] タブの [コード] セクションで、[固定小数点データを指定します] ボタンの矢印
をクリックします。[fi を挿入] をクリックして [fi コンストラクターの挿入] ダイアログ ボックスを開きます。エディット ボックスとドロップダウン メニューを使用して、
fiオブジェクトの以下のプロパティを指定します。値 =
piData type mode =
Fixed-point:binary point scalingSignedness =
Signed語長 =
16小数部の長さ =
13
ファイルに
fiオブジェクト コンストラクターを挿入するには、ファイルの目的の場所にカーソルを置いて、[fi コンストラクターの挿入] ダイアログ ボックスで [OK] をクリックします。[OK] をクリックすると、[fi コンストラクターの挿入] ダイアログ ボックスが閉じて、ファイルにfiオブジェクト コンストラクターが自動的に入力されます。fi(pi, 1, 16, 13)
プロパティの優先順位の決定
fi オブジェクトのプロパティの値は、前回の設定から取得されます。たとえば、Signed が true に設定された、小数部の長さが 14 の numerictype オブジェクトを作成します。
T = numerictype('Signed',true,... 'FractionLength',14)
T =
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 14 Signed プロパティの "後" に numerictype プロパティ T を指定する fi オブジェクトを作成します。結果の fi オブジェクトは符号付きになります。
a = fi(pi,'Signed',false,... 'numerictype',T)
a =
1.9999
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 14
Signed プロパティの "前" に numerictype T を指定する 2 番目の fi オブジェクトを作成します。結果の fi オブジェクトは符号なしになります。
b = fi(pi,'numerictype',T,... 'Signed',false)
b =
3.1416
DataTypeMode: Fixed-point: binary point scaling
Signedness: Unsigned
WordLength: 16
FractionLength: 14
型テーブルで使用する fi オブジェクトの作成
アルゴリズムの変数のデータ型を別の型テーブルに維持することで、再利用可能な MATLAB アルゴリズムを記述できます。以下に例を示します。
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
手動による固定小数点の変換のベスト プラクティスで説明されているように、アルゴリズム内の変数を型テーブル内のデータ型にキャストします。
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
別のテスト ファイル内で、アルゴリズムに供給する入力データを設定し、その入力のデータ型を指定します。
% 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);
参考
fi | fimath | fipref | numerictype