Можно создать объекты 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: FullPrecision
d = 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);