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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Операции Объекта fimath: добавьте, mpy, sub

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