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