Способы Создать Объекты 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, смотрите раздел Examples следующих страниц с описанием функции конструктора:

Примечание

Конструктор 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 в конструкторе Object fi, объект fi использует значения fimath по умолчанию.

Построение Объекта fi Используя Объект numerictype

Можно использовать объект 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 Конструкторы Object в графический интерфейсе пользователя

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

Например, чтобы создать объект fi со знаком со значением пи, размером слова 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. Чтобы вставить конструктора Object fi в ваш файл, установите свой курсор в желаемом местоположении в файле и нажмите OK на диалоговом окне Insert fi Constructor. Нажатие на OK закрывает диалоговое окно Insert fi Constructor и автоматически заполняет конструктора Object 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);