Можно создать объекты fi с помощью программного обеспечения Fixed-Point Designer™ любым из следующих способов:
Можно использовать функцию конструктора fi, чтобы создать объект fi.
Можно использовать функцию конструктора sfi, чтобы создать новый объект fi со знаком.
Можно использовать функцию конструктора ufi, чтобы создать новый объект fi без знака.
Можно использовать любую из функций конструктора fi, чтобы скопировать существующий объект fi.
Начать, создать объект fi с типом данных по умолчанию и значением 0:
a = fi(0)
a =
0
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
Этот синтаксис конструктора создает объект fi со знаком со значением 0, размером слова 16 битов и дробной длиной 15 битов. Поскольку вы не задавали свойств объектов fimath в конструкторе fi, получившийся объект fi, a не имеет никакого локального fimath.
Чтобы видеть весь fi, sfi и синтаксисы конструктора ufi, относятся к соответствующим страницам с описанием.
Для получения информации о формате отображения объектов fi относитесь, чтобы Просмотреть Данные Фиксированной точки.
Следующие примеры показывают вам несколько различных способов создать объекты fi. Для другого, более основных примеров построения объектов fi, смотрите раздел Examples следующих страниц с описанием функции конструктора:
Конструктор fi создает объект fi с помощью RoundingMethod Nearest и OverflowAction Saturate. Если вы создаете fi из значений с плавающей точкой, настройки свойства RoundingMethod и OverflowAction по умолчанию не используются.
Можно использовать имя свойства / пары значения свойства, чтобы установить fi и свойства объектов fimath, когда вы создаете объект fi:
a = fi(pi, 'RoundingMethod','Floor', 'OverflowAction','Wrap')
a =
3.1415
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 13
RoundingMethod: Floor
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecisionВы не должны задавать каждое свойство объекта fimath в конструкторе fi. Объект fi использует значения по умолчанию для всех незаданных свойств объектов fimath.
Если вы задаете по крайней мере одно свойство объекта fimath в конструкторе fi, объект fi имеет локальный объект fimath. Объект fi использует значения по умолчанию для остающихся незаданных свойств объектов fimath.
Если вы не задаете свойств объектов fimath в конструкторе Object fi, объект fi использует значения fimath по умолчанию.
Можно использовать объект numerictype задать объект fi:
T = numerictype
T =
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
a = fi(pi, T)
a =
1.0000
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
Можно также использовать объект fimath с объектом numerictype задать объект fi:
F = fimath('RoundingMethod', 'Nearest',... 'OverflowAction', 'Saturate',... 'ProductMode','FullPrecision',... 'SumMode','FullPrecision')
F =
RoundingMethod: Nearest
OverflowAction: Saturate
ProductMode: FullPrecision
SumMode: FullPrecision
a = fi(pi, T, F)
a =
1.0000
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 15
RoundingMethod: Nearest
OverflowAction: Saturate
ProductMode: FullPrecision
SumMode: FullPrecision
Синтаксис a = fi(pi,T,F) эквивалентен a = fi(pi,F,T). Можно использовать оба оператора, чтобы задать объект fi с помощью объекта fimath и объекта numerictype.
Можно создать объект fi с помощью определенного объекта fimath. Когда вы делаете так, локальный объект fimath присвоен объекту fi, который вы создаете. Если вы не задаете свойств объектов numerictype, размера слова значений по умолчанию объекта fi к 16 битам. Дробная длина определяется лучшим масштабированием точности:
F = fimath('RoundingMethod', 'Nearest',... 'OverflowAction', 'Saturate',... 'ProductMode','FullPrecision',... 'SumMode','FullPrecision')
F =
RoundingMethod: Nearest
OverflowAction: Saturate
ProductMode: FullPrecision
SumMode: FullPrecision
F.OverflowAction = 'Wrap'F =
RoundingMethod: Nearest
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecision
a = fi(pi, F)
a =
3.1416
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 13
RoundingMethod: Nearest
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecision
Можно также создать объекты fi с помощью объекта fimath при определении различных свойств numerictype во время создания:
b = fi(pi, 0, F)
b =
3.1416
DataTypeMode: Fixed-point: binary point scaling
Signedness: Unsigned
WordLength: 16
FractionLength: 14
RoundingMethod: Nearest
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecision
c = fi(pi, 0, 8, F)
c =
3.1406
DataTypeMode: Fixed-point: binary point scaling
Signedness: Unsigned
WordLength: 8
FractionLength: 6
RoundingMethod: Nearest
OverflowAction: Wrap
ProductMode: FullPrecision
SumMode: FullPrecisiond = fi(pi, 0, 8, 6, F)
d =
3.1406
DataTypeMode: Fixed-point: binary point scaling
Signedness: Unsigned
WordLength: 8
FractionLength: 6
RoundingMethod: Nearest
OverflowAction: wrap
ProductMode: FullPrecision
SumMode: FullPrecision
Когда вы работаете с файлами в MATLAB®, можно создать конструкторов Object fi с помощью диалогового окна Insert fi Constructor. После определения значения и свойств объекта fi в диалоговом окне, можно вставить предзаполненного конструктора Object fi в определенном местоположении в файле.
Например, чтобы создать объект fi со знаком со значением пи, размером слова 16 битов и дробной длиной 13 битов:
На вкладке Home, в разделе File, нажимают New> Script, чтобы открыть редактора MATLAB.
На вкладке Editor, в разделе Edit, нажатии кнопки
в группе кнопок Insert. Нажмите Insert fi..., чтобы открыть диалоговое окно Insert fi Constructor.
Используйте окна редактирования и выпадающие меню, чтобы задать следующие свойства объекта fi:
Value = pi
Data type mode = Fixed-point: binary point scaling
Signedness = Signed
Word length = 16
Fraction length = 13

