0

I am using a Analog Devices DSP and I would like to do some simulations on a algorithm. From this I specified my architecture:

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);

Then I can declare some numbers and do a multiplication:

a = fi(32.25, R, F);
b = fi(1234, R, F);
c = fi(0.1, R, F);
a*b+c

The output is formatted as this:

        WordLength: 40
    FractionLength: 16

How can I force Matlab to leave the numbers on the specified type (Q32.8)?

The same issue happens with 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

I don't want Q16.16 but Q40.8 again...

nowox
  • 25,978
  • 39
  • 143
  • 293

1 Answers1

1

ProductWordLength: 32

Try changing it to 40?

I'm not sure about this processor, but some processors have multiply-and-shift, so usually I use a shorter product length to simulate a multiply-and-shift.

user3528438
  • 2,737
  • 2
  • 23
  • 42