exponenta event banner

Способы создания объектов 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 см. «Просмотр данных фиксированной точки».

Примеры конструирования объектов fi

В следующих примерах показано несколько различных способов построения fi объекты. Для других, более основных примеров построения fi см. раздел Примеры на следующих страницах ссылок на функции конструктора:

Примечание

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

Создание объекта fi с парами «Имя свойства/Значение свойства»

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

Создание объекта 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 конструкторы объектов с помощью диалогового окна Вставить конструктор fi. После указания значения и свойств fi в диалоговом окне можно вставить предварительно заполненный fi конструктора объекта в определенном расположении в файле.

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

  1. На вкладке Главная (Home) в разделе Файл (File) щелкните Создать (New) > Сценарий (Script), чтобы открыть редактор MATLAB.

  2. На вкладке Редактор (Editor) в разделе Правка (Edit) нажмите кнопку Вставить (Insert). Щелкните Вставить fi... для открытия диалогового окна Вставить конструктор FI.

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

    • Значение = pi

    • Режим типа данных = Fixed-point: binary point scaling

    • Подпись = Signed

    • Длина слова = 16

    • Длина фракции = 13

  4. Для вставки 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

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