cordiccart2pol

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

Синтаксис

[theta,r] = cordiccart2pol(x,y)
[theta,r] = cordiccart2pol(x,y, niters)
[theta,r] = cordiccart2pol(x,y, niters,'ScaleOutput',b)
[theta,r] = cordiccart2pol(x,y, 'ScaleOutput',b)

Описание

[theta,r] = cordiccart2pol(x,y) с помощью приближения алгоритма CORDIC, возвращает полярные координаты, угол theta и радиус r, Декартовых координат, x и y.

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

[theta,r] = cordiccart2pol(x,y, niters,'ScaleOutput',b) задает и количество итераций и, в зависимости от булева значения b, масштабировать ли r вывод обратным значением усиления CORDIC.

[theta,r] = cordiccart2pol(x,y, 'ScaleOutput',b) масштабирует r вывод обратным значением усиления CORDIC, в зависимости от булева значения b.

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

x,y

x,y являются Декартовы координаты. x и y должны быть одного размера. Если они не тот же размер, по крайней мере одно значение должно быть скалярным значением. И x и y должны иметь совпадающий тип данных.

niters

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

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

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

'ScaleOutput'

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

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

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

theta

theta содержит угловые значения полярных координат, которые находятся в области значений [-пи, пи] радианы. Если x и y с плавающей точкой, то theta имеет совпадающий тип данных как x и y. В противном случае theta является типом данных с фиксированной точкой с тем же размером слова как x и y и с длиной части лучшей точности для [-пи, пи] область значений.

r

r содержит значения значения радиуса полярных координат. r с действительным знаком и может быть скалярным значением или иметь те же размерности как theta, Если входные параметры x,y являются значениями фиксированной точки, r является также фиксированной точкой (и всегда подписывается, с масштабированием двоичной точки). Оба входных значения x,y должны иметь совпадающий тип данных. Если входные параметры подписываются, то размер слова r является входным размером слова + 2. Если входные параметры без знака, то размер слова r является входным размером слова + 3. Дробная длина r всегда является тем же самым как дробной длиной входных параметров x,y.

Примеры

Преобразуйте Декартовы координаты фиксированной точки в полярные координаты.

[thPos,r]=cordiccart2pol(sfi([0.75:-0.25:-1.0],16,15),sfi(0.5,16,15))

thPos =

    0.5881  0.7854  1.1072  1.5708  2.0344  2.3562  2.5535  2.6780

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

r =

    0.9014  0.7071  0.5591  0.5000  0.5591  0.7071  0.9014  1.1180

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 18
        FractionLength: 15

[thNeg,r]=...
  cordiccart2pol(sfi([0.75:-0.25:-1.0],16,15),sfi(-0.5,16,15))

thNeg =

 -0.5881 -0.7854 -1.1072 -1.5708 -2.0344 -2.3562 -2.5535 -2.6780

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

r =

 0.9014  0.7071  0.5591  0.5000  0.5591  0.7071  0.9014  1.1180

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 18
        FractionLength: 15

Больше о

свернуть все

CORDIC

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

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

Алгоритмы

свернуть все

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

CORDIC векторизация ядра

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

x0  инициализируется к  x  входное значениеy0  инициализируется к  y  входное значениеz0  инициализируется к 0

Правила Распространения 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.

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

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

| |

Представленный в R2011b