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

Правила fimath для арифметики с фиксированной точкой

fimath свойства определяют правила для выполнения арифметических операций над fi объекты. The fimath свойства, которые управляют арифметическими операциями с фиксированной точкой, могут быть получены из локальной fimath объект или fimath значения по умолчанию.

Чтобы определить, является ли fi объект имеет локальную fimath объект, использовать isfimathlocal функция.

В следующих разделах обсуждается, как fi объекты с локальными fimath объекты взаимодействуют со fi объекты без локального fimath.

Двоичные операции

В двоичных операциях с фиксированной точкой, таких как c = a + b, применяются следующие правила:

  • Если оба a и b не имеют локального fimath, операция использует значения fimath по умолчанию для выполнения арифметики с фиксированной точкой. Область выхода fi c объекта также не имеет локального фимата.

  • Если либо a или b имеет локальную fimath объект, операция использует этот fimath объект для выполнения арифметики с фиксированной точкой. Область выхода fi c объекта имеет ту же локальную fimath объект как вход.

Унарные операции

В унарных операциях с фиксированной точкой, таких как b = abs(a), применяются следующие правила:

  • Если a не имеет локального fimath, операция использует значения fimath по умолчанию для выполнения арифметики с фиксированной точкой. Область выхода fi b объекта не имеет локального fimath.

  • Если a имеет локальную fimath объект, операция использует этот fimath объект для выполнения арифметики с фиксированной точкой. Область выхода fi b объекта имеет ту же локальную fimath объект как входной a.

Когда вы задаете fimath объект в вызове функции унарной операции с фиксированной точкой, операция использует fimath объект, заданный для выполнения арифметики с фиксированной точкой. Для примера, когда вы используете синтаксис, такой как b = abs(a,F) или b = sqrt(a,F), abs и sqrt операции используют fimath F объекта для вычисления промежуточных величин. Область выхода fi b объекта всегда не имеет локального fimath.

Операции конкатенации

В операциях конкатенации с фиксированной точкой, таких как c = [a b], c = [a;b] и c = bitconcat(a,b), применяется следующее правило:

  • The fimath свойства крайнего левого fi объект в операции определяет fimath свойства выхода fi c объекта.

Для примера рассмотрите следующие сценарии операции d = [a b c]:

  • Если a является fi объект без локального fimath, выход fi d объекта также не имеет локального фимата.

  • Если a имеет локальную fimath объект, выходной fi d объекта имеет ту же локальную fimath объект.

  • Если a не является fi объект, выходной fi d объекта наследует fimath свойства следующего крайнего левого fi объект. Для примера, если b является fi объект с локальной fimath объект, выходной fi d объекта имеет ту же локальную fimath объект как входной fi b объекта.

Операции с объектами fimath: add, mpy, sub

Выходные выходы fimath операции с объектами add, mpy, и sub всегда не имеет локального fimath. В операциях используется fimath объект, заданный в вызове функции, но выходной fi объект никогда не имеет локальной fimath объект.

Операции с блоками MATLAB function

Операции с фиксированной точкой, выполненные с блоком MATLAB Function, используют те же правила, что и операции с фиксированной точкой, выполненные в MATLAB®.

Все входные сигналы в блок MATLAB Function, которые вы обрабатываете как fi объекты связываются с тем, что вы задаете для параметра MATLAB Function block fimath. Когда вы устанавливаете этот параметр Same as MATLAB, ваши fi объекты не имеют локального fimath. Когда вы устанавливаете параметр MATLAB Function block fimath равным Specify other, можно задать свой собственный набор fimath свойства для всех fi объекты в блоке MATLAB Function для связи с. Можно принять решение рассматривать только входные сигналы с фиксированной точкой как fi объекты или как с фиксированной точкой, так и с целым числом входных сигналов как fi объекты. См. Использование объектов fimath в блоках MATLAB function.

Арифметика двоичных точек

The fimath объект инкапсулирует математические свойства программного обеспечения Fixed-Point Designer™.

fi объекты имеют только локальную fimath объект, когда вы явным образом задаете fimath свойства в fi конструктор. Когда вы используете sfi или ufi конструктор или не задает никаких fimath свойства в fi конструктор, результат fi объект не имеет локального fimath и использует значения по умолчанию fimath.

a = fi(pi)
a =
    3.1416

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13 
a.fimath
isfimathlocal(a)
ans =
 

        RoundingMethod: Nearest
        OverflowAction: Saturate
           ProductMode: FullPrecision
               SumMode: FullPrecision

ans =
     0

