CORDIC算法实现极坐标(polar)到直角坐标系(Cartesian)的变换。

   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;

CORDIC算法实现直角坐标到极坐标系的变换。
   1:  function [mag, pha]= car2polar(x,y);
   2:    
   3:  %y =0;
   4:                       %将直角坐标系中的点(x,y)旋转到x轴,旋转的角度即为其极坐标的相位,在x轴的长度等于极坐标的幅度  
   5:  d=0;                 %可用于求相位,幅度
   6:  i=0;
   7:  z=0;
   8:  k = 0.6073; %K 增益
   9:   
  10:  while i<50
  11:      if y<0 d = 1;
  12:      else d = -1;
  13:      end
  14:      xNew=x-y*d*(2^(-i));
  15:      y=y+x*d*(2^(-i));
  16:      z=z-d*atan(1/2^(i));
  17:      i=i+1;
  18:       
  19:       
  20:      x=xNew;
  21:  end
  22:   x =  x*k;
  23:   mag=x;
  24:   pha=z;


验证:

[a,b]= polar2car( 1,pi/3)

a =

0.5000

b =

0.8661

[a,b]=  car2polar( 0.5000, 0.8661)

a =

1.0001

b =

1.0472

计算正切值atan只需将直角坐标变换为极坐标的程序中取出最后的角度值,即可得到反正切值。
   1:  function [ pha]= cordic_arcsin(c);
   2:    
   3:  %y =0;
   4:                         %将点(1,0)旋转至其纵坐标=c,旋转的角度为角度 求反余弦也是同样道理  
   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;


   1:  function [pha]= cordic_arccos(c);
   2:    
   3:  %y =0;  
   4:  d=0;
   5:  i=0;
   6:  z=0;
   7:  x=1;
   8:  y=0;
   9:  k = 0.6073; %K 增益
  10:   xNew =  x* k;
  11:  while i<100
  12:      if x>=c d = 1;
  13:      else d =  -1;
  14:      end
  15:      x =xNew-y*d*(2^(-i));
  16:      y=y+xNew*d*(2^(-i));
  17:      z=z+d*atan(1/2^(i));
  18:      i=i+1;
  19:       
  20:       
  21:       xNew=x;
  22:  end
  23:   
  24:   %mag=x;
  25:   pha=z;

   1:  function [  pha]= cordic_arctan(x,y);
   2:    
   3:  %y =0;
   4:                      %将点(x,y)旋转到x轴所需要的角度  
   5:  d=0;
   6:  i=0;
   7:  z=0;
   8:  k = 0.6073; %K 增益
   9:   x =  x*k;
  10:  while i<50
  11:      if y<0 d = 1;
  12:      else d = -1;
  13:      end
  14:      xNew=x-y*d*(2^(-i));
  15:      y=y+x*d*(2^(-i));
  16:      z=z-d*atan(1/2^(i));
  17:      i=i+1;
  18:       
  19:       
  20:      x=xNew;
  21:  end
  22:   
  23:   %mag=x;
  24:   pha=z;

   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




