единицы

Создайте массив из всех единиц со свойствами фиксированной точки

Синтаксис

X = ones('like',p)
X = ones(n,'like',p)
X = ones(sz1,...,szN,'like',p)
X = ones(sz,'like',p)

Описание

пример

X = ones('like',p) возвращает скалярный 1 с тем же numerictype, сложность (действительный или комплексный), и fimath как p.

пример

X = ones(n,'like',p) возвращает n-by-n массив из единиц как p.

пример

X = ones(sz1,...,szN,'like',p) возвращает sz1...-by-szN массивом из единиц как p.

пример

X = ones(sz,'like',p) возвращает массив из единиц как p. Вектор размера, sz, задает size(X).

Примеры

свернуть все

Создайте массив 2х3 из единиц с заданным numerictype и свойствами fimath.

Создайте объект fi со знаком с размером слова 24 и дробной длиной 12.

p = fi([],1,24,12);

Создайте 2 3 - массив из единиц, который имеет те же numerictype свойства как p.

X = ones(2,3,'like',p)
X = 
     1     1     1
     1     1     1

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 24
        FractionLength: 12

Задайте 3 2 массив A.

A = [1 4 ; 2 5 ; 3 6];

sz = size(A)
sz = 1×2

     3     2

Создайте объект fi со знаком с размером слова 24 и дробной длиной 12.

p = fi([],1,24,12);

Создайте массив из единиц, который одного размера как A и имеет те же numerictype свойства как p.

X = ones(sz,'like',p)
X = 
     1     1
     1     1
     1     1

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 24
        FractionLength: 12

Создайте массив 4 на 4 из единиц с заданным numerictype и свойствами fimath.

Создайте объект fi со знаком с размером слова 24 и дробной длиной 12.

p = fi([],1,24,12);

Создайте массив 4 на 4 из единиц, который имеет те же numerictype свойства как p.

X = ones(4, 'like', p)
X = 
     1     1     1     1
     1     1     1     1
     1     1     1     1
     1     1     1     1

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 24
        FractionLength: 12

Создайте объект fi со знаком с размером слова 16, дробной длиной 15 и набор OverflowAction к Wrap.

format long
p = fi([],1,16,15,'OverflowAction','Wrap');

Создайте массив 2 на 2 из единиц с теми же свойствами numerictype как p.

X = ones(2,'like',p)
X = 
   0.999969482421875   0.999969482421875
   0.999969482421875   0.999969482421875

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 15

        RoundingMethod: Nearest
        OverflowAction: Wrap
           ProductMode: FullPrecision
               SumMode: FullPrecision

1 не может быть представлен по условию тип p, таким образом, значение насыщает. Объект X вывода fi имеет те же свойства numerictype и fimath как p.

Создайте скалярную фиксированную точку 1, который не является действителен оцененный, но вместо этого является комплексным как существующий массив.

Задайте комплексный объект fi.

p = fi( [1+2i 3i],1,24,12);

Создайте скалярный 1, который является комплексным как p.

X = ones('like',p)
X = 
   1.0000 + 0.0000i

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 24
        FractionLength: 12

Напишите алгоритм MATLAB®, который можно запустить с различными типами данных, не изменяя сам алгоритм. Чтобы снова использовать алгоритм, задайте типы данных отдельно из алгоритма.

Этот подход позволяет вам задавать базовую линию путем выполнения алгоритма с типами данных с плавающей точкой. Можно затем протестировать алгоритм с различными типами данных с фиксированной точкой и сравнить поведение фиксированной точки с базовой линией, не делая модификаций к оригинальному коду MATLAB.

Запишите функцию MATLAB, my_filter, который берет входной параметр, T, который является структурой, которая задает типы данных коэффициентов и входных и выходных данных.

function [y,z] = my_filter(b,a,x,z,T)
    % Cast the coefficients to the coefficient type
    b = cast(b,'like',T.coeffs);
    a = cast(a,'like',T.coeffs);
    % Create the output using zeros with the data type
    y = zeros(size(x),'like',T.data);
    for i = 1:length(x)
        y(i) = b(1)*x(i) + z(1);
        z(1) = b(2)*x(i) + z(2) - a(2) * y(i);
        z(2) = b(3)*x(i)        - a(3) * y(i);
    end
