山一程 水一程 https://bbs.21ic.com/?809790 [收藏] [复制] [RSS] OPTIMISM, PASSION & HARDWORK

日志

CORDIC原理与FPGA实现(2)

已有 1165 次阅读2013-10-25 14:24 |个人分类:FPGA|系统分类:EDA/PLD| cordic, matlab, fpga

  
CORDIC算法实现直角坐标到极坐标系的变换。
   
       
  1. function [mag, pha]= car2polar(x,y);
  2.   
  3. %y =0;
  4.   
  5. d=0;
  6. i=0;
  7. z=0;
  8. k = 0.6073; %K 增益

  9. while i<50
  10.     if y<0 d = 1;
  11.     else d = -1;
  12.     end
  13.     xNew=x-y*d*(2^(-i));
  14.     y=y+x*d*(2^(-i));
  15.     z=z-d*atan(1/2^(i));
  16.     i=i+1;
  17.      
  18.      
  19.     x=xNew;
  20. end
  21.  x =  x*k;
  22.  mag=x;
  23.  pha=z;
  24.  
复制代码
CORDIC算法实现极坐标到直角坐标系的变换。
       
  1. function [horizonal,vertical]=polar2car(mag, pha);
  2. x =mag;
  3. y =0;
  4. z=pha;
  5. d=0;
  6. i=0;
  7. k = 0.6073; %K 增益
  8. x = k*x;
  9. while i<50
  10.     if z<0 d =-1;
  11.     else d = 1;
  12.     end
  13.     xNew=x-y*d*(2^(-i));
  14.     y=y+x*d*(2^(-i));
  15.     z=z-d*atan(1/2^(i));
  16.     i=i+1;
  17.      
  18.      
  19.     x=xNew;
  20. end      
  21. horizonal = x;
  22. vertical = y;
复制代码
计算正弦余弦
       
  1. function [sine,cosine] = cordic_sine(angle);
  2. % Initialitation
  3.    %%angle=30 ;
  4.     x = 1;
  5.     y = 0;
  6.     z = angle;
  7.     d = 1;
  8.     
  9.     i = 0;          % Iterative factor
  10.    k = 0.6073;     %K Factor
  11.     xNew = k*x;
  12.  while i < 50
  13.      if z <=0 d =-1;
  14.      else d = 1;
  15.      end
  16.      x= xNew -d*y*2^(-i);
  17.      y=y+d*xNew*2^(-i);
  18.      z=z-d*atan(2^(-i));
  19.      i=i+1;
  20.      xNew=x;
  21.  end
  22. cosine = x
  23. sine = y
复制代码
       
  1. 计算反正切
复制代码
计算反正弦
       
  1. function [ pha]= cordic_arcsin(c);
  2.   
  3. %y =0;
  4.   
  5. d=0;
  6. i=0;
  7. z=0;
  8. x=1;
  9. y=0;
  10. k = 0.6073; %K 增益
  11.  xNew =  x* k;
  12. while i<100
  13.     if y<=c d = 1;
  14.     else d =  -1;
  15.     end
  16.     x =xNew-y*d*(2^(-i));
  17.     y=y+xNew*d*(2^(-i));
  18.     z=z+d*atan(1/2^(i));
  19.     i=i+1;
  20.      
  21.      
  22.      xNew=x;
  23. end
  24.  
  25.  %mag=x;
  26.  pha=z;
  27.  
复制代码
计算反余弦
function [pha]= cordic_arccos(c);
  
%y =0;  
d=0;
i=0;
z=0;
x=1;
y=0;
k = 0.6073; %K 增益
xNew =  x* k;
while i<100
    if x>=c d = 1;
    else d =  -1;
    end
    x =xNew-y*d*(2^(-i));
    y=y+xNew*d*(2^(-i));
    z=z+d*atan(1/2^(i));
    i=i+1;
     
     
     xNew=x;
end
%mag=x;
pha=z;


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)