Алгоритмы cordic. Современное состояние и...

20
ISBN 5-94052-066-0 ПРОГРАММНЫЕ СИСТЕМЫ: ТЕОРИЯ И ПРИЛОЖЕНИЯ. ПЕРЕСЛАВЛЬ-ЗАЛЕССКИЙ, 2004 УДК 519.6 А. В. Захаров, В. М. Хачумов Алгоритмы CORDIC. Современное состояние и перспективы Аннотация. В работе представлена классификация алгоритмов семейства CORDIC по особенностям их реализации. Описаны основные методики уско- рения базовых алгоритмов. Предложен новый подход к распараллелива- нию CORDIC-алгоритмов, основанный на технике разрядных вычислений, и приведены результаты численного моделирования вычисления тригоно- метрических функций на его основе. Изложены обобщения алгоритма на трехмерный случай. Ключевые слова и фразы: алгоритмы CORDIC, параллельные вычисления, цифровая обработка сигналов. 1. Введение Несмотря на то, что исторически алгоритмы CORDIC (Coordi- nate Rotation in a Digital Compute) разработаны достаточно давно, интерес к ним не ослабевает до сих пор. Это объясняется высоки- ми потенциальными возможностями данного семейства алгоритмов с точки зрения реализации крупных операций, широко используе- мых в цифровой обработке сигналов, при решении систем уравне- ний, в машинной графике, управлении движением, навигации. Пер- спективным является любое возможное ускорение базовых CORDIC- операций, что подтверждается большим количеством разнообразных подходов для достижения этой цели. В последнее время получены некоторые новые результаты, которые расширили практические го- ризонты использования CORDIC-алгоритмов. В частности, представ- ляют интерес техника параллельных вычислений на уровне базовых элементов и расширение функциональных возможностей метода. Работа выполнена при поддержке Российского фонда фундаментальных ис- следований (проект РФФИ № 03-01-00808).

Upload: others

Post on 31-May-2020

25 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

ISBN 5-94052-066-0 ПРОГРАММНЫЕ СИСТЕМЫ: ТЕОРИЯ И ПРИЛОЖЕНИЯ. ПЕРЕСЛАВЛЬ-ЗАЛЕССКИЙ, 2004

УДК 519.6

А. В. Захаров, В. М. Хачумов

Алгоритмы CORDIC. Современное состояниеи перспективы

Аннотация. В работе представлена классификация алгоритмов семействаCORDIC по особенностям их реализации. Описаны основные методики уско-рения базовых алгоритмов. Предложен новый подход к распараллелива-нию CORDIC-алгоритмов, основанный на технике разрядных вычислений,и приведены результаты численного моделирования вычисления тригоно-метрических функций на его основе. Изложены обобщения алгоритма натрехмерный случай.

Ключевые слова и фразы: алгоритмы CORDIC, параллельные вычисления,цифровая обработка сигналов.

1. Введение

Несмотря на то, что исторически алгоритмы CORDIC (Coordi-nate Rotation in a Digital Compute) разработаны достаточно давно,интерес к ним не ослабевает до сих пор. Это объясняется высоки-ми потенциальными возможностями данного семейства алгоритмовс точки зрения реализации крупных операций, широко используе-мых в цифровой обработке сигналов, при решении систем уравне-ний, в машинной графике, управлении движением, навигации. Пер-спективным является любое возможное ускорение базовых CORDIC-операций, что подтверждается большим количеством разнообразныхподходов для достижения этой цели. В последнее время полученынекоторые новые результаты, которые расширили практические го-ризонты использования CORDIC-алгоритмов. В частности, представ-ляют интерес техника параллельных вычислений на уровне базовыхэлементов и расширение функциональных возможностей метода.

Работа выполнена при поддержке Российского фонда фундаментальных ис-следований (проект РФФИ № 03-01-00808).

Page 2: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 354

2. Современные исследования и классификация CORDIC-алгоритмов

Для того чтобы охватить модификации CORDIC-алгоритмов, ни-же предложены две классификационные схемы––по особенностям по-строения и областям применения с указанием соответствующих ра-бот. С точки зрения реализации модификации CORDIC-алгоритмовмогут быть классифицированы следующим образом:

• по основанию счисления операндов:– алгоритмы с основанием 4 [5,6, 9, 21];– алгоритмы с большим основанием (до 1024) [8];

• по используемым системам представления чисел:– избыточная, в виде цифр со знаком (signed digit); [5,14,

23,24,27];– избыточная, с сохранением переноса (carry save) [5, 14,

20,21,23];• по методу коррекции результата:

– умножение на величину, обратную коэффициенту де-формации, после окончания итераций [1,3, 15];

– добавление специальных масштабирующих итераций [5,9, 21,32];

– параллельное вычисление корректируемого результата[26];

• по технике ускорения вычислений:– конвейеризация вычислений [30,31];– использование предварительной декомпозиции угла по-

ворота [14,18,32];– алгоритмы с предсказанием значений операторов [7,17,

23,32];– использование оценки знака по малому числу старших

битов [6, 7, 21,23];– алгоритм с ветвлением [13,22].

Можно отметить, что, несмотря на богатство всевозможных техник,предложенных для ускорения алгоритма, почти все они сохраняютего итерационный характер. Ускорение достигается за счет уменьше-ния общего количества итераций или требуемого количества аппара-туры. Исключением является, пожалуй, лишь техника с предсказа-нием значений операторов, однако, полученный алгоритм все равно

Page 3: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 355

не является полностью параллельным. Можно выделить основныеобласти применения CORDIC-алгоритмов:

