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