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