CORDIC COordinate Rotation DIgital Computer 1
Si vous voulez vous amuser Tout le matériel de cette présentation (ppt, fichiers Matlab, etc.) se trouve ici : ProfAEtudiants 1280 Projet I Inf Cordic 2
Historique 1959 Jack E. Volder 1971 Algorithme implanté dans la HP35 3
Convention Pour les grandeurs données sous forme cartésienne, nous considérerons indifféremment un nombre complexe z et son image vectorielle Oz. x z = x + j Oz = 4
Applications de Cordic Mode rotation (ou polaire -> cartésien) x + j = (x 0 + j 0 ) e jϕ (rotation simple) cos(ϕ) + j sin(ϕ) = (1 + j 0) e jϕ (calcul de sin et cos) On obtient : cos, sin et par extension tg Mode vectoriel (ou cartésien -> polaire) ϕ = arg(x + j ) et r = sqrt(x 2 + 2 ) (calcul de r et ϕ) On obtient : r et arctg 5
Idée principale Pour les deux modes, Cordic se décompose en rotations successives. Exemple avec n=18 : n = 0 ϕ0 = atan(1) n = 1 ϕ1 = atan(1/2) n = 2 ϕ2 = atan(1/4) n = 16 ϕ17 = atan(1/2 16 ) n = 17 ϕ17 = atan(1/2 17 ) x 0 Rotation ± 45 o x 1 Rotation ± 26.565 o x 2 Rotation ± 14.036 o Rotation ± 0.0009 o x 17 Rotation ± 0.0004 o x 18 On a 2 18 angles possibles pour -99 o < γ < 99 o avec une résolution finale de ±0.0004 o
Un peu de théorie 7
Mode rotation Rotation d un angle ϕ, formule matricielle. ( ϕ) sin ( ϕ) ( ϕ) cos( ϕ) xn+ 1 cos xn = sin n+ 1 n (x n+1, n+1 ) T ϕ (x n, n ) T x On met cos(ϕ) en évidence ( ϕ) xn+ 1 1 tg xn = cos( ϕ ) tg( ϕ) 1 n+ 1 n On exprime cos(ϕ) en fonction de tg(ϕ) ( ) ( ϕ) xn+ 1 1 1 tg xn = 1 tg tg( ϕ) 1 2 n+ 1 + ϕ n Attention : ϕ ± π/2 8
Mode rotation Toute l astuce de Cordic se situe ici : on s arrange pour avoir les valeurs tg(ϕ n )= 2 -n pour n = 0 N-1. 1 1 1 tg 2 1; ; ; ;... arctg 2 45 ;26.565 ;14.036 ;7.125 ;... 2 4 8 n n o o o o ( ϕ n) = = ϕ n = ( ) = { } Par la suite, il faudra pouvoir effectuer des rotations positives et négatives. On tient compte de ce fait dans le signe de tg(ϕ n ). On pose σ = 1 pour une rotation positive et σ = -1 pour une rotation négative. On reprend la formule précédente avec ce principe. x 1 σ 2 n n+ 1 1 n = 2n n n+ 1 σ 2 1 n 1+ 2 9 x
Mode rotation On développe la multiplication matricielle x 1 σ 2 n n+ 1 1 n = 2n n n+ 1 σ 2 1 n 1+ 2 x x 1 = K +σ 2 avec K = n+ 1 n n n n n 2n n 1 n x + n 1+ 2 x x n n n Les vecteurs et 2 sont orthogonaux. n σ xn Le facteur K n est un peu embêtant. Il faudra bien en tenir compte à un moment ou à un autre. Pour le moment on le néglige. L effet désagréable est qu avec cet «oubli», le module du vecteur augmente à chaque rotation. 10
Mode rotation, exemple Si on veut effectuer une rotation d un angle quelconque γ, on va décomposer γ en une combinaison de σ ϕ n et effectuer les rotations correspondantes. Illustrons ce principe par un exemple. On veut effectuer une rotation de γ = 64.654 o degrés au vecteur (1 0) T. On note : 64.654 o = 45 o + 26.565 o 14.036 o + 7.125 o On devrait s en sortir avec 4 rotations : trois positives et une négative. 11
Mode rotation, exemple v 2 1 v 1 1 v 1 +45 o +26.6 o 1 v 0 v 2 v 4 v 3 v 3 1 1 1 +7.1 o -14 o 64.654 o 1 1 12
Mode rotation, exemple Itération 1 (γ 0 = 64.654 o, ϕ 0 = 45 o ) γ > 0 σ= 1 γ =γ ϕ = 19.654 0 1 0 0 x1 1 0 1 = 1 K1 0.707 + = = 1 0 1 1 o Itération 2 (γ 1 = 19.654 o, ϕ 1 = 26.565 o ) γ > 0 σ= 1 γ =γ ϕ = 6.911 1 2 1 1 x2 1 1 1 0.5 = K2 0.894 + = = 2 1 2 1 1.5 o Itération 3 (γ 2 = -6.911 o, ϕ 2 = 14.036 o ) γ < 0 σ= 1 γ =γ +ϕ = 7.125 2 3 2 2 x3 0.5 1 1.5 0.875 = K3 0.97 = = 3 1.5 4 0.5 1.375 o Itération 4 (γ 3 = 7.125 o, ϕ 3 = 7.125 o ) γ > 0 σ= 1 γ =γ ϕ = 0 3 4 3 3 x4 0.875 1 1.375 0.703 = K4 0.992 + = = 4 1.375 8 0.875 1.484 o 13 On s arrête car γ 4 = 0
Mode rotation, exemple On n a pas tenu compte des facteurs K n. Du coup, le module du vecteur est devenu plus grand à chaque itération. Pour une rotation, ce n est pas acceptable. On corrige les facteurs K n tous en même temps. K tot = K1 K2 K3 K4 = 0.6088 On reprend : ( γ) ( γ) xcorr x4 0.703 0.428 cos = K tot = 0.6088 = = corr 4 1.484 0.904 sin 14
Mode rotation, exemple Ce facteur K=0.6088 est toujours le même, quels que soient l angle γ et les valeurs σ n. Il ne dépend que du nombre d itérations (dans notre cas N=4). Ceci est dû au fait que les vecteurs additionnés sont toujours orthogonaux. Si on veut calculer sin et cos, on va s épargner la dernière multiplication en démarrant de manière intelligente. Au lieu de partir avec le vecteur (1 0) T, on va partir avec le vecteur (0.6088 0) T. Le slide suivant montre un exemple réel. Pour la rotation d un vecteur quelconque, on est obligé de multiplier par K au début de la rotation ou à la fin. 15
Mode rotation, exemple Itération 1 (γ 0 = 64.654 o, ϕ 0 = 45 o ) γ > 0 σ= 1 γ =γ ϕ = 19.654 0 1 0 0 x1 0.6088 0 0.6088 = 1 + = 1 0 0.6088 0.6088 o Itération 2 (γ 1 = 19.654 o, ϕ 1 = 26.565 o ) γ > 0 σ= 1 γ =γ ϕ = 6.911 1 2 1 1 x2 0.6088 1 0.6088 0.3044 = + = 2 0.6088 2 0.6088 0.9132 o Itération 3 (γ 2 = -6.911 o, ϕ 2 = 14.036 o ) γ < 0 σ= 1 γ =γ +ϕ = 7.125 2 3 2 2 x3 0.3044 1 0.9132 0.5327 = = 3 0.9132 4 0.3044 0.8371 o Itération 4 (γ 3 = 7.125 o, ϕ 3 = 7.125 o ) γ > 0 σ= 1 γ =γ ϕ = 0 3 4 3 3 x4 0.5327 1 0.8371 0.4281 = + = 4 0.8371 8 0.5327 0.9037 o 16 - La dernière valeur x 4 est la valeur approchée du cosinus - La dernière valeur 4 est la valeur approchée du sinus
Mode rotation, exemple 17
Tableau Nombre d'itérations N Rotation ϕ n Correction K 1 45 deg 0.707106781 2 26.56505118 deg 0.632455532 3 14.03624347 deg 0.613571991 4 7.125016349 deg 0.608833913 5 3.576334375 deg 0.607648256 6 1.789910608 deg 0.60735177 7 0.89517371 deg 0.607277644 8 0.447614171 deg 0.607259112 9 0.2238105 deg 0.607254479 10 0.111905677 deg 0.607253321 11 0.055952892 deg 0.607253032 12 0.027976453 deg 0.607252959 13 0.013988227 deg 0.607252941 14 0.006994114 deg 0.607252937 15 0.003497057 deg 0.607252935 16 0.001748528 deg 0.607252935 17 0.000874264 deg 0.607252935 18 0.000437132 deg 0.607252935 18 On constate que K tend vers une limite lorsque N -> inf. Après 18 itérations, la précision d itération est de 4 millièmes de degré! Important : γ lim = ϕ n 99 deg Cela signifie qu une rotation plus grande que ±γ lim est impossible. En pratique, si γ > 90 deg, on effectue la rotation en deux phases.
Réalisation FPGA InternalAngleBitNb XYBitNb InternalXYBitNb ϕ 0 d 0 ϕ 1 d 1 ϕ 2 ϕ N-1 d N-1 d 2 XYBitNb x Analse γ>π/2 K correction x 0 0 γ γ 0 Rotation nb 1 x 1 1 γ 1 Rotation nb 2 x 2 2 γ 2 Rotation nb 3 Rotation nb N x N N Arrondi x AngleBitNb InternalAngleBitNb CORDIC, mode rotation, schéma d implantation FPGA 19
Mode vectoriel Le mode vectoriel permet de calculer arctg avec une grande précision. La manœuvre consiste à effectuer des rotations successives sur un vecteur jusqu à ce que sa partie imaginaire soit nulle : r + j 0 = (x 0 + j 0 ) e -jγ Lorsque ceci est terminé, on connaît γ qui correspond à l addition de tous les σ ϕ n successifs et on connaît r qui est la partie réelle du vecteur final. Si le module r n est pas recherché, on ne corrige pas K. 20
Mode vectoriel, exemple Illustrons le principe par un exemple. On aimerait connaître le module et la phase du vecteur 16 + 40 j 21
Mode vectoriel, exemple 40 v 0-45 o 40 v 1 v 1-26.6 o 40 40 v 2 40 40 +14 o v -7.1 o 3 v 3 v 4 40 v 2 22 40
Mode vectoriel, exemple Itération 1 (γ 0 = 0 o, ϕ 0 = 45 o ) im(z ) > 0 σ= 1 γ =γ +ϕ = 45 0 1 0 0 x1 16 40 56 = 1 = 1 40 16 24 o Itération 2 (γ 1 = 45 o, ϕ 1 = 26.565 o ) im(z ) > 0 σ= 1 γ =γ +ϕ = 71.565 1 2 1 1 x2 56 1 24 68 = = 2 24 2 56 4 o Itération 3 (γ 2 = 71.565 o, ϕ 2 = 14.036 o ) im(z ) < 0 σ= 1 γ =γ ϕ = 57.629 2 3 2 2 x3 68 1 4 69 = + = 3 4 4 68 13 o Itération 4 (γ 3 = 57.629 o, ϕ 3 = 7.125 o ) im(z ) > 0 σ= 1 γ =γ +ϕ = 64.654 3 4 3 3 x4 69 1 13 70.625 = = 4 13 8 69 4.375 23 o Il manque à l évidence quelques itérations pour être vraiment précis. On a un angle approché de 64.654 o et un raon approché r = 70.625 K 43.
Mode vectoriel, exemple Exemple avec N = 18 24
Mode vectoriel, limitation Comme pour le mode de rotation, le mode vectoriel comporte une limitation. Le vecteur doit être dans les quadrants Q1 et Q4 du plan cartésien. Q2 Q1 x Q3 Q4 Pour un vecteur situé dans Q2 ou Q3, l adaptation est facile. 25
Réalisation FPGA InternalAngleBitNb InternalXYBitNb ϕ 0 d 0 ϕ 1 d 1 ϕ 2 ϕ N-1 d N-1 x Analse de quadrant x 0 0 γ 0 = 0 Rotation nb 1 x 1 1 γ 1 Rotation nb 2 x 2 2 γ 2 Rotation nb 3 d 2 Rotation nb N x N ϕ N K Arrondi Arrondi Quadrant r ϕ XYBitNb q 0 (2 bits) InternalAngleBitNb z -1 z -1 z -1 z -1 z -1 AngleBitNb q CORDIC, mode vectoriel, schéma d implantation FPGA 26
DEMOS 27