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

11 Ansichten (letzte 30 Tage)
Kiyoto Matsumoto
Kiyoto Matsumoto am 5 Nov. 2020
お世話になります。
数値を加算した結果がオーバーフローした場合、
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
以上よろしくお願いいたします。

Akzeptierte Antwort

Atsushi Ohashi
Atsushi Ohashi am 6 Nov. 2020
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 Kommentar
Kiyoto Matsumoto
Kiyoto Matsumoto am 6 Nov. 2020
ご回答ありがとうございました。
購入を検討します。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Tags

Produkte


Version

R2020a

Community Treasure Hunt

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

Start Hunting!