from
Cos and Sin via CORDIC
by Luis Moreno
Calculation of trigonometrical functions (cos,sin) via CORDIC
|
| [cos1 sin1]=cossincordic(zo);
|
function [cos1 sin1]=cossincordic(zo);
%Calculation of cos(theta) and sen(theta)
%by CORDIC algorithm
%Programmer: Ing. Luis Moreno Yaguana
% UTPL-GESE
% ISTEC-RedDSP
% zo an angle in deg mode. The value of this angle must be between
% 0 and 360 degrees
%[cos1 sin1]=cossincordic(30)
%%
if zo<0
zo=-zo;
end
if zo>90 && zo<180
zo=zo-90;
sc=-1;
ss=1;
elseif zo>180 && zo<270
zo=zo-180;
sc=-1;
ss=-1;
elseif zo>270 && zo<360
zo=zo-270;
sc=1;
ss=-1;
else
sc=1;
ss=1;
end
n=9; %Number of iterations
%% Look up table
lutai=[45.00000
26.56505
14.03624
7.12501
3.57633
1.78991
0.89517
0.44761
0.22381];
%% Initialization of variables
xo=.6072; % xo=C
yo=0; % yo=0
ao=sign(zo); %Checking sign of zo
%% Iteration Zero
x=xo-yo*ao*(2^-(0));
y=yo+xo*ao*(2^-(0));
z=zo-ao*lutai(1); %Carga de primer valor de angulo
zo=z; % zo update
xo=x; % xo update
yo=y; % yo update
if zo>=0 %Checking sign of zo
ai=+1;
else
ai=-1;
end
%% n- Iteraciones
for i=1:n-1
x=xo-yo*ai*(2^-(i));
y=yo+xo*ai*(2^-(i));
z=zo-ai*lutai(i+1);
if z>=0 %Checking sign of z
ai=+1;
else
ai=-1;
end
zo=z; %zo update
xo=x; %xo update
yo=y; %yo update
end
%% Values
if sc==1 && ss==1
cos1=sc*x;% Cos
sin1=ss*y; % Sin
elseif sc==-1 && ss==1
cos1=sc*y;% Cos
sin1=ss*x; % Sin
elseif sc==-1 && ss==-1
cos1=sc*x;% Cos
sin1=ss*y; % Sin
elseif sc==1 && ss==-1
cos1=sc*y;% Cos
sin1=ss*x; % Sin
end
%% References
% - Jack E. Volder
% The CORDIC Trigonometric Computing Technique
% IRE Transcactions EC-8, 1959, 330-334
%
% - Amaya Ferney*,Velasco Jaime :Diseo de la tangente inversa usando el
% algoritmo CORDIC
%
% Grupo de Bionanoelectronica, Escuela EIEE, Universidad del Valle, Cali, Colombia
% *Grupo de Automtica y Robotica, GAR, Universidad Javeriana, Cali, Colombia
% E-mail: foamaya@puj.edu.co, jvelasco@univalle.edu.co
|
|
Contact us at files@mathworks.com