Чтобы вставить конструктора Object fi в ваш файл, установите свой курсор в желаемом местоположении в файле и нажмите OK на диалоговом окне Insert fi Constructor. Нажатие на OK закрывает диалоговое окно Insert fi Constructor и автоматически заполняет конструктора Object fi в вашем файле:
![]()
Значение свойства принято с прошлого раза, когда это установлено. Например, создайте объект numerictype со значением true для свойства Signed и дробной длины 14:
T = numerictype('Signed', true, 'FractionLength', 14)
T =
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 14 Теперь, создайте следующий объект fi, в котором вы задаете свойство numerictype после свойства Signed, так, чтобы получившийся объект fi был подписан:
a = fi(pi,'Signed',false,'numerictype',T)
a =
1.9999
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 14
Контрастируйте объект fi в этом примере кода с объектом fi в следующем примере кода. Свойство numerictype в следующем примере кода задано перед свойством Signed, таким образом, получившийся объект fi без знака:
b = fi(pi,'numerictype',T,'Signed',false)
b =
3.1416
DataTypeMode: Fixed-point: binary point scaling
Signedness: Unsigned
WordLength: 16
FractionLength: 14
Чтобы скопировать объект fi, просто используйте присвоение:
a = fi(pi)
a =
3.1416
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 13
b = a
b =
3.1416
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 13Можно записать допускающий повторное использование алгоритм MATLAB путем хранения типов данных алгоритмических переменных в отдельной таблице типов. Например,
function T = mytypes(dt) switch dt case 'double' T.b = double([]); T.x = double([]); T.y = double([]); case 'fixed16' T.b = fi([],1,16,15); T.x = fi([],1,16,15); T.y = fi([],1,16,14); end end
Бросьте переменные в алгоритме к типам данных в таблице типов, как описано в Ручных Лучшых практиках Преобразования Фиксированной точки.
function [y,z]=myfilter(b,x,z,T) y = zeros(size(x),'like',T.y); for n=1:length(x) z(:) = [x(n); z(1:end-1)]; y(n) = b * z; end end
В отдельном тестовом файле, настроенные входные данные, чтобы питаться в ваш алгоритм и задать типы данных входных параметров.
% Test inputs b = fir1(11,0.25); t = linspace(0,10*pi,256)'; x = sin((pi/16)*t.^2); % Linear chirp % Cast inputs T=mytypes('fixed16'); b=cast(b,'like',T.b); x=cast(x,'like',T.x); z=zeros(size(b'),'like',T.x); % Run [y,z] = myfilter(b,x,z,T);