Я использую DSP Analog Devices, и я хотел бы провести симуляцию алгоритма. Из этого я указал свою архитектуру:
F = fimath('MaxProductWordLength', 40, ...
'MaxSumWordLength', 40, ...
'OverflowAction', 'Saturate', ...
'ProductMode', 'KeepLSB', ...
'RoundingMethod', 'Floor', ...
'SumMode', 'KeepLSB', ...
'SumFractionLength', 8, ...
'SumFixedExponent', 40, ...
'ProductFixedExponent', 40, ...
'SumWordLength', 40);
R = numerictype(1, 40, 8);
Затем я могу объявить некоторые числа и выполнить умножение:
a = fi(32.25, R, F);
b = fi(1234, R, F);
c = fi(0.1, R, F);
a*b+c
Вывод форматируется следующим образом:
WordLength: 40
FractionLength: 16
Как заставить Matlab оставить числа указанного типа (Q32.8)?
Та же проблема возникает с a*b
:
ans =
3.2768e+04
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 32
FractionLength: 16
RoundingMethod: Floor
OverflowAction: Saturate
ProductMode: KeepLSB
ProductWordLength: 32
SumMode: KeepLSB
SumWordLength: 40
CastBeforeSum: true
Я не хочу Q16.16, но снова Q40.8...