Можно создать 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
свойства объектов в fi
конструктор Object, 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®, можно создать fi
конструкторы Object с помощью диалогового окна Insert fi Constructor. После определения значения и свойств fi
объект в диалоговом окне, можно вставить предзаполненный fi
конструктор Object в определенном местоположении в вашем файле.
Например, чтобы создать 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
Вставить fi
конструктор Object в вашем файле, установите свой курсор в желаемом местоположении в файле и нажмите OK на диалоговом окне Insert fi Constructor. Нажатие на OK закрывает диалоговое окно Insert fi Constructor и автоматически заполняет fi
конструктор Object в вашем файле:
Значение свойства принято с прошлого раза, когда это установлено. Например, создайте 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);