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 может быть скалярным значением без знака или со знаком или иметь те же размерности как theta. u может быть действительным или оцененный комплекс.

niters

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

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

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

'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 представляет тету. Этот алгоритм принимает свои начальные значения для X, Y и Z от входных параметров, u и theta.

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

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

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

  • OverflowActionWrap

  • RoundingMethodFloor

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

Ссылки

[1] Volder, JE. “Тригонометрический Вычислительный Метод CORDIC”. Транзакции IRE на Электронно-вычислительных машинах. Издание EC-8, сентябрь 1959, стр 330–334.

[2] Andraka, R. “Обзор алгоритма CORDIC для основанных на FPGA компьютеров”. Продолжения 1998 шестых международных симпозиумов ACM/SIGDA по Программируемым пользователем вентильным матрицам. 22-24 февраля 1998, стр 191–200.

[3] Вальтер, J.S. “Объединенный Алгоритм для Элементарных функций”. Hewlett-Packard Company, Пало-Альто. Компьютерная Конференция по Соединению Spring, 1971, стр 379–386. (из набора Компьютерного Исторического музея). www.computer.org/csdl/proceedings/afips/1971/5077/00/50770379.pdf

[4] Schelin, Чарльз В. “Приближение функций калькулятора”. Американская Mathematical Monthly. Издание 90, № 5, май 1983, стр 317–325.

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

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

|

Введенный в R2011a