cordicpol2cart

Основанное на CORDIC приближение полярного-к-декартову преобразования

Синтаксис

[x,y] = cordicpol2cart(theta,r)
[x,y] = cordicpol2cart(theta,r,niters)
[x,y] = cordicpol2cart(theta,r,Name,Value)
[x,y] = cordicpol2cart(theta,r,niters,Name,Value)

Описание

[x,y] = cordicpol2cart(theta,r) возвращает Декартовы координаты xy r* e^ (j*theta) использование приближения алгоритма CORDIC.

[x,y] = cordicpol2cart(theta,r,niters) выполняет niters итерации алгоритма.

[x,y] = cordicpol2cart(theta,r,Name,Value) масштабирует выход в зависимости от булева значения b.

[x,y] = cordicpol2cart(theta,r,niters,Name,Value) задает и количество итераций и Name,Value пара для того, масштабировать ли выход.

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

theta

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

r

r содержит входные значения величины и может быть скаляр или иметь те же размерности как thetaR должен быть действителен оцененный.

niters

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

Аргументы в виде пар имя-значение

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

'ScaleOutput'

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

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

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

[x,y]

[x,y] содержит аппроксимированные Декартовы координаты. Когда вход r плавающая точка, выход [x,y] имеет совпадающий тип данных как вход.

Когда вход r целое число со знаком или тип данных фиксированной точки, выходные параметры [x,y] подписанный fi объекты. Они fi объекты имеют размеры слова, которые на два бита больше, чем тот из r. Их дробные длины совпадают с дробной длиной r.

Когда вход r беззнаковое целое или фиксированная точка, выходные параметры [x,y] подписанный fi объекты. Они fi объекты имеют размеры слова, на три бита больше, чем тот из r. Их дробные длины совпадают с дробной длиной r.

Примеры

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

wrdLn = 16;
theta = fi(pi/3, 1, wrdLn);
u     = fi( 2.0, 1, wrdLn);

fprintf('\n\nNITERS\tX\t\t ERROR\t LSBs\t\tY\t\t ERROR\t LSBs\n');
fprintf('------\t-------\t ------\t ----\t\t-------\t ------\t ----\n');
for niters = 1:(wrdLn - 1)
 [x_ref, y_ref] = pol2cart(double(theta),double(u));
 [x_fi,  y_fi] = cordicpol2cart(theta, u, niters);
 x_dbl  = double(x_fi);
 y_dbl  = double(y_fi);
 x_err  = abs(x_dbl - x_ref);
 y_err  = abs(y_dbl - y_ref);
 fprintf('%d\t%1.4f\t %1.4f\t %1.1f\t\t%1.4f\t %1.4f\t %1.1f\n',...
   niters,x_dbl,x_err,(x_err * pow2(x_fi.FractionLength)),...
   y_dbl,y_err,(y_err * pow2(y_fi.FractionLength)));
end
fprintf('\n');

NITERS  X        ERROR    LSBs      Y      ERROR   LSBs
------	-------	 ------	 ----		-------	 ------	 ----
   1	   1.4142   0.4142   3392.8  1.4142   0.3178   2603.8
   2	   0.6324   0.3676   3011.2  1.8973   0.1653   1354.2
   3	   1.0737   0.0737   603.8   1.6873   0.0448   366.8
   4	   0.8561   0.1440   1179.2  1.8074   0.0753   617.2
   5	   0.9672   0.0329   269.2   1.7505   0.0185   151.2
   6	   1.0214   0.0213   174.8   1.7195   0.0126   102.8
   7	   0.9944   0.0056   46.2    1.7351   0.0031   25.2
   8	   1.0079   0.0079   64.8    1.7274   0.0046   37.8
   9	   1.0011   0.0011   8.8     1.7313   0.0007   5.8
   10   0.9978   0.0022   18.2    1.7333   0.0012   10.2
   11   0.9994   0.0006   5.2     1.7323   0.0003   2.2
   12   1.0002   0.0002   1.8     1.7318   0.0002   1.8
   13   0.9999   0.0002   1.2     1.7321   0.0000   0.2
   14   0.9996   0.0004   3.2     1.7321   0.0000   0.2
   15   0.9998   0.0003   2.2     1.7321   0.0000   0.2

Больше о

свернуть все

CORDIC

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

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

Алгоритмы

свернуть все

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

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

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

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

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

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

  • OverflowActionWrap

  • RoundingMethodпол

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

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

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

| |

Введенный в R2011a