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: FullPrecision
fi
コンストラクターで fimath
オブジェクト プロパティを少なくとも 1 つ指定した場合は、fi
オブジェクトにローカルの fimath
オブジェクトがあります。fi
オブジェクトは、残りの未指定の fimath
オブジェクト プロパティに既定値を使用します。
fi
オブジェクト コンストラクターで fimath
オブジェクト プロパティを指定しなかった場合、fi
オブジェクトは既定の fimath
値を使用するため、このオブジェクトにはローカル fimath
がありません。
関数 isfimathlocal
を使用して、fi
オブジェクトに関連付けられたローカル fimath
があるかどうかを判断できます。
numerictype
オブジェクトを使用した fi
オブジェクトの作成
numerictype
オブジェクトを使用して fi
オブジェクトを作成できます。numerictype Propertiesは、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
オブジェクトの以下のプロパティを指定します。値 =
pi
Data type mode =
Fixed-point:binary point scaling
Signedness =
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