Algorithme CORDIC, souci..
BOnjour tous,
Nouvelle journée, nouveau problème: je souhaite mettre en place l'algorithme de calcul d'une fonction trigo, via le fameux algorithme CORDIC (celui implémenté dans les calculatrices).
Celui-ci ne fonctionne que pour une valeur d'angle comprise entre 0 et pi/2
Voici ce que j'ai écrit :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| function v = cordic(beta,n)
%Initialisation
v=[1;0];
sigma=1;
Kn = prod(1./sqrt(1+2.^(-2*(0:(n-1)))));
if (beta>=pi && beta<=3*pi/2)
cordic(beta-pi,n);
v=-v;
return;
end
%Algorithme Cordic pour beta entre 0 et pi/2 (algorithme non valable sinon)
if (beta>=0 && beta<=pi/2)
if beta==pi/4 % Bug dans algo Cordic sinon
v=[sqrt(2)/2;sqrt(2)/2];
return;
end
%Itérations au calcul de cos(beta) et sin(beta)
for i=0:n-1
R=[1 -sigma*(2^(-i)); sigma*(2^(-i)) 1];
v=R*v;
beta = beta-sigma*atan(2^(-i));
sigma = sign(beta);
end
%Calcul final du vecteur (cos(beta),sin(beta))
v=v*Kn;
end |
Je souhaiterais étendre l'algorithme à des angles compris en tre 0 et 2*pi. Je commence à traiter le cas (pi, 3pi/2), cf mon code.
Le problème est que quand je teste un truc du style cordic(5*pi/4), j'obtiens un truc incohérent (juste -v, comme si le rappel de la fonction ne marchait pas).
Une idée SVP ?
Merci d'avance :ccool::mrgreen: