Свойства fimath
задают правила для выполнения арифметических операций на объектах fi
. Свойства fimath
, которые управляют операциями вычислений с фиксированной точкой, могут прибыть из локального объекта fimath
или значений по умолчанию fimath
.
Чтобы определить, имеет ли объект fi
локальный объект fimath
, используйте функцию isfimathlocal
.
Следующие разделы обсуждают, как объекты fi
с локальными объектами fimath
взаимодействуют с объектами fi
без локального fimath.
В бинарных операциях фиксированной точки, таких как c = a + b
, применяются следующие правила:
Если и a
и b
не имеют никакого локального fimath, значение по умолчанию использования операции fimath значения, чтобы выполнить вычисления с фиксированной точкой. Объект c
вывода fi
также не имеет никакого локального fimath.
Если или a
или b
имеют локальный объект fimath
, операция использует тот объект fimath
выполнить вычисления с фиксированной точкой. Объект c
вывода fi
имеет тот же локальный объект fimath
как вход.
В унарных операциях фиксированной точки, таких как b = abs(a)
, применяются следующие правила:
Если a
не имеет никакого локального fimath, значение по умолчанию использования операции fimath значения, чтобы выполнить вычисления с фиксированной точкой. Объект b
вывода fi
не имеет никакого локального fimath.
Если a
имеет локальный объект fimath
, операция использует тот объект fimath
выполнить вычисления с фиксированной точкой. Объект b
вывода fi
имеет тот же локальный объект fimath
как вход a
.
Когда вы задаете объект fimath
в вызове функции унарной операции фиксированной точки, операция использует объект fimath
, который вы задаете, чтобы выполнить вычисления с фиксированной точкой. Например, когда вы используете синтаксис, такой как b = abs(a,F)
или b = sqrt(a,F)
, операции abs
и sqrt
используют объект fimath
F
, чтобы вычислить промежуточные количества. Объект b
вывода fi
всегда не имеет никакого локального fimath.
В операциях конкатенации фиксированной точки, таких как c = [a b]
, c = [a;b]
и c = bitconcat(a,b)
, применяется следующее правило:
Свойства fimath
крайнего левого объекта fi
в операции определяют свойства fimath
объекта c
вывода fi
.
Например, рассмотрите следующие сценарии для операции d = [a b c]
:
Если a
является объектом fi
без локального fimath, объект d
вывода fi
также не имеет никакого локального fimath.
Если a
имеет локальный объект fimath
, объект d
вывода fi
имеет тот же локальный объект fimath
.
Если a
не является объектом fi
, объект d
вывода fi
наследовал свойства fimath
следующего крайнего левого объекта fi
. Например, если b
является объектом fi
с локальным объектом fimath
, объект d
вывода fi
имеет тот же локальный объект fimath
как объект b
входа fi
.
Вывод операций add
объекта fimath
, 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
для [Наклонное Смещение] сигналы. Выполнение так необходимо, потому что операция *
выполняет и сумму, и умножьте операции, чтобы вычислить результат.