オーバーフローした値を飽和させずにラップさせる

17 ビュー (過去 30 日間)
Kiyoto Matsumoto
Kiyoto Matsumoto 2020 年 11 月 5 日
コメント済み: Kiyoto Matsumoto 2020 年 11 月 6 日
お世話になります。
数値を加算した結果がオーバーフローした場合、
MATLABでは最近値に飽和するかと存じます。
これを飽和ではなくラップさせる方法はありますでしょうか。
現在は以下の様に対処しているのですが、下記例ですとuint32の範囲を超えた場合には
機能しないため、多数のデータの処理には使用できません。
%uint8のデータを加算する場合
a = uint8(100);
b = uint8(200);
c = a + b %255で飽和してしまう。ラップして44にしたい。
%現在の対策
x = uint32(a);%あらかじめuint32にして加算
y = uint32(b);
z = x+y; %300
z_arr = typecast(z, 'uint8'); %[44 1 0 0]
z_arr(1) %44
以上よろしくお願いいたします。

採用された回答

Atsushi Ohashi
Atsushi Ohashi 2020 年 11 月 6 日
Fixed-Point Designer Toolbox をお持ちであればオーバーフローの設定をカスタマイズすることができます。
F = fimath('RoundingMethod','Floor','OverflowAction','Wrap');
T = numerictype('uint8');
a = fi(200, T, F)
b = fi(100, T, F);
fi(a + b, T, F)
ans =
44
DataTypeMode: Fixed-point: binary point scaling
Signedness: Unsigned
WordLength: 8
FractionLength: 0
RoundingMethod: Floor
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecision
fimath のヘルプページ
globalfimathのヘルプページ
ご参考になれば幸いです。
  1 件のコメント
Kiyoto Matsumoto
Kiyoto Matsumoto 2020 年 11 月 6 日
ご回答ありがとうございました。
購入を検討します。

サインインしてコメントする。

その他の回答 (0 件)

タグ

製品


リリース

R2020a

Community Treasure Hunt

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

Start Hunting!