Использование набора инструментов с фиксированной точкой для имитации поведения DSP

Я использую 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...


person nowox    schedule 15.11.2014    source источник


Ответы (1)


ProductWordLength: 32

Попробуйте изменить его на 40?

Я не уверен насчет этого процессора, но некоторые процессоры имеют функцию умножения и сдвига, поэтому обычно я использую более короткую длину продукта для имитации умножения и сдвига.

person user3528438    schedule 30.12.2014