Способы создать объекты FI

Типы конструкторов FI

Можно создавать 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 объекты. Для других, более базовых примеров построения fi Объекты см. раздел Примеры следующей функции конструктора страниц с описанием:

Примечание

The fi конструктор создает fi объект с использованием RoundingMethod от Nearest и OverflowAction от Saturate. Если вы создаете fi от значений с плавающей точкой, значение по умолчанию RoundingMethod и OverflowAction параметры свойства не используются.

Построение объекта fi с парами Имя свойства/Property Значение

Для задания можно использовать пары имя/значение свойства 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 по умолчанию значения.

Построение объекта fi с использованием объекта числового типа

Можно использовать 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

Можно создать 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

Построение конструкторов объектов FI в графическом интерфейсе пользователя

Когда вы работаете с файлами в MATLAB®, вы можете создать свою fi конструкторы объектов, используя диалоговое окно Insert fi Constructor. После определения значения и свойств fi объект в диалоговом окне можно вставить предварительно заполненный fi конструктор объектов в определенном месте в файле.

Для примера создать fi со знаком объект со значением pi, размером слова 16 битов и длиной дроби 13 битов:

  1. На вкладке Home, в разделе File, нажмите New > Script, чтобы открыть РЕДАКТОРА MATLAB.

  2. На вкладке Editor, в разделе Edit, нажмите в группе кнопок Insert. Нажмите кнопку Insert fi..., чтобы открыть диалоговое окно Insert fi Constructor.

  3. Используйте поля редактирования и раскрывающиеся меню, чтобы задать следующие свойства fi объект:

    • Value = pi

    • Data type mode = Fixed-point: binary point scaling

    • Signedness = Signed

    • Word length = 16

    • Fraction length = 13

  4. Вставка 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

Копирование 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

Создание объектов FI для использования в таблице типов

Можно записать переиспользуемый алгоритм 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);