(1) различные формы преобразования Фурье: БПФ, ДПФ, дис-кретные синус- и косинус-преобразования [11];

(2) алгоритмы линейной алгебры: преобразования Хаусхолде-ра (Householder transformations) [16], алгоритм разложенияматрицы по сингулярным значениям (SVD) [10,14], обобще-ние поворота вектора на многомерный случай [12];

(3) алгоритмы цифровой обработки сигналов: алгоритмы циф-ровой фильтрации [18] и алгоритмы обработки изображе-ний –– преобразование Хоу (Hough transform) [9].

Вопросам сходимости и точности CORDIC-алгоритмов посвященыработы [1,3, 4, 19,28,29].

3. Краткий обзор CORDIC-алгоритмов

Изначально алгоритм CORDIC представлял собой итерационнуюпроцедуру для выполнения операции «поворот» векторов на плоско-сти на произвольный угол, используя только операции сдвига и сло-жения [28]. Как известно, данное преобразование определяется сле-дующими соотношениями

(1) x = x0 cos φ− y0 sinφy = x0 sinφ + y0 cos φ

Переписывая равенства (1) в виде

(2) x = cos φ · (x0 − y0tgφ)y = cos φ · (y0 + x0tgφ)

и выбирая такой угол поворота, что tgφ = ±2−i, легко заметить,что умножение на тангенс в формулах (2) представляет собой всеголишь операцию сдвига на i разрядов в двоичной системе счисления.Следовательно, если мы представим некоторый произвольный уголв виде суммы углов αi = ±arctg(2−i), i = 0,1,2. . . n, то операция по-ворота может быть разложена в серию последовательно выполнен-ных элементарных поворотов. Отметим, что величина множителяcos(αi) = cos(−αi) не зависит от направления поворота и являетсяконстантой на каждом шаге. Таким образом, приходим к следующимитерационным формулам для i-го шага (i=0,1. . . n):

(3) xi+1 = Ki · (xi − σiyi2−i)yi+1 = Ki · (yi + σixi2−i)

Page 4: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 356

Здесь Ki = cos(arctg(2−i)) = 1q1+ 1

tg2(arctg(2−i))

= 1√1+2−2i

–– коэффи-

циент деформации вектора на i-м шаге σi ∈ {−1,+1} –– оператор,определяющий направление поворота (по часовой стрелке или про-тив часовой стрелки). Исключая величину Ki из (3), получим итера-ционный алгоритм для операции «поворот», использующий толькооперации сложения и сдвига.

(4) xi+1 = xi − σiyi2−i

yi+1 = yi + σixi2−i

Произведение коэффициентов деформации для всех шагов являет-ся сходящимся и дает суммарное растяжение исходного вектора в

Kn =n−1∏i=0

Ki =n−1∏i=0

√1 + 2−2i ≈ 1.647 раз. Итак, для того чтобы про-

извести поворот вектора на некоторый угол, необходимо представитьданный угол в виде последовательности управляющих операторов σi.Для нахождения данной последовательности может быть использо-вана как табличная реализация, так и способ, когда операторы опре-деляются, исходя из рекуррентных соотношений. Метод определениязависит от требуемого результата и приведен ниже.

Алгоритм CORDIC может быть использован в двух режимах ––«поворот» и «вектор». В первом осуществляется произвольный по-ворот на плоскости, во втором вектор стягивается к одной из коор-динатных осей, что используется для нахождения длины вектора. Врежиме операции «поворот» управляющие операторы выбираются поформулам

(5) σi = sign(zi)zi+1 = zi − σiαi

i = 0, n− 1, z0 = φ, αi = arctg(2−i).

Таким образом, величина zi → 0. Второй вариант –– выбор управля-ющей последовательности таким образом, что yi → 0. В результатевектор стягивается к оси x. Эта операция называется операцией «век-тор» и определяется следующими соотношениями:

(6)σi = −sign(yi)zi+1 = zi − σiαi

i = 0, n− 1, z0 = 0, αi = arctg(2−i).

Page 5: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 357

После выполнения n итераций получим

xn ≈ Kn

√x2

0 + y20 , yn ≈ 0, zn ≈ arctg(

y0

x0).

То есть одновременно можно вычислить как длину вектора, так и егоугол относительно оси x. Величина деформации Kn –– та же самая,что и для операции «поворот». Таким образом, варьируя начальныезначения и используя различные правила для определения значенийуправляющих операторов, можно вычислять основные тригономет-рические функции, а также осуществлять преобразования координат.

3.1. Вычисление синуса и косинуса. Выбирая в качестве на-чальных данных x0 = 1, y0 = 0, z0 = φ, после выполнения n итера-ций в режиме операции «поворот», получим в результате значения:xn = Kn cos φ, yn = Kn sinφ. Для получения точных значений необхо-димо масштабирование––умножение на величину, обратную Kn. Дру-гой вариант реализации заключается в подстановке в итерационныесоотношения в качестве начального условия x0 = K−1

n .

3.2. Переход от полярных координат к декартовым. Дан-ное преобразование осуществляется по формулам x = ρ cos φ, y =ρ sinφ, для чего достаточно положить x0 = ρK−1

n , y0 = 0, z0 = φ.

3.3. Вычисление арктангенса. Данная функция может бытьвычислена в режиме операции «вектор», для чего достаточно пред-ставить аргумент в виде частного y0/x0, где x0, y0 –– нормализован-ные двоичные дроби. Подставляя эти значения в качестве началь-ных и принимая z0 = 0, после выполнения n итераций получимzn = arctg y0

