Можно создавать 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: 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
конструкторы объектов, используя диалоговое окно 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);