CORDIC原理与FPGA实现(2)的更多相关文章

  1. CORDIC原理与FPGA实现(1)

    CORDIC算法的来历与用途大家网上随处可以见到,这里写 一下自己的理解. 将P(x,y)旋转角度a得到新的坐标P’(x’,y’).这里的坐标变换为: x’= x cos(a) – y sin(a)  ...

  2. 【接口时序】8、DDR3驱动原理与FPGA实现(一、DDR的基本原理)

    一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:无 3.仿真工具:无 硬件平台: 1. FPGA型号:无 2. DDR3型号:无 二. 存储器的分类 存储器一 ...

  3. cordic算法的fpga实现

    cordic算法参考:http://wenku.baidu.com/view/6c623aa8910ef12d2bf9e732.html 这是百度文库的一个文档,详细介绍了cordic算法的基本内容. ...

  4. 学习cordic算法所得(流水线结构、Verilog标准)

    最近学习cordic算法,并利用FPGA实现,在整个学习过程中,对cordic算法原理.FPGA中流水线设计.Verilog标准有了更加深刻的理解. 首先,cordic算法的基本思想是通过一系列固定的 ...

  5. CORDIC算法(1):圆周旋转模式下计算三角函数和模值

    CORDIC(Coordinate Rotation Digital Computer)坐标旋转数字计算机,是数学与计算机技术交叉产生的一种机器算法,用于解决计算机的数学计算问题.发展到现在,CORD ...

  6. FPGA入门1

    FPGA入门知识介绍    近几年来,由于现场可编程门阵列(FPGA)的使用非常灵活,又可以无限次的编程,已受到越来越多的电子编程者的喜爱,很多朋友都想学习一些FPGA入门知识准备进行这个行业,现在关 ...

  7. 【接口时序】5、QSPI Flash的原理与QSPI时序的Verilog实现

    一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 4.Matlab版本:Matlab2014b/ ...

  8. 学习FPGA需要做哪些

    有些人比较差,做了一些介绍,有误导成分.有些人水平太高,介绍的很好,但是很多人依旧听不懂,得到的肯定很少.学习FPGA,在不同层次的人明显有不同的答案. 熟悉硬件描述语言语法,不需要什么都会,但是要记 ...

  9. Xilinx 常用模块汇总(verilog)【01】

    作者:桂. 时间:2018-05-07  19:11:23 链接:http://www.cnblogs.com/xingshansi/p/9004492.html 前言 该文私用,不定期更新,主要汇总 ...

随机推荐

  1. 发现自己喜欢了移动端开发--Android

    喜欢.net一直到现在了,但是自己做过的项目都不是让我自己很满意,不知道为什么,可能是自己的要求比较高吧! 下面自己记录自己的学习 src专门存放我们java源代码的包 Android 4.2.2存放 ...

  2. C语言范例学习03-中

    栈和队列 这两者都是重要的数据结构,都是线性结构.它们在日后的软件开发中有着重大作用.后面会有实例讲解. 两者区别和联系,其实总结起来就一句.栈,后进先出:队列,先进先出. 可以将栈与队列的存储空间比 ...

  3. PHP学习笔记:使用session来存储用户的登录信息

    session可以用来存储多种类型的数据,因此具有很多的用途,常用来存储用户的登录信息,购物车数据,或者一些临时使用的暂存数据等. 用户在登录成功以后,通常可以将用户的信息存储在session中,一般 ...

  4. 发布ASP.NET Core程序到Linux生产环境

    原文翻译:Publish to a Linux Production Environment 作者:Sourabh Shirhatti 在这篇文章里我们将介绍如何在 Ubuntu 14.04 Serv ...

  5. VS 2013 Preview 自定义 SharePoint 2013 列表 之 两个Bug

    SharePoint 2013 已RTM了,对于程序员来说又要了解新功能了,同时 VS 2013 也将要 RTM了,两者同时应用定会有不新功能,我们先从 自定义 列表开始. SharePoint 20 ...

  6. ASP.NET MVC的请求生命周期

    我希望能理解在浏览器输入URL并敲击回车来请求一个ASP.NET MVC网站的页面之后发生的任何事情. 为什么需要关心这些?有两个原因.首先是因为ASP.NET MVC是一个扩展性非常强的框架.例如, ...

  7. SharePoint 2013 - User

    1. 在SharePoint 2010中,可以搜索出NT AUTHORITY\authenticated users,但在SharePoint 2013中,不能搜索出,需要手动写入全名后进行验证: 2 ...

  8. SharePoint 2013 删除母版页报错“This file may not be moved, deleted, renamed, or otherwise edited”

    在使用SharePoint 2013母版页的时候,我复制了一个seattle.master页面,然后想重命名一下发现报错,删除也报错,spd.页面分别试过签入签出以后均报错,错误如下: 尝试找了一下错 ...

  9. Force.com微信开发系列(八)生成带参数的二维码

    为了满足用户渠道推广分析的需要,公众平台提供了生成带二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送.目前有两种类型的二维码,分别是临时二维码和永久二维码 ...

  10. C#中读写JSON风格的配置信息

    程序里经常要保存一些设置参数,可以用INI,CONFIG,注册表,XML等等,在stackoverflow中找到这样一篇帖子. http://stackoverflow.com/questions/4 ...