Можно создавать 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 объекты см. View Fixed-Point Data.
Следующие примеры показывают вам несколько различных способов создания fi объекты. Для других, более базовых примеров построения fi Объекты см. раздел Примеры следующей функции конструктора страниц с описанием:
Примечание
The 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 конструктор. The fi объект использует значения по умолчанию для всех неопределенных fimath свойства объекта.
Если вы задаете хотя бы один fimath свойство объекта в fi конструктор, fi объект имеет локальную fimath объект. The 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 конструкторы объектов, используя диалоговое окно Insert fi Constructor. После определения значения и свойств fi объект в диалоговом окне можно вставить предварительно заполненный fi конструктор объектов в определенном месте в файле.
Для примера создать fi со знаком объект со значением pi, размером слова 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 конструктор объектов в файле, поместите курсор в нужное место в файле и нажатии кнопки OK в диалоговом окне Insert fi Constructor. Нажатие кнопки мыши 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 объект в следующей выборке кода. The 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);