end

Запишите функцию MATLAB, zeros_ones_cast_example, который вызывает my_filter с входом шага с плавающей точкой и входом шага фиксированной точки, и затем сравнивает результаты.

function zeros_ones_cast_example

    % Define coefficients for a filter with specification
    % [b,a] = butter(2,0.25)
    b = [0.097631072937818   0.195262145875635   0.097631072937818];
    a = [1.000000000000000  -0.942809041582063   0.333333333333333];

    % Define floating-point types
    T_float.coeffs = double([]);
    T_float.data   = double([]);

    % Create a step input using ones with the 
    % floating-point data type
    t = 0:20;
    x_float = ones(size(t),'like',T_float.data);

    % Initialize the states using zeros with the 
    % floating-point data type
    z_float = zeros(1,2,'like',T_float.data);

    % Run the floating-point algorithm
    y_float = my_filter(b,a,x_float,z_float,T_float);
     
    % Define fixed-point types
    T_fixed.coeffs = fi([],true,8,6);
    T_fixed.data   = fi([],true,8,6);

    % Create a step input using ones with the 
    % fixed-point data type
    x_fixed = ones(size(t),'like',T_fixed.data);

    % Initialize the states using zeros with the 
    % fixed-point data type
    z_fixed = zeros(1,2,'like',T_fixed.data);

    % Run the fixed-point algorithm
    y_fixed = my_filter(b,a,x_fixed,z_fixed,T_fixed);
     
    % Compare the results
    coder.extrinsic('clf','subplot','plot','legend')
    clf
    subplot(211)
    plot(t,y_float,'co-',t,y_fixed,'kx-')
    legend('Floating-point output','Fixed-point output')
    title('Step response')
    subplot(212)
    plot(t,y_float - double(y_fixed),'rs-')
    legend('Error')
    figure(gcf)
end

Входные параметры

свернуть все

Размер квадратной матрицы, заданной как целочисленное значение, задает вывод как квадратную, n на n матрицу из единиц.

  • Если n является нулем, X является пустой матрицей.

  • Если n отрицателен, он обработан как нуль.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Размер каждой размерности, заданной как два или больше целочисленных значения, задает X как sz1...-by-szN массив.

  • Если размер какой-либо размерности является нулем, X является пустым массивом.

  • Если размер какой-либо размерности отрицателен, это обработано как нуль.

  • Если какие-либо последующие измерения, больше, чем два, имеют размер одного, вывод, X, не включает те размерности.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Выведите размер, заданный как вектор - строка из целочисленных значений. Каждый элемент этого вектора указывает на размер соответствующей размерности.

  • Если размер какой-либо размерности является нулем, X является пустым массивом.

  • Если размер какой-либо размерности отрицателен, это обработано как нуль.

  • Если какие-либо последующие измерения, больше, чем два, имеют размер одного, вывод, X, не включает те размерности.

Пример: sz = [2,3,4] задает X как 2 массивом 3 на 4.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Моделируйте, заданный как переменная объекта fi или числовая переменная. Чтобы использовать прототип, чтобы задать сложный объект, необходимо задать значение для прототипа. В противном случае вы не должны задавать значение.

Если значение 1 переполнение числовой тип p, вывод насыщает независимо от заданного свойства OverflowAction присоединенного fimath. Все последующие операции, выполняемые на выводе, соблюдают правила присоединенного fimath.

Поддержка комплексного числа: Да

Советы

Используя синтаксис b = cast(a,'like',p), чтобы задать типы данных отдельно от кода алгоритма позволяет вам:

  • Снова используйте свой код алгоритма с различными типами данных.

  • Сохраните свой алгоритм ненарушенным спецификациями типа данных и операторами switch для различных типов данных.

  • Улучшите удобочитаемость своего кода алгоритма.

  • Переключитесь между фиксированной точкой и типами данных с плавающей точкой, чтобы сравнить базовые линии.

  • Переключитесь между изменениями настроек фиксированной точки, не изменяя код алгоритма.

Введенный в R2013a