Выполнение арифметики с +, -, .*, или * на двух fi операнды с локальными fimath объекты, локальная fimath объекты должны быть идентичными. Если один из fi операнды не имеют локальной fimath, а fimath свойства двух операндов не должны быть одинаковыми. Дополнительные сведения см. в разделе «Правила fimath для арифметики с фиксированной точкой».

a = fi(pi);
b = fi(8);
isequal(a.fimath, b.fimath)
ans =

     1
a + b
ans =
 
   11.1416

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 19
        FractionLength: 13

Выполнение арифметики с +, -, .*, или *, два fi операнды должны также иметь совпадающий тип данных. Для примера можно добавить два fi объекты с типом данных double, но вы не можете добавить объект с типом данных double и один с типом данных single:

a = fi(3, 'DataType', 'double')
a =
 
     3

          DataTypeMode: Double
b = fi(27, 'DataType', 'double')
b =
 
    27

          DataTypeMode: Double
a + b
 ans =
 
    30

          DataTypeMode: Double
c = fi(12, 'DataType', 'single')
c =
 
    12

          DataTypeMode: Single
a + c
Math operations are not allowed on FI objects with different data types.

Система с фиксированной точкой fi операнды объектов не должны иметь одинаковое масштабирование. Можно выполнить двоичные математические операции на fi объект с типом данных с фиксированной точкой и fi объект с масштабированным типом данных удваивается. В этом смысле масштабированный тип данных double действует как тип данных с фиксированной точкой:

a = fi(pi)
a =
 
    3.1416

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13
b = fi(magic(2), ...
'DataTypeMode', 'Scaled double: binary point scaling')
b =
 
     1     3
     4     2


          DataTypeMode: Scaled double: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 12
a + b
ans =
 
    4.1416    6.1416
    7.1416    5.1416


          DataTypeMode: Scaled double: binary point scaling
            Signedness: Signed
            WordLength: 18
        FractionLength: 13

Используйте divide функция для выполнения деления с двойным, сингловым или двоичным масштабированием только по точкам fi объекты.

[Смещение наклона] Арифметика

Программное обеспечение Fixed-Point Designer поддерживает арифметику с фиксированной точкой, используя локальную fimath объект или по умолчанию fimath для всех двоичных сигналов только для точек. Тулбокс также поддерживает арифметику для сигналов [Slope Bias] со следующими ограничениями:

  • Сигналы [Наклон Смещения] должны быть реальными.

  • Вы должны задать SumMode и ProductMode свойства управляющей fimath на 'SpecifyPrecision' для операций суммирования и умножения, соответственно.

  • Вы должны задать CastBeforeSum свойство управляющей fimath на 'true'.

  • Fixed-Point Designer не поддерживает divide функция для сигналов [Наклон Смещения].

f = fimath('SumMode', 'SpecifyPrecision', ...
           'SumFractionLength', 16)
f =
 

               RoundingMethod: Nearest
               OverflowAction: Saturate
                  ProductMode: FullPrecision
                      SumMode: SpecifyPrecision
                SumWordLength: 32
            SumFractionLength: 16
                CastBeforeSum: true
a = fi(pi, 'fimath', f)
a =
 
    3.1416

                 DataTypeMode: Fixed-point: binary point scaling
                   Signedness: Signed
                   WordLength: 16
               FractionLength: 13

               RoundingMethod: Nearest
               OverflowAction: Saturate
                  ProductMode: FullPrecision
                      SumMode: SpecifyPrecision
                SumWordLength: 32
            SumFractionLength: 16
                CastBeforeSum: true
b = fi(22, true, 16, 2^-8, 3, 'fimath', f)
b =
 
    22

        DataTypeMode: Fixed-point: slope and bias scaling
                   Signedness: Signed
                   WordLength: 16
                        Slope: 0.00390625
                         Bias: 3

               RoundingMethod: Nearest
               OverflowAction: Saturate
                  ProductMode: FullPrecision
                      SumMode: SpecifyPrecision
                SumWordLength: 32
            SumFractionLength: 16
                CastBeforeSum: true
a + b
ans =
 
   25.1416

                 DataTypeMode: Fixed-point: binary point scaling
                   Signedness: Signed
                   WordLength: 32
               FractionLength: 16

               RoundingMethod: Nearest
               OverflowAction: Saturate
                  ProductMode: FullPrecision
                      SumMode: SpecifyPrecision
                SumWordLength: 32
            SumFractionLength: 16
                CastBeforeSum: true

Установка SumMode и ProductMode свойства для SpecifyPrecision являются взаимоисключающими, кроме как при выполнении * операция между матрицами. В этом случае необходимо задать оба SumMode и ProductMode свойства для SpecifyPrecision для сигналов [Наклон Смещения]. Это необходимо, потому что * операция выполняет как операцию суммирования, так и операции умножения, чтобы вычислить результат.