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