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

3 次查看(过去 30 天)
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!