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

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

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

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

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

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

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

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

  • Если любой 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), следующее правило применяется:

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

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

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

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

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

Операции Объекта fimath: добавьте, 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.

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

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 объект с масштабированным удваивает тип данных. В этом смысле масштабированный двойной тип данных действует как тип данных с фиксированной точкой:

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 для всех бинарных сигналов только для точки. Тулбокс также поддерживает арифметику для [Наклонное Смещение] сигналы со следующими ограничениями:

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

  • Необходимо установить 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 для [Наклонное Смещение] сигналы. Выполнение так необходимо потому что * операция выполняет и сумму, и умножьте операции, чтобы вычислить результат.