Data Type Conversion​の出力データ最大値、​最小値設定

조회 수: 5 (최근 30일)
Yukiko Fujisawa
Yukiko Fujisawa 2018년 5월 21일
댓글: Yukiko Fujisawa 2018년 5월 22일
Data Type Conversionにて出力データ型をsingleに設定しました。 出力をsingleの最大値、最小値である下記の範囲内に収める必要があったためです。 -3.40282e+38 to -1.17549e-38 and 1.17549e-38 to 3.40282e+38
しかし、このとき、simulationを通すと1e-45の出力が得られました。
次に、ブロックパラメーターにて出力の最小値、最大値の設定を行いましたが、 simulation上で警告(エラー)が表示されるだけで、値の補正は行われませんでした。
Data Type Conversionを使用して、singleの取りうる範囲内に出力値を収めたい場合の設定方法を教えてください。

채택된 답변

Tohru Kikawada
Tohru Kikawada 2018년 5월 21일
Saturation ブロックを使って明示的に信号範囲を飽和処理してみてはいかがでしょうか。
  댓글 수: 3
Tohru Kikawada
Tohru Kikawada 2018년 5월 22일
편집: Tohru Kikawada 2018년 5월 22일
まず上記提示いただいている正の最小値ですが、IEEE 単精度で正の最小 正規化浮動小数点数 となっています。 MATLABでは realmin コマンドで下記のとおり調べられます。
>> realmin('single')
ans =
single
1.1754944e-38
一方、MATLABでは正規化されていない単精度の浮動小数点数も扱えます。それは下記のように16進数表示で確認してみると正規化されていない(指数部が0)ことが分かります。 single 型の範囲を超えた値が出てきているように見えるのはそのためです。
>> realmin('single') % 正規化されている最小数(指数部が1)
ans =
single
00800000
>> single(1e-45) % 正規化されていない(指数部が0、0bit目に1)
ans =
single
00000001
浮動小数点に関しては こちら も参考にしてみてください。型変換の際、これらの値をどう飽和させるかはユーザー側で管理する必要があります。
Yukiko Fujisawa
Yukiko Fujisawa 2018년 5월 22일
型変換の際の値の管理はユーザーの責任ということ、理解しました。
回答、解説ありがとうございました。

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Atsushi Matsumoto
Atsushi Matsumoto 2018년 5월 22일
편집: Atsushi Matsumoto 2018년 5월 22일
Data Type Conversionブロックのブロックパラメータ[最小値]、[最大値]は、出力信号の制限を与えるためのものではありません。データ型のレンジ設定に制約を与えるためのものです。 &nbsp
例えば(出力の)最小値=-128、最大値=127としておいて、int8を設定すると範囲をカバーするので問題ありませんが、uint8を設定するとデータ型のレンジ(0~255)が最小/最大値の範囲を超えてしまうので、エラーを発生して変更を促します。 &nbsp
&nbsp
Data Type Conversionブロックのドキュメント &nbsp
&nbsp
前の回答にあるように、出力信号の振幅範囲を制限するにはSaturationブロックをお使い下さい、
  댓글 수: 1
Yukiko Fujisawa
Yukiko Fujisawa 2018년 5월 22일
Data Type Conversionブロックの原理を理解しました。 振幅範囲を制限するにはSaturationブロックを使用する必要があることも理解しました。
回答、解説ありがとうございました。

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 数値型에 대해 자세히 알아보기

제품


릴리스

R2015a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!