exponenta event banner

ноли

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

Описание

пример

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

пример

X = zeros(n,'like',p) возвращает nоколо-n массив нулей, например p.

пример

X = zeros(sz1,...,szN,'like',p) возвращает sz1-by-... -by-szN массив нулей, например p.

пример

X = zeros(sz,'like',p) возвращает массив нулей типа p. Вектор размера, sz, определяет size(X).

Примеры

свернуть все

Создайте массив нулей 2 на 3 с указанным числовым типом и fimath свойства.

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

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

Создайте массив нулей 2 на 3, имеющий те же свойства числового типа, что и p.

X = zeros(2,3,'like',p)
X=2×3 object
     0     0     0
     0     0     0

          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 и имеет те же свойства числового типа, что и p.

X = zeros(sz,'like',p)
X=3×2 object
     0     0
     0     0
     0     0

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

Создайте массив нулей 4 на 4 с указанным числовым типом и fimath свойства.

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

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

Создайте массив нулей 4 на 4, имеющий те же свойства числового типа, что и p.

X = zeros(4, 'like', p)
X=4×4 object
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0

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

Создание скалярной фиксированной точки 0 это значение не является действительным, а является сложным, как существующий массив.

Определение комплекса fi объект.

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

Создание скаляра 1 это сложно, как p.

X = zeros('like',p)
X = 
   0.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...-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 объект или числовая переменная. Чтобы использовать прототип для задания сложного объекта, необходимо указать значение для прототипа. В противном случае указывать значение не требуется.

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

Совет

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

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

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

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

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

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

Представлен в R2013a