x0.

3.4. Вычисление длины вектора. После выполнения n ите-раций в режиме «вектор» с взятыми в качестве начальных условийкоординатами вектора и z0 = 0, получим xn = Kn

√x2

0 + y20 . Данный

результат также должен быть масштабирован.

Page 6: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 358

3.5. Вычисление обратных функций. Для нахождения об-ратных тригонометрических функций, таких, как арксинус и аркко-синус, может быть использован режим операции «поворот» с некото-рыми модификациями функции выбора операторов [1, 20].

Однако, в зависимости от величины аргумента, на некоторых ите-рациях возможен неверный выбор направления поворота. Для устра-нения этого недостатка предложен метод кратных итераций, которыйзаключается в повторении некоторых итераций. Принцип использо-вания фиксированных заранее приращений позволил расширить ал-горитмы CORDIC для вычисления гиперболических функций и опе-раций умножения–деления.

3.6. Операции умножения и деления. Определим следую-щие рекуррентные соотношения

(7)xi+1 = xi − 0 · yiσi2−i = xi

yi+1 = yi + xiσi2−i

zi+1 = zi − σi2−i

Правила выбора управляющих операторов остаются такими же, каки в случае исходного CORDIC-алгоритма (5), (6). Ниже приводятсярезультаты вычислений в режиме операции «поворот» и в режимеоперации «вектор» после выполнения n итераций.

(8) xn = x0, yn = y0 + x0z0, zn = 0.

(9) xn = x0, yn = 0, zn = z0 −y0

x0.

Варьируя начальные значения, можно получить несколько операциймножительно-делительного типа (к примеру, умножение с накопле-нием).

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

(10)xi+1 = xi −myiσi2−i

yi+1 = yi + xiσi2−i

zi+1 = zi − σiαi

Здесь параметр m определяет систему, в которой действует алго-ритм: m = 1 –– обычный поворот вектора на плоскости, m = 0 ––

Page 7: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 359

множительно-делительные операции (линейная система), m = −1 ––поворот в гиперболических координатах. Вспомогательные величиныαiзависят от выбранной системы и определяются следующим обра-зом: αi = arctg2−i при m = 1, αi = 2−i при m = 0, αi = arcth2−i приm = −1. Правила выбора для управляющей последовательности опе-раторов σi зависят от выбранного режима операций и определяютсяформулами (5) либо (6) соответственно.

4. Методы коррекции результата и ускорения вычислений

4.1. Компенсация коэффициента деформации. Одним изнедостатков, ограничивающих алгоритмы CORDIC по скорости вы-полнения, является необходимость коррекции результата. Результатыxn, yn необходимо умножить на величину, обратную коэффициентудеформации K, для компенсации деформации вектора в процессе вы-полнений итераций. Однако, выполнение операции умножения ведетк существенной задержке в вычислениях. Уменьшению этой задерж-ки посвящен ряд работ. Ниже приводятся два алгоритма, предложен-ных для компенсации постоянного коэффициента деформации.

4.1.1. Метод двойного поворота. Введем в рассмотрение угол

β = arccos(1K

) .

Метод двойного поворота [26] заключается в том, что операция пово-рота на угол φ производится, как две отдельные операции «поворот»на углы (φ−β) и (φ+β). Производя простейшие тригонометрическиепреобразования, получим

x++x−

2 = K cos β(x0 cos φ− y0 sinφ)y++y−

2 = K cos β(x0 sinφ + y0 cos φ)

Правая часть формул является результатом, не требующим коррек-ции, операции «поворот» в силу определения угла β. Данный способлегко реализуем, однако требует дублирования аппаратуры для реа-лизации двух параллельно исполняемых операций «поворот». Крометого, он работает только тогда, когда заранее известен коэффициентдеформации и не годится для тех CORDIC-схем, в которых этот ко-эффициент зависит от величины угла поворота. Разновидность дан-ного метода для операции «вектор» для случая, когда угол положе-ния вектора известен, рассмотрена также в работе [33].

Page 8: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 360

4.1.2. Метод анализа битов переноса. Данный метод основан наанализе отдельных битов величин xi, yi в процессе итераций. В ре-зультате появляется возможность вычисления отдельно точных зна-чений xcomp, ycomp. На каждой итерации, начиная с номера i = 2,вычисляются значения

δj = x−j(i) + 2(c−j − y2∗)µj = y−j(i) + 2(c′−j − x2∗).

Здесь x−j(i), y−j(i)––двоичные разряды величин xi, yi с весом 2−j ,c−j , c′−j –– возможный перенос (заем) из j-й позиции при суммиро-вании или вычитании, x2∗, y2∗ –– равняются нулю в случае избыточ-ного представления цифр со знаком (signed-digit representation) илисоответствуют знаковым битам величин σi2−ixi и σi2−iyi в случаеобычного двоичного представления. Для получения точных значенийиспользуются итерации вида

xcompj = xcompj−1 + δj2−jK−1

ycompj = ycompj−1 + µj2−jK−1

Таким образом, компенсация коэффициента деформации может про-водиться параллельно стандартным итерациям алгоритма путем по-следовательно выполняемых операций сложения и сдвига. Данныйалгоритм может применяться как в режиме операции «поворот», таки в режиме операции «вектор», то есть является универсальным, од-нако, также требует знания коэффициента деформации заранее.

