Академический Документы
Профессиональный Документы
Культура Документы
Captulo 1
El algoritmo CORDIC
CORDIC es un acrnimo de COordinate Rotation DIgital Computer que en castellano
significa Computadora Digital para Rotacin de Coordenadas. El algoritmo original fue propuesto
por Jack Volder en el ao 1959 [1], con el propsito de calcular funciones trigonomtricas
mediante la rotacin de vectores. La rotacin de vectores puede utilizarse a su vez para conversin
de sistemas de coordenadas (cartesiano a polar y viceversa), magnitud de vectores y como parte de
funciones matemticas mas complejas como ser la Transformada Rpida de Fourier (Fast Fourier
Transform, FFT) y la Transformada Coseno Discreta (Discrete Cosine Transform, DCT).
(1.1)
Figura 1.1
(1.2.a)
x' = r cos
V ':
y ' = r sen
(1.2.b)
(1.3)
(1.4)
y ' = cos ( y + x tg )
Si adems
cos = cos 2 =
1
=
1
cos 2
1
=
1
cos 2
1
sen + cos
cos 2
2
1
cos sen 2
+
cos 2 cos 2
2
1
1 + tg 2
x y tg
1 + tg 2
(1.5)
y + x tg
1 + tg 2
Figura 1.2
Mientras que una rotacin real no cambia la magnitud del vector V una vez rotado, una
pseudorotacin incrementa su magnitud en
V ' ' = V 1 + tg 2
(1.6)
x' ' = x y tg
(1.7)
y ' ' = y + x tg
(1.8)
n 1
z n' = z i
i =0
mientras que para una pseudorotacin,
n 1 n 1
n 1
x n' ' = x cos i y sen i 1 + tg 2 i
i =0 i =0
i =0
n 1
n 1 n 1
y n' ' = y cos i + x sen i 1 + tg 2 i
i =0
i =0 i =0
n 1
z n' ' = z i
i =0
(1.9)
, en donde
n 1
i =0
A las ecuaciones 1.8 y 1.9 se agrega una tercera ecuacin para zn que se denomina
acumulador angular [7] porque incluye las rotaciones efectuadas hasta el momento.
En la figura 1.3 se muestra un vector V rotado sobre otro vector V mediante rotaciones
menores.
Figura 1.3
Si los ngulos de rotacin se restringen de forma tal que tg = 2 i , i , la multiplicacin
por la tangente, se reduce a una operacin de desplazamiento. Los diversos ngulos pueden
obtenerse realizando una serie de rotaciones elementales cada vez mas pequeas [Anexo A]. En
cada iteracin, en lugar de determinar si se debe rotar o no, se elige el sentido de rotacin. Partiendo
de las ecuaciones dadas en (1.4), y considerando que cos( i ) = cos( i ) , una iteracin puede
expresarse como
(
= K (y
xi +1 = K i xi y i d i 2 i
y i +1
+ xi d i 2
)
)
(1.10)
1
1 + tg i
2
1
1 + 2 2i
de rotacin.
El factor de expansin K i debe ser multiplicado por las ecuaciones correspondientes a las
pseudorotaciones para obtener la rotacin real.
El ngulo final de una rotacin est determinado por la suma algebraica, segn el sentido de
rotacin, de los ngulos de las rotaciones elementales. Si se elimina K i de las ecuaciones iterativas,
se obtiene un algoritmo basado en sumas y desplazamientos. El factor K i puede aplicarse al final
del proceso como una constante K n , definida como sigue
K n = lim K i 0,6073
n
i =0
n 1
n 1
1
1
=
= 1 + 2 2i 1,6467
K n i =0 K i i =0
Como se explic anteriormente, en cada paso de iteracin, en lugar de decidir si rotar o no,
se decide el signo o sentido de la rotacin a efectuar. Por lo tanto cada ngulo final se puede
representar mediante un vector de signos, en donde cada componente corresponde a un ngulo de la
secuencia de ngulos elementales. Dichos ngulos elementales se almacenan en una tabla de
bsqueda (Lookup Table, LUT). Con esto ltimo, se modifica el acumulador angular para dar lugar
a la ecuacin,
( )
z i +1 = z i d i arctg 2 i
(1.11)
Dependiendo del sistema angular con el que se trabaje, se almacenan en la tabla las
arcotangentes correspondientes en ese sistema.
El algoritmo CORDIC se opera normalmente en dos modos. El primero, se denomina
rotacin (rotation) que rota el vector de entrada un ngulo especfico que se introduce como
parmetro. El segundo modo, denominado vectorizacin (vectoring), rota el vector de entrada hacia
el eje X, acumulando el ngulo necesario para efectuar dicha rotacin.
En el caso de una rotacin, el acumulador angular se inicializa con el ngulo a rotar. La
decisin sobre el sentido de rotacin en cada paso de iteracin, se efecta para minimizar la
magnitud del ngulo acumulado. Por ello, el signo que determina el sentido de rotacin, se obtiene
del valor de dicho ngulo en cada paso. Para el modo rotacin, las ecuaciones son
xi +1 = xi y i d i 2 i
y i +1 = y i + xi d i 2 i
(1.12)
( )
z i +1 = z i d i arctg 2
1 , si z i < 0
en donde, d i =
1 , si z i 0
partiendo de las ecuaciones (1.9), luego de n etapas, cuando z n 0 1 entonces
n 1
i =0
= z para
De aqu en ms se utiliza
wn para una variable de la forma wn' ' , a los efectos de simplificar las expresiones.
x n = An ( x0 cos z 0 y 0 sen z 0 )
y n = An ( y 0 cos z 0 + x0 sen z 0 )
zn = 0
(1.13)
n 1
An = 1 + 2 2i
i =0
Para una vectorizacin, el ngulo ingresado se rota para alinearlo con el eje X. Para obtener
este resultado, en lugar de minimizar la magnitud del acumulador angular, se minimiza la magnitud
del componente y, ya que si y = 0 entonces el vector se encuentra sobre el eje X. Asimismo se
utiliza el signo del componente y para determinar la direccin de rotacin. Si el acumulador angular
se inicializa con cero, al final del proceso contendr el ngulo de rotacin adecuado. Por lo tanto se
pueden deducir las siguientes ecuaciones
xi +1 = xi y i d i 2 i
y i +1 = y i + xi d i 2 i
(1.14)
( )
z i +1 = z i d i arctg 2
1 , si y i 0
en donde, d i =
1 , si y i < 0
y
n 1
partiendo de las ecuaciones (1.9), luego de n etapas cuando y n 0 entonces tg i = para
x
i =0
x = x0, y = y0, z = z0 [7] se obtiene
x n = An x02 + y 02
yn = 0
y
z n = z 0 + arctg 0
x0
(1.15)
n 1
An = 1 + 2 2i
i =0
x n = An x0 cos z 0
y n = An x0 sen z 0
zn = 0
(1.16)
n 1
An = 1 + 2 2i
i =0
Si adems x0 =
1
, de (1.16) se tiene que
An
x n = cos z 0
y n = sen z 0
(1.17)
zn = 0
que calcula el seno y el coseno del ngulo inicial z0 .
(1.18)
1
r
An
y0 = 0
z0 =
x0 =
(mdulo)
(fase)
se obtiene la transformacin T.
La transformacin de coordenadas cartesianas a polares se puede llevar a cabo utilizando la
transformacin inversa T
r = x 2 + y 2
T ':
y
= arctg
x
(1.19)
Sin embargo el algoritmo tambin computa la constante An que puede ser eliminada
multiplicando por su inverso, lo cual agrega cierta complejidad al algoritmo inicial ya que se precisa
de un multiplicador con el mismo ancho en bits que el resultado.
(1.20)
n 1
An = 1 + 2 2i
i =0
(1.21)
( )
z i +1 = z i d i f 2 i
La nica diferencia que presenta este algoritmo con el bsico, es la introduccin del
parmetro en la ecuacin correspondiente al componente x y la funcin f(.) que adquiere
significado segn el sistema que se utilice. El parmetro y la funcin f(.) pueden asumir uno de
los tres valores que se muestran a continuacin
=1
=0
y
y
= 1 y
f ( x) = arctg( x )
f ( x) = x
f ( x) = tgh 1 (x )
Rotacin Hiperblica
xi +1 = xi
y i +1 = y i + xi d i 2 i
(1.22)
z i +1 = z i d i 2 i
1 , si z i < 0
Para el modo rotacin, donde d i =
1 , si z i 0
la rotacin lineal produce
x n = x0
y n = y 0 + x0 z 0
(1.23)
zn = 0
Por lo tanto a partir de estas ecuaciones puede obtenerse el producto de dos valores a.b,
sustituyendo
x0 = a
y0 = 0
z0 = b
1 , si y i 0
En modo vectorizacin, donde d i =
1 , si y i < 0
la rotacin lineal produce
x n = x0
yn = z0
y0
x0
(1.24)
zn = 0
Por lo tanto a partir de estas ecuaciones puede obtenerse el cociente de dos magnitudes a/b,
sustituyendo
x0 = b
y 0 = a
z0 = 0
(1.25)
( )
z i +1 = z i d i tgh 1 2 i
1 , si z i < 0
Para el modo rotacin, donde d i =
1 , si z i 0
la rotacin hiperblica produce
x n = An ( x0 cosh z 0 + y 0 senh z 0 )
y n = An ( y 0 cosh z 0 + x0 senh z 0 )
zn = 0
(1.26)
n 1
An = 1 2 2i 0,80
i =0
1 , si y i 0
Para el modo vectorizacin, donde d i =
1 , si y i < 0
la rotacin hiperblica produce
x n = An x02 y 02
yn = 0
y
z n = z 0 + tgh 1 0
x0
(1.27)
n 1
An = 1 2 2i
i =0
Las rotaciones elementales en el sistema hiperblico no convergen. Sin embargo Walther [5]
demostr que se pueden conseguir los resultados esperados si se repiten algunas de las iteraciones
efectuadas [6].
Las funciones trigonomtricas hiperblicas equivalentes a las funciones trigonomtricas
circulares pueden obtenerse de manera similar a partir de la ecuacin 1.26.
10
entradas proporcional a la cantidad de iteraciones. Esta tabla de bsqueda puede ser implementada
como una memoria ROM. La direccin de memoria cambia acorde al nmero de iteracin. Para n
iteraciones el valor a calcular puede ser obtenido en la salida. Se requiere de un controlador que
puede ser implementado como una mquina de estados para controlar los multiplexores, la cantidad
de desplazamientos y el direccionamiento de las constantes precalculadas. Esta representacin tiene
como ventaja el uso eficiente de hardware, debido a que los recursos (registros, multiplexores,
unidades de desplazamiento y sumadores) son reutilizados en cada iteracin. En la figura 1.4 se
muestra el esquema correspondiente a la arquitectura descripta. La seal Modo especifica el modo
de operacin (Rotacin o Vectorizacin). Se considera adems en el esquema que las componentes
tienen un ancho de m bits. Sin embargo se puede ampliar el ancho en bits de los buses internos para
obtener una mejor exactitud [6].
Figura 1.4
11
Figura 1.5
velocidad de reloj
nmero de iteraciones ancho de palabra
La arquitectura resultante se muestra en la Figura 1.6. Cada etapa del algoritmo consiste en
un multiplexor, un registro de desplazamiento y un sumador algebraico bit-serie. El sumador
algebraico se implementa como un sumador completo en el que una resta se lleva a cabo sumando
el complemento a dos del valor a restar. La operacin a efectuar por el sumador algebraico se
obtiene del bit de signo del componente z para el modo rotacin. Para el modo vectorizacin, del bit
de signo se obtiene del componente y.
12
Figura 1.6
La operacin de desplazamiento (multiplicacin por 2 i ) se lleva a cabo leyendo el bit i 1
considerado a partir del extremo derecho del registro de desplazamiento. Se puede usar un
multiplexor para cambiar la posicin de acuerdo a la iteracin actual. Los valores iniciales para x0 ,
y 0 y z 0 ingresan al registro de desplazamiento por el extremo izquierdo en el esquema. Cuando el
primer bit que fue ingresado al registro es procesado por el sumador algebraico, el multiplexor
permite nuevamente el ingreso de los bits sumados al registro de desplazamiento. Por ltimo,
cuando se han completado todas las iteraciones los multiplexores permiten el ingreso de un nuevo
valor al registro de desplazamiento y el valor calculado se obtiene en la salida. Alternativamente la
carga y lectura del registro de desplazamiento puede efectuarse en paralelo para simplificar el
diseo. La desventaja que presenta esta arquitectura con respecto a las que procesan los vectores de
entrada en forma paralela es que se introduce un retardo proporcional al ancho de palabra en cada
etapa, ocasionado por los desplazamientos. Por otra parte se requiere de hardware de control mas
complejo. La ventaja que presenta esta arquitectura es que los buses de interconexin entre los
componentes son del ancho de un bit y el registro de desplazamiento est integrado con el registro
intermedio, minimizando espacio al momento de su implementacin.
13