cast

Приведение переменной к различным типам данных

Синтаксис

Описание

пример

b = cast(a,'like',p) преобразует a на ту же numerictype, сложность (реальная или сложная) и fimath как p. Если a и p тогда оба являются реальными b также реально. В противном случае b комплексная.

Примеры

свернуть все

Задайте скалярное 8-битное целое число.

a = int8(5);

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

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

Преобразование a к фиксированной точке с numerictype, сложность (реальная или сложная) и fimath указанного fi объект, p.

b = cast(a, 'like', p)
b = 
     5

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

Задайте матрицу 2 на 3 единиц.

A = ones(2,3);

Создание подписанного fi объект с размером слова 16 и длина дроби 8.

p = fi([],1,16,8);

Преобразование A с совпадающим типом данных и сложностью (реальная или сложная), что и p.

B = cast(A,'like',p)
B=2×3 object
     1     1     1
     1     1     1

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

Написание 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

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

свернуть все

Переменная, заданная как fi объект или числовая переменная.

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

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

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

Совет

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

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

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

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

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

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

Введенный в R2013a