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

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

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


  1. 验证:

[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. 1: function [ pha]= cordic_arcsin(c);
  1. 2:
  1. 3: %y =0;
  1. 4: %将点(10)旋转至其纵坐标=c,旋转的角度为角度 求反余弦也是同样道理
  1. 5: d=0;
  1. 6: i=0;
  1. 7: z=0;
  1. 8: x=1;
  1. 9: y=0;
  1. 10: k = 0.6073; %K 增益
  1. 11: xNew = x* k;
  1. 12: while i<100
  1. 13: if y<=c d = 1;
  1. 14: else d = -1;
  1. 15: end
  1. 16: x =xNew-y*d*(2^(-i));
  1. 17: y=y+xNew*d*(2^(-i));
  1. 18: z=z+d*atan(1/2^(i));
  1. 19: i=i+1;
  1. 20:
  1. 21:
  1. 22: xNew=x;
  1. 23: end
  1. 24:
  1. 25: %mag=x;
  1. 26: pha=z;


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

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

  1. 1: function [sine,cosine] = cordic_sine(angle);
  1. 2: % Initialitation
  1. 3: %%angle=30 ;
  1. 4: x = 1;
  1. 5: y = 0;
  1. 6: z = angle;
  1. 7: d = 1;
  1. 8:
  1. 9: i = 0; % Iterative factor
  1. 10: k = 0.6073; %K Factor
  1. 11: xNew = k*x;
  1. 12: while i < 50
  1. 13: if z <=0 d =-1;
  1. 14: else d = 1;
  1. 15: end
  1. 16: x= xNew -d*y*2^(-i);
  1. 17: y=y+d*xNew*2^(-i);
  1. 18: z=z-d*atan(2^(-i));
  1. 19: i=i+1;
  1. 20: xNew=x;
  1. 21: end
  1. 22: cosine = x
  1. 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. wcf 双工

    服务器 [ServiceContract(Namespace="http://www.artech.com/", CallbackContract = typeof(ICallba ...

  2. 小白学Linux--虚拟机下安装Ubuntu16

    最近接收到任务,说是下半年可能要搞全文检索.听到后顿时炸锅了,一方面是对新技术的兴奋(当然主要还是这技术比较值钱),另一方面,我TM连Linux都不会玩,怎么搞全文检索.怀揣着对开源世界的无线向往(恐 ...

  3. js中的浅拷贝和深拷贝

    说说最近所学:浅拷贝和深拷贝也叫做浅克隆和深克隆,深浅主要针对的是对象的"深度",常见的对象都是"浅"的,也就是对象里的属性就是单个的属性,而"深&q ...

  4. jQuery对复选框(checkbox)的全选,全不选,反选等的操作

    效果截图: HTML代码: <body><ul id="list"> <li><label><input type=" ...

  5. img标签src不给路径就会出现边框————记一次二笔的编码经历

    <img/>在src加载失败或没有给的,浏览器会自动给img加上边框. 如下图这样: 产品觉得影响美观,一定要pass掉. 原码是这样: .ctn{ position: relative; ...

  6. Git的安装和使用记录

    Git是目前世界上最先进的分布式版本控制系统(没有之一),只用过集中式版本控制工具的我,今天也要开始学习啦.廖雪峰的git教程我觉得很详细了,这里记录一下步骤以及我终于学会用Markdown了,真的是 ...

  7. 【使用 DOM】使用 DOM 元素

    1. 使用元素对象 HTMLElement对象提供了一组属性,可以用它们来读取和修改被代表的数据.下表介绍了这些属性. 下面代码展示了如何使用表中所列的一些基本属性. <!DOCTYPE htm ...

  8. [ html canvas globalCompositeOperation ] canvas绘图属性 设置合成图像如何显示 属性演示

    <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...

  9. Xcode 编译运行报错: CpResource /user/xxxx/ xxx Directory not empty

    之前遇到过相同的问题,总是记吃不记打,踩过的坑后面还会踩进去... 仅以次标记加深一下印象 错误特征RT 确认该类型错误是library或frameWork的search路径问题 首先找到编译错误的路 ...

  10. 【读书笔记】iOS-Xcode知识-多线程

    一,Xcode使用的调试器是GDB.GDB是GNU项目的一部分,它可以在很多不同的平台上使用.如果你愿意,可以通过命令行来运行它.GDB有着完善的文档系统,尽管它的文档有些难于理解并且网络上流传着好几 ...