exponenta event banner

Использование свойств 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: add, mpy, sub

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

Операции с функциональными блоками MATLAB

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

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

Двоично-точечная арифметика

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'.

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