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 - соответствующее значение. Name должны находиться внутри одинарных кавычек ('').

'ScaleOutput'

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

По умолчанию: true

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

theta

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

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 - это аббревиатура для COordinate Rotation DIgital Computer. Алгоритм 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.

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

.

См. также

| |

Введенный в R2011b