cordiccos

Основанное на CORDIC приближение косинуса

Синтаксис

y = cordiccos(theta, niters)

Описание

y = cordiccos(theta, niters) вычисляет косинус theta использование приближения алгоритма CORDIC.

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

theta

theta может быть скаляр без знака или со знаком, вектор, матрица или N- размерный массив, содержащий угловые значения в радианах. Все значения theta должно быть действительным и в области значений [–2π 2π).

niters

niters количество итераций, которые выполняет алгоритм CORDIC. Это - дополнительный аргумент. Когда задано, niters должен быть положительный, скаляр с целочисленным знаком. Если вы не задаете niters или если вы задаете значение, которое является слишком большим, алгоритм использует максимальное значение. Для операции фиксированной точки максимальное количество итераций является тем меньше, чем размер слова theta. Для операции с плавающей точкой максимальное значение 52 для двойного или 23 для сингла. Увеличение числа итераций может привести к более точным результатам, но это также увеличивает расход расчета и добавляет задержку.

Выходные аргументы

y

y основанное на CORDIC приближение косинуса theta. Когда вход к функции является плавающей точкой, тип выходных данных совпадает с типом входных данных. Когда вход является фиксированной точкой, выход имеет тот же размер слова как вход и дробная длина, равная WordLength– 2 .

Примеры

свернуть все

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

% Create 1024 points between [0,2*pi)
stepSize = pi/512;
thRadDbl = 0:stepSize:(2*pi - stepSize);
thRadFxp = sfi(thRadDbl,12);    % signed, 12-bit fixed-point
cosThRef = cos(double(thRadFxp));   % reference results

% Use 12-bit quantized inputs and vary the number
% of iterations from 2 to 10.
% Compare the  fixed-point CORDIC results to the
% double-precision trig function results.
for niters = 2:2:10
    cdcCosTh  = cordiccos(thRadFxp,niters);
    errCdcRef = cosThRef - double(cdcCosTh);    
end

figure
hold on
axis([0 2*pi -1.25 1.25]);
    plot(thRadFxp,cosThRef,'b');
    plot(thRadFxp,cdcCosTh,'g');
    plot(thRadFxp,errCdcRef,'r');
    ylabel('cos(\Theta)');
    gca.XTick = 0:pi/2:2*pi;
    gca.XTickLabel = {'0','pi/2','pi','3*pi/2','2*pi'};
    gca.YTick = -1:0.5:1;
    gca.YTickLabel = {'-1.0','-0.5','0','0.5','1.0'};
    ref_str = 'Reference: cos(double(\Theta))';
    cdc_str = sprintf('12-bit CORDIC cosine; N = %d',niters);
    err_str = sprintf('Error (max = %f)', max(abs(errCdcRef)));
    legend(ref_str,cdc_str,err_str);

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Reference: cos(double(\Theta)), 12-bit CORDIC cosine; N = 10, Error (max = 0.005187).

После 10 итераций алгоритм CORDIC аппроксимировал косинус theta к в 0.005187 из результата косинуса с двойной точностью.

Больше о

свернуть все

CORDIC

CORDIC является акронимом для Координатного Компьютера Вращения. Основанный на вращении алгоритм CORDIC Givens является одним из самых эффективных оборудованием алгоритмов, доступных, потому что это требует только итеративных операций shift-add (см. Ссылки). Алгоритм CORDIC избавляет от необходимости явные множители. Используя CORDIC, можно вычислить различные функции, такие как синус, косинус, арксинус, арккосинус, арктангенс и векторная величина. Можно также использовать этот алгоритм для деления, квадратного корня, гиперболических, и логарифмических функций.

Увеличение числа итераций CORDIC может привести к более точным результатам, но выполнение так увеличивает расход расчета и добавляет задержку.

Алгоритмы

свернуть все

Схемы потока сигналов

Ядро вращения CORDIC

X представляет синус, Y представляет косинус, и Z представляет theta. Точность ядра вращения CORDIC зависит от выбора начальных значений для X, Y и Z. Этот алгоритм использует следующие начальные значения:

z0  инициализируется к  θ   значение входного параметраx0  инициализируется к 1ANy0  инициализируется к 0

Правила Распространения fimath

Функции CORDIC отбрасывают любой локальный fimath присоединенный к входу.

Функции CORDIC используют свой собственный внутренний fimath при выполнении вычислений:

  • OverflowActionWrap

  • RoundingMethodпол

Выход присоединил не fimath.

Расширенные возможности

Введен в R2010a
Для просмотра документации необходимо авторизоваться на сайте