Можно создавать 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 см. раздел Примеры на следующих страницах ссылок на функции конструктора:
Примечание
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 конструктор объекта, 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 ® можно создать fi конструкторы объектов с помощью диалогового окна Вставить конструктор fi. После указания значения и свойств fi в диалоговом окне можно вставить предварительно заполненный fi конструктора объекта в определенном расположении в файле.
Например, для создания подписи fi объект со значением pi, длиной слова 16 бит и длиной дроби 13 бит:
На вкладке Главная (Home) в разделе Файл (File) щелкните Создать (New) > Сценарий (Script), чтобы открыть редактор MATLAB.
На вкладке Редактор (Editor) в разделе Правка (Edit) нажмите кнопку
Вставить (Insert). Щелкните Вставить fi... для открытия диалогового окна Вставить конструктор FI.
Используйте поля редактирования и раскрывающиеся меню, чтобы задать следующие свойства fi объект:
Значение = pi
Режим типа данных = Fixed-point: binary point scaling
Подпись = Signed
Длина слова = 16
Длина фракции = 13

Для вставки fi конструктор объектов в файле, поместите курсор в нужное место в файле и нажмите кнопку «ОК» в диалоговом окне «Вставить конструктор fi». При нажатии кнопки OK диалоговое окно Insert fi Constructor закрывается и автоматически заполняется 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);