4.2. Гибридные схемы. Для сокращения числа итераций ис-пользуются алгоритмы с большим основанием 8 и техники избыточ-ного сложения. Их применение влечет за собой необходимость па-раллельного вычисления коэффициента деформации, либо введенияспециальных корректирующих итераций. В любом случае общее чис-ло итераций увеличивается. Одним из возможных путей полученияалгоритмов максимального быстродействия с минимальным числомитераций и постоянным коэффициентом деформации является ком-бинированный подход. К этому же классу схем могут быть отнесеныалгоритмы со смешанным основанием [5]. Ниже приводится описаниеспособа, предложенного в работе [7] для операции «поворот».

Page 9: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 361

Методика предсказания направления поворота основана на том,что значения операторов выбираются в соответствии с цифрами ве-личины z, представленной в системе счисления с симметричной ба-

зой: zj =n∑

i=j

cj2−j =n∑

i=j

σjαj , где σj , cj ∈ {−1,+1}, αj = arctg2−j .

Отметим, что при таком определении операторов коэффициент неизменяется. Так как, вообще говоря, αj 6= 2−j , для обеспечения схо-димости вводятся специальные корректирующие итерации. При вы-боре значений операторов σi = ci, i = j . . . k для коррекции накоп-ленной ошибки необходимо повторить итерацию с номером k. Индек-сы j и k должны удовлетворять условию исправляемости итераций:k∑

i=j

∣∣2−i − αi| ≤ 2−k → k ≤ 3j + 1. Таким образом, итерации с номе-

рами k = 1, 4, 13, . . . должны быть повторены. Недостатком данногоподхода является необходимость перехода от избыточного представ-ления чисел к системе счисления с симметричной базой перед каж-дым предсказанием последующих значений операторов.

В работе [7] предлагается следующая модификация алгоритма.Для того чтобы сохранить постоянный коэффициент деформации,достаточно, чтобы σi ∈ {−1,+1} для i < n

4 . Для итераций с но-мерами i ≥ n

4 можно использовать избыточное множество значенийоператоров, включающее 0. Для этой цели всякий раз, когда выби-рается σi = 0, производится масштабирование вектора на величину1 + 2−2i−1. Предлагаемый алгоритм носит гибридный характер.

На итерациях с номерами от 0 до n4 используется методика пред-

сказания направления поворота со значениями σi ∈ {−1,+1}. Так какусловие не выполняется, то используются микроповороты с множе-ственными сдвигами αi = arctg(2−i + si12−d1 + si22−d2 + . . . sik2−dk),где sij ∈ {−1, 0,+1}, i < dij < n, аналогично [32]. Данная замена ис-пользуется только на первых нескольких итерациях, а соответству-ющие величины sij , dij находятся предварительно. Так как теперьоператоры поворота доступны одновременно, величина zn

4 +1 можетбыть быстро вычислена с помощью каскада сумматоров с сохранени-ем переноса (carry-save adders). Затем данная величина преобразуетсяк избыточной системе цифр со знаком и используется для предсказа-ния значений операторов с номерами i ≥ n

4 выбор σi = 0 не влечет засобой никаких осложнений. Для итераций с номерами i ≥ n

2 исполь-зуется алгоритм по основанию 4 с целью сокращения общего числаитераций.

Page 10: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 362

4.3. Особенности аппаратной реализации. Наиболее прос-той способ реализации алгоритмов CORDIC заключается в обычномдублировании трех соответствующих рекуррентных соотношений ваппаратуре. Структура развернута в пространстве в виде трех столб-цов сумматоров и устройств определения направления поворота. Пре-имущество данной структуры перед соответствующей итеративнойреализацией –– в возможности зашить в аппаратуру фиксированныезаранее для каждой стадии сдвиги и константы (сдвиг на переменноечисло разрядов не является быстрой операцией). Для достижениябольшей пропускной способности всей системы в целом рекомендо-вана конвейеризованная архитектура, отличающаяся наличием реги-стров между стадиями для сохранения промежуточных результатов[30,31].

Наиболее часто используемой операцией является сложение. По-этому для достижения наибольшего быстродействия были испробо-ваны всевозможные конструкции сумматоров [27]. Основным недо-статком традиционных устройств сложения–вычитания является то,что время суммирования зависит от наличия переноса от младшихразрядов к старшим и определяется как O(log n), где n –– число раз-рядов. Для устранения этого недостатка были предложены так на-зываемые избыточные сумматоры (redundant adders), свободные отраспространения переноса. Суммирование в таких устройствах за-нимает небольшое время, не зависящее от длины разрядной сетки.Недостатком избыточных сумматоров является то, что они требуютвдвое больше аппаратных затрат.

Необходимым условием для применения быстрого сложения яв-ляется то, что операнды также должны быть представлены в из-быточной форме. Обычно используются два таких представления ––представление с сохранением переноса (carry–save representation) илипредставление в виде цифр со знаком (signed–digit representation). Взависимости от выбранного способа представления изменяется какаппаратная реализация алгоритмов, так и сами алгоритмы.

Данные техники позволяют существенно сократить время выпол-нения операции определения знака, но попутно влекут за собой сле-дующую проблему –– при данном способе определения направленияповоротов операторы σi ∈ {−1, 0,+1}, следовательно, коэффициент

деформации K =n−1∏i=0

√1 + σ2

i 2−2i уже не является константой. Сле-

довательно, необходима дополнительная аппаратура для вычисления

Page 11: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 363

коэффициента деформации в соответствии с выбранной последова-тельностью операторов. Типичный подход в этом случае –– комбина-ция табличного и алгоритмического методов. В соответствии с требу-емой точностью после нескольких первых итераций значение коэф-фициента деформации выбирается из таблицы (look-up le), котороезатем корректируется при помощи последовательности сложений исдвигов.

