exponenta event banner

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 является одним из наиболее аппаратных алгоритмов, поскольку требует только итеративных операций добавления сдвига (см. Ссылки). Алгоритм CORDIC устраняет необходимость в явных множителях. С помощью CORDIC можно вычислить различные функции, такие как синус, косинус, синус дуги, косинус дуги, касательная дуги и величина вектора. Этот алгоритм можно также использовать для функций деления, квадратного корня, гиперболических и логарифмических функций.

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

Подробнее

Алгоритмы

свернуть все

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

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

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

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

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

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

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

  • OverflowActionWrap

  • RoundingMethodFloor

Выход не подключен fimath.

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

.

См. также

| |

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