cordicrotate

Вращайте вход с помощью основанного на CORDIC приближения

Синтаксис

v = cordicrotate(theta,u)
v = cordicrotate(theta,u,niters)
v = cordicrotate(theta,u,Name,Value)
v = cordicrotate(theta,u,niters,Name,Value)

Описание

v = cordicrotate(theta,u) вращает вход u theta использование приближения алгоритма CORDIC. Функция возвращает результат u .* e ^ (j *theta).

v = cordicrotate(theta,u,niters) выполняет niters итерации алгоритма.

v = cordicrotate(theta,u,Name,Value) масштабирует выход в зависимости от булева значения, b.

v = cordicrotate(theta,u,niters,Name,Value) задает и количество итераций и Name,Value пара для того, масштабировать ли выход.

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

theta

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

u

u может быть скалярное значение без знака или со знаком или иметь те же размерности как thetaU может быть действительным или оцененный комплекс.

niters

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

Аргументы name-value

Дополнительные разделенные запятой пары Name,Value аргументы, где Name имя аргумента и Value соответствующее значение. Name должен появиться в одинарных кавычках ('').

ScaleOutput

ScaleOutput булево значение, которое задает, масштабировать ли выход обратным фактором усиления CORDIC. Этот аргумент является дополнительным. Если вы устанавливаете ScaleOutput к true или 1, выходные значения умножаются на константу, которая подвергается дополнительным расчетам. Если вы устанавливаете ScaleOutput к false или 0, выход не масштабируется.

Значение по умолчанию: tRUE

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

v

v содержит аппроксимированный результат алгоритма вращения CORDIC. Когда вход u плавающая точка, выход v имеет совпадающий тип данных как вход.

Когда вход u целое число со знаком или тип данных фиксированной точки, выход v fi со знаком объект. Этот fi объект перебрасывается парой слов длина, которая на два бита больше, чем тот из u. Его дробная длина совпадает с дробной длиной u.

Когда вход u является беззнаковым целым или фиксированной точкой, выходом v fi со знаком объект. Этот fi объект перебрасывается парой слов длина, которая на три бита больше, чем тот из u. Его дробная длина совпадает с дробной длиной u.

Примеры

Запустите следующий код и оцените точность основанного на CORDIC комплексного вращения.

wrdLn = 16;
theta = fi(-pi/3, 1, wrdLn);
u     = fi(0.25 - 7.1i, 1, wrdLn);
uTeTh = double(u) .* exp(1i * double(theta));

fprintf('\n\nNITERS\tReal\t ERROR\t LSBs\t\tImag\tERROR\tLSBs\n');
fprintf('------\t-------\t ------\t ----\t\t-------\t------\t----\n');
for niters = 1:(wrdLn - 1)
 v_fi   = cordicrotate(theta, u, niters);
 v_dbl  = double(v_fi);
 x_err  = abs(real(v_dbl) - real(uTeTh));
  y_err  = abs(imag(v_dbl) - imag(uTeTh));
 fprintf('%d\t%1.4f\t %1.4f\t %1.1f\t\t%1.4f\t %1.4f\t %1.1f\n',...
   niters, real(v_dbl),x_err,(x_err * pow2(v_fi.FractionLength)), ...
   imag(v_dbl),y_err, (y_err * pow2(v_fi.FractionLength)));
end
fprintf('\n');

Выходная таблица появляется следующей:

NITERS  Real     ERROR    LSBs    Imag     ERROR    LSBs
------	-------	 ------	 ----		-------	 ------	 ------
1      -4.8438   1.1800   4833.5  -5.1973  1.4306  5859.8
2      -6.6567   0.6329   2592.5  -2.4824  1.2842  5260.2
3      -5.8560   0.1678   687.5   -4.0227  0.2560  1048.8
4      -6.3098   0.2860   1171.5  -3.2649  0.5018  2055.2
5      -6.0935   0.0697   285.5   -3.6528  0.1138  466.2
6      -5.9766   0.0472   193.5   -3.8413  0.0746  305.8
7      -6.0359   0.0121   49.5    -3.7476  0.0191  78.2
8      -6.0061   0.0177   72.5    -3.7947  0.0280  114.8
9      -6.0210   0.0028   11.5    -3.7710  0.0043  17.8
10     -6.0286   0.0048   19.5    -3.7590  0.0076  31.2
11     -6.0247   0.0009   3.5   	 -3.7651  0.0015  6.2
12     -6.0227   0.0011   4.5  	  -3.7683  0.0017  6.8
13     -6.0237   0.0001   0.5   	 -3.7666  0.0001  0.2
14     -6.0242   0.0004   1.5   	 -3.7656  0.0010  4.2
15     -6.0239   0.0001   0.5   	 -3.7661  0.0005  2.2

Больше о

свернуть все

CORDIC

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

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

Алгоритмы

свернуть все

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

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

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

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

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

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

  • OverflowActionWrap

  • RoundingMethodпол

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

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

Смотрите также

|

Введенный в R2011a