Второй вариант––попытаться сохранить прежнее множество зна-чений операторов с целью сохранить постоянный коэффициент де-формации. В этом случае на некоторых итерациях возможен непра-вильный выбор управляющих операторов, нарушающий условия схо-димости алгоритма. Для восстановления условий сходимости требу-ется повторение некоторых итераций.

Еще один способ, разработанный с целью преодоления данногонедостатка,––алгоритм с ветвлением (branching Cordic algorithm), ко-торый позволяет сохранить неизбыточное множество значений опе-раторов, не прибегая к дополнительным итерациям [13,22]. В случае,когда по оценке нельзя с уверенностью определить знак числа из-забольшого количества нулей в старших разрядах, данный алгоритмразветвляется. Одна ветка вычислений предполагает σi = +1, другаяσi = −1. На основе сравнительного анализа результатов выбираетсята ветка, исполнение которой не противоречит условиям сходимости.Однако в этом случае также требуется дополнительная аппаратура.

5. Разрядно-параллельные CORDIC-алгоритмы

Исследования принципиальной возможности представления ал-горитмов CORDIC в виде разрядных соотношений между битамиаргумента и результата были выполнены в работах [33–35]. Для пе-рехода от итерационных соотношений к параллельным использовал-ся разрядный подход, совмещенный с последовательным раскрытиемциклов. В дальнейшем изложении мы несколько изменим традици-онную запись соотношений, что ни в коем случае не меняет сущно-сти алгоритма. В новом варианте записи рекуррентные соотношения

Page 12: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 364

Волдера для вычисления новых координат X ′, Y ′ при повороте век-тора на угол ϕ имеют следующий вид:

(11)

ϕi+1 = ϕi − σiarctg(2−i)σi+1 = sign(ϕi+1)yi+1 = yi − σixi · 2−i

xi+1 = xi + σiyi · 2−i

Начальные значения: ϕ0 = ϕ, σ0 = ±1 (знак выбирается в зависимо-сти от направления вращения вектора), x0 = X, y0 = Y . Результат:

yn = Y ′ = Kn[Y cos(ϕ)+X sin(ϕ)], xn = X ′ = Kn[X cos(ϕ)−Y sin(ϕ)].

Для разрядности n ≥ 10 имеем Kn = K ≈ 1, 65.Введем обозначения: A = Y − σ0X, B = X + σ0Y . Здесь X,

Y –– начальные координаты конца вектора, причем X = X1X2 . . . X8,Y = Y1Y2 . . . Y8, A = a1a2 . . . a8, B = b1b2 . . . b8 –– разрядные двоичныепредставления. Пусть координаты конца повернутого вектора есть:X ′ = X ′

1X′2 . . . X ′

8, Y ′ = Y ′1Y ′2 . . . Y ′8 . Тогда, на основании работ [33–35],для координат X ′, X ′ можно записать разрядно-параллельные схе-мы вычисления новых координат. Соответствующие результаты дляn = 10 представлены в Таблице 1. Здесь переменными являются ве-личины A(X, Y ) = Y − σ0X и B(X, Y ) = X + σ0Y , производныекоторых равны, соответственно, ∂A

∂X = −σ0, ∂B∂X = 1. С учетом этого

запишем выражение для полной производной одной из новых коор-динат:

(12)∂x10

∂X=

∂x10

∂A· ∂A

∂X+

∂x10

∂B· ∂B

∂X=

∂x10

∂A+ σ0

∂x10

∂B

С другой стороны,∂x10

∂X= Kn cos ϕ.

Очевидно, подставляя в формулы (12) результат дифференцирова-ния разрядных схем Таблицы 1, мы получим новые схемы для па-раллельного вычисления функции cos(ϕ) при условии соответствую-щей коррекции. Аналогично для вычисления функции sin(ϕ)следуетвзять производную ∂x10

∂Y , учитывая, что ∂A∂Y = 1, ∂B

∂Y = σ0. Полностьюрезультаты приведены в Таблице 2. Запишем далее выражения дляполных производных.

(13)∂x10∂X + ∂x10

∂Y = K(cos(ϕ)− sin(ϕ)) = ∂y10∂X − ∂y10

∂Y∂y10∂X + ∂y10

∂Y = K(cos(ϕ) + sin(ϕ)) = ∂x10∂X − ∂x10

∂Y

Page 13: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 365

Вес x10 y10

20 B A

2−1 σ1A −σ1B

2−2 σ2A −σ2B

2−3 σ3A− σ1σ2B −σ3B − σ1σ2A

2−4 σ4A− σ1σ3B −σ4B − σ1σ3A

2−5 σ5A− σ1σ4B − σ2σ3B −σ5B − σ1σ4A− σ2σ3A

2−6 σ6A− σ1σ5B − σ2σ4B−−σ1σ2σ3A

−σ6B − σ1σ5A− σ2σ4A++σ1σ2σ3B

2−7 σ7A− σ1σ6B − σ2σ5B−−σ3σ4B − σ1σ2σ4A

−σ7B − σ1σ6A− σ2σ5A−−σ3σ4A + σ1σ2σ4B

2−8σ8A− σ1σ7B − σ2σ6B−−σ3σ5B − σ1σ2σ5A−−σ1σ3σ4A

−σ8A− σ1σ7A− σ2σ6A−−σ3σ5A + σ1σ2σ5B++σ1σ3σ4B

2−9

σ9A− σ1σ8B − σ2σ7B−−σ3σ6B − σ4σ5B−−σ1σ2σ6A− σ1σ3σ5A−−σ2σ3σ4A

−σ9B − σ1σ8A− σ2σ7A−−σ3σ6A− σ4σ5A++σ1σ2σ6B + σ1σ3σ5B++σ2σ3σ4B

Таблица 1. Разрядно-параллельные формулы поворота

Для вычисления указанных функций достаточно произвести пораз-рядное суммирование или вычитание схем Таблицы 2. Для парал-лельного определения операторов Волдера воспользуемся соотноше-

нием limn→∞

(ϕ−n∑

i=0

σiarctg(2−i) = 0, откуда при ограниченном значенииn следует

(14) ϕ =∞∑

i=0

σiarctg(2−i) ≈n∑

i=0

σiarctg(2−i)

Величины arctg(2−i) являются табличными константами, см. Табли-цу 3.

Умножая на σi двоичные представления arctg(2−i) и суммируя всоответствии с (14) получим разрядное представление угла поворота

Page 14: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 366

Вес ∂x10∂X = Kn cos ϕ ∂x10

∂Y = Kn sinϕ20 1 σ0

2−1 −σ0σ1 σ1

2−2 −σ0σ2 σ2

2−3 −σ0σ3 − σ1σ2 σ3 − σ0σ1σ2

2−4 −σ0σ4 − σ1σ3 σ4 − σ0σ1σ3

2−5 −σ0σ5 − σ1σ4 − σ2σ3 σ5 − σ0σ1σ4 − σ0σ2σ3

2−6 −σ0σ6 − σ1σ5 − σ2σ4++σ0σ1σ2σ3

σ6 − σ0σ1σ5 − σ0σ2σ4−−σ1σ2σ3

2−7 −σ0σ7 − σ1σ6 − σ2σ5−−σ3σ4 + σ0σ1σ2σ4

σ7 − σ0σ1σ6 − σ0σ2σ5−−σ0σ3σ4 − σ1σ2σ4

2−8−σ0σ8 − σ1σ7 − σ2σ6−−σ3σ5 + σ0σ1σ2σ5++σ0σ1σ3σ4

σ8 − σ0σ1σ7 − σ0σ2σ6−−σ0σ3σ5 − σ1σ2σ5−−σ1σ3σ4

2−9−σ0σ9 − σ1σ8 − σ2σ7−−σ3σ6 + σ0σ1σ2σ6++σ0σ1σ3σ5 + σ0σ2σ3σ4

σ9 − σ0σ1σ8 − σ0σ2σ7−−σ0σ3σ6 − σ0σ4σ5−−σ1σ2σ6 − σ1σ3σ5 − σ2σ3σ4

Таблица 2. Производные для формул поворота

i arctg(2−i)град(decimal)

arctg(2−i)град(binary)

0 45.0 101101.001 26.6 011010.102 14.0 001110.003 7.2 000111.004 3.6 000011.105 1.8 000001.116 0.9 000000.117 0.45 000000.01

Таблица 3. Значения арктангенса

ϕ = (ϕ1ϕ2 . . . ϕn):

(15)

ϕ1 = σ0

ϕ2 = σ1

ϕ3 = σ0 + σ1 + σ2

ϕ4 = σ0 + σ2 + σ3

ϕ5 = σ1 + σ2 + σ3 + σ4

ϕ6 = σ0 + σ3 + σ4 + σ5

ϕ7 = σ0 + σ1 + σ4 + σ5 + σ6

ϕ8 = σ5 + σ6 + σ7

Page 15: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 367

Используя данные представления, получим псевдооператоры σ̃i, ко-торые отличаются от операторов σi тем, что они, в общем случае, неотвечают условию σi ∈ {+1,−1} , i = 1 . . . n:

(16)

σ̃0 = ϕ1

σ̃1 = ϕ2

σ̃2 = ϕ3 − ϕ1 − ϕ2

σ̃3 = ϕ4 + ϕ2 − ϕ3

σ̃4 = ϕ5 + ϕ1 − ϕ4 − ϕ2

σ̃5 = ϕ6 − 2ϕ1 + ϕ3 − ϕ5

σ̃6 = ϕ7 + ϕ4 − ϕ6 − ϕ3

σ̃7 = ϕ8 + 2ϕ1 + ϕ5 − ϕ7 − ϕ4

С учетом одновременной доступности σ̃i схемы Таблицы 2 следуетсчитать параллельными. Окончательное представление можно полу-чить путем непосредственной подстановки σ̃i (16) вместо операторовσi [35].Погрешность вычислений, полученная в результате компьютерногомоделирования разрядных схем представлена на Рисунке 1. Для реа-лизации операции «вектор» достаточно приравнять нулю выражениядля всех разрядов Y’, что равносильно повороту вектора до его сов-мещения с осью абсцисс. Полученная при этом система псевдоопера-торов должна быть подставлена в выражения для вычисления длинывектора X ′ и в выражение (14) для вычисления угла положения.

6. Реализация трехмерных CORDIC операций

Двумерные операции «вектор» и «поворот» можно использоватьдля определения длины пространственного вектора [1, 36]. Так на-пример, величину d =

√X2 + Y 2 + Z2 можно вычислить, дважды

применяя стандартный итерационный процесс «вектор»:1-ый этап: yi+1 = yi − σ1,i · xi · 2−i

xi+1 = xi + σ1,i · yi · 2−i

σ1,i+1 = sign(yi+1)Начальные условия: x0 = X, y0 = Y , σ1,0 = 1.Результат: xn = Kn

√X2 + Y 2, yn = 0.

2-ой этап: xi+1 = xi − σ2,i · zi · 2−i

zi+1 = zi + σ2,i · xi · 2−i

σ2,i+1 = sign(xi+1)

Page 16: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 368

Рис. 1. Погрешность вычислений по разрядным схе-мам для тригонометричесих функций

Начальные условия: x0 = xn/Kn, z0 = Z, σ2,0 = 1.Результат: zn = Kn

√X2 + Y 2 + Z2, xn = 0.

Причем коррекция результата первого этапа, связанная с устра-нением деформации вектора, является обязательной до применениявторого этапа. Деформация второго этапа устраняется перечислен-ными выше методами коррекции.Представляет теоретический интерес разработка одноэтапной проце-дуры измерения длины пространственного вектора. Итерационныеформулы в этом случае приобретают следующий вид:

(17)

yi+1 = yi − σ1,i · xi · 2−i

zi+1 = (zi + σ1,i · yi · 2−i) ·Ki−1

σ1,i+1 = sign(yi+1)zi = zi+1 xi+1 = xi − σ2,i · zi · 2−i

zi+1 = zi + σ2,i · xi · 2−i

σ2,i+1 = sign(xi+1)

Page 17: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 369

Начальные значения: x0 = X, y0 = Y , z0 = Z, σ1,0 = σ2,0 = 1.Результат: zn = Kn

√X2 + Y 2 + Z2, xn = 0, yn = 0.

Здесь коррекция введена только для одной итерационной формулы.Величины Ki =

√1 + 2−2i вычисляются заранее.

Исследования показали, что другие варианты отличаются либо раз-бросом величины коэффициента деформации вектора

Kn ∈ (1.63, 1.66)

и могут быть использованы только для грубых измерений, либо боль-шими аппаратурными затратами.Вычислительная схема (17) является наиболее компактной и потомуболее удобной для распараллеливания. На ее основе можно получитьи разрядно-параллельные представления, пользуясь рассмотреннымранее приемом раскрытия итераций.

7. Заключение

В настоящей работе систематизированы последние результаты вобласти алгоритмов CORDIC. Показано, что к данному направлениюне ослабевает интерес, в связи с большими перспективами использо-вания. Алгоритмы семейства CORDIC обладают универсальностью,их целесообразно использовать для аппаратной реализации элемен-тарных функций, цифровых фильтров, алгоритмов машинной гра-фики и др. Приведена классификация алгоритмов CORDIC с указа-нием работ последних лет. Рассмотрены методы компенсации дефор-мации вектора. Предложен метод получения разрядно-параллельныхформ, обеспечивающий максимальное распараллеливание итераци-онных алгоритмов семейства CORDIC и расширение функциональ-ных возможностей. Данное представление алгоритмов может ока-заться эффективным при проектировании алгоритмического обес-печения специализированных вычислителей на основе программи-руемых логических матриц. Рассмотрены различные способы полу-чения трехмерных операций «вектор», расширяющие возможностиCORDIC-алгоритмов.

Page 18: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 370

Список литературы

[1] Байков В. Д., Смолов В. Б. Аппаратурная реализация элементарных функ-ций в ЦВМ. ––Ленинград: Издательство ЛГУ, 1975. ↑2, 2, 3.5, 6

[2] Пухов Г. Е., Евдокимов В. Ф., Синьков М.В. Разрядно-аналоговые вычис-лительные системы. ––Москва: Сов. Радио, 1978. ↑

[3] Andraka R. A survey of Cordic algorithms for FPGA based computers //ACM/SIGDA 6th International Symposium on FPGAs, 1998, c. 1981–2000. ↑2,2

[4] Antelo E., Bruguera J.D., Lang T., Zapata E. L. Error analysis and reduc-tion for angle calculation using the Cordic algorithm: Internal Report Dept. ofElectrical and Comp. Eng., UCI, 1996. ↑2

[5] Antelo E., Bruguera J.D., Zapata E. L. Unified mixed radix 2-4 redundantCordic rocessor IEEE Transactions on Computers. –– Т. 45, no.9, 1996, c. 1068–1073. ↑2, 4.2

[6] Antelo E., Bruguera J. D., Lang T., Villalba J., Zapata E. L. High perfomancerotation architectures based on the radix-4 Cordic algorithm IEEE Transactionson Computers. –– Т. 46, no.8, 1997, c. 855–870. ↑2

[7] Antelo E., Bruguera J.D., Villalba J., Zapata E.L. Redundant Cordic rotatorbased on parallel prediction // 12th Symposium on Computer Arithmetic, 1995,c. 172–179. ↑2, 4.2

[8] Antelo E., Lang T., Bruguera J.D. Very-high radix Cordic rotation based onselection by rounding, 2000. ↑2

[9] Bruguera J.D., Guil N., Lang T., Villalba J., Zapata E. L. Cordic basedparallel/pipelined architecture for the Hough transform, 1996, c. 1–18. ↑2, 3

[10] Cavallaro J.R., Luk F.T. Cordic arithmetic for a SVD processor. –– Т. 5, 1988,c. 271–290. ↑2

[11] Despain A.M Fourier transform computers using Cordic iterations IEEE Trans-actions on Computers. –– Т. C-30, 1974, c. 993–1001. ↑1

[12] Douknitch E. I. Highly parallel multidimensional Cordic-like algorithms // Int.Conf. Intelligent Multiprocessor Systems, 1999, c. 44–48. ↑2

[13] Duprat J., Muller J.M. The Cordic algorithm: new results for fast VLSI im-plementation IEEE Transactions on Computers. –– Т. 42, 1993, c. 168–178. ↑2,4.3

[14] Ercegovac M.D., Lang T. Redundant and on-line Cordic: application to matrixtriangularization and SVD IEEE Transactions on Computers. –– Т. 39, no.6,1990, c. 725–740. ↑2, 2

[15] Hekstra G. J., Deprettere F.A. Floating point Cordic // 11th Synposium onComputer Arithmetic, 1993. ↑2

[16] Hsiao S., Delosme J.–M. The Cordic Householder algorithm. –– 10th Symposiumon Computer Arithmetic, 1991, c. 256–263. ↑2

[17] Hu Y., Naganathan S. An angle recoding method for Cordic algorithm imple-mentation IEEE Transactions on Computers. –– Т. 42, 1993, c. 99–102. ↑2

[18] Hu Y. Cordic-based VLSI architectures for digital signal processing, 1992, c. 6–35. ↑2, 3

Page 19: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 371

[19] Hu Y. The quantization effects on the Cordic algorithm IEEE Transactions onComputers. –– Т. 40, no.4, 1992, c. 834–844. ↑2

[20] Lang T., Antelo E. Cordic vectoring with arbitrary target value // 13th IEEESymposium on Computer Arithmetic, 1997, c. 108–115. ↑2, 3.5

[21] Osorio R., Antelo E., Bruguera J.D., Villalba J., Zapata E. L. Digit on-line large radix Cordic rotator // Conf. on Application-Specific Array ProcessorsIEEE, 1995. ↑2

[22] Phatak D. S. Double step branching Cordic: a new algorithm for fast sine andcosine generation IEEE Transactions on Computers. –– Т. 47, no.5, 1998, c. 587–602. ↑2, 4.3

[23] Timmermann D., Hann H., Hostika B. J. Low latency time Cordic algorithmsIEEE Transactions on Computers. –– Т. 41, 1992, c. 1010–1015. ↑2

[24] Valls J., Kuhlmann M., Parhi K. Efficient mapping of Cordic algorithm onFPGA // IEEE Workshop on Signal Processing Systems, 2000. ↑2

[25] Villalba J., Lang T. Low latency word serial Cordic // Application-SpecificSystems, Architectures and Processors Conf./ IEEE, 1997, c. 124–131. ↑

[26] Villalba J., Lang T., Zapata E. L. Parallel compensation of scale factor for theCordic algorithm. –– Т. 19, no. 3, 1998, c. 227–241. ↑2, 4.1.1

[27] Vladimirova T., Tiggler H. FPGA implementation of sine and cosine generatorsusing Cordic algorithm // Military and Aerospace Applications of ProgrammableDevices and Technologies Conference, 1998, c. 28–30. ↑2, 4.3

[28] Volder J. E. The Cordic trigonometric computing technique IRE Trans. on Elec-tronic Computers. –– Т. 8, 1959, c. 330–334. ↑2, 3

[29] Walther J. S. A unified algorithm for elementary functions // Spring Joint Com-puter, 1991, c. 379–385. ↑2, 3.6

[30] Wang S., Piuri V., Swartzlander E. Granularly-pipelined Cordic processors forsine and cosine generators: Internal Report # 95-041, Politecnico di Milano,1995. ↑2, 4.3

[31] Wang S., Swartzlander E. E. Merged Cordic algorithm // International Symp.On Circuits and Systems 1995, c. 1988–1991. ↑2, 4.3

[32] Wu C., Wu A.Y. A novel rotational VLSI architecture based on Extended El-ementary Angle Set Cordic algorithm // 2th Asia Pacific Conference on ASICsIEEE, 2000, c. 111–114. ↑2, 4.2

[33] Khachumov V. Bit-parallel algorithms and devices // 11th International Con-ference on Computer graphics&vision GRAPHICON. ––Nizhny Novgorod , 2001,c. 224–226. ↑4.1.1, 5, 5

[34] Захаров А. В., Хачумов В. М. Разрядно-параллельные вычисления в систе-мах реального времени: Сб. трудов Математика, информатика: теория ипрактика. ––Переславль-Залесский: Изд-во университета г.Переславля, 2003,c. 97–104. ↑

[35] Khachumov V.M. Bit–Parallel Structures for Image Processing and Analysis //Pattern Recognition and Image Analysis Conf. Т. 13, no.4, 2003, c. 633–639. ↑5,5, 5

Page 20: Алгоритмы CORDIC. Современное состояние и перспективыskif.pereslavl.ru/~abram/share/CD-ROM-final/e-book/... · – алгоритмы с предсказанием

Алгоритмы CORDIC 372

[36] Хачумов В. М. Трехмерные операции Волдера для измерения длины вектора// Всероссийская конф. по информационно-управляющим системам и спе-циализированным вычислительным устройствам для обработки и передачиданных: Тезисы доклада. ––Махачкала, 1996, c. 95–96. ↑6

Российский Университет Дружбы Народов

Исследовательский центр искусственного интеллекта ИПС РАН

A. V. Zakahrov, V. M. Khachumov. Current state and prospectives of theCORDIC algorithms. (in russian.)

Abstract. This paper presents a taxonomy of CORDIC–based algorithms which classifiesthe algorithms based upon their implementations. First sections of this work contains thebase CORDIC theory and various extensions suggested for improving of the algorithm.Below, a new fast parallel computational approach to the CORDIC algorithm based onthe bit–parallel technique is proposed. Experimental results for trigonometric functions arereported. Last section describe general 3–dimensional CORDIC algorithm.