CORDIC原理与FPGA实现(2)
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)的更多相关文章
- CORDIC原理与FPGA实现(1)
CORDIC算法的来历与用途大家网上随处可以见到,这里写 一下自己的理解. 将P(x,y)旋转角度a得到新的坐标P’(x’,y’).这里的坐标变换为: x’= x cos(a) – y sin(a) ...
- 【接口时序】8、DDR3驱动原理与FPGA实现(一、DDR的基本原理)
一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:无 3.仿真工具:无 硬件平台: 1. FPGA型号:无 2. DDR3型号:无 二. 存储器的分类 存储器一 ...
- cordic算法的fpga实现
cordic算法参考:http://wenku.baidu.com/view/6c623aa8910ef12d2bf9e732.html 这是百度文库的一个文档,详细介绍了cordic算法的基本内容. ...
- 学习cordic算法所得(流水线结构、Verilog标准)
最近学习cordic算法,并利用FPGA实现,在整个学习过程中,对cordic算法原理.FPGA中流水线设计.Verilog标准有了更加深刻的理解. 首先,cordic算法的基本思想是通过一系列固定的 ...
- CORDIC算法(1):圆周旋转模式下计算三角函数和模值
CORDIC(Coordinate Rotation Digital Computer)坐标旋转数字计算机,是数学与计算机技术交叉产生的一种机器算法,用于解决计算机的数学计算问题.发展到现在,CORD ...
- FPGA入门1
FPGA入门知识介绍 近几年来,由于现场可编程门阵列(FPGA)的使用非常灵活,又可以无限次的编程,已受到越来越多的电子编程者的喜爱,很多朋友都想学习一些FPGA入门知识准备进行这个行业,现在关 ...
- 【接口时序】5、QSPI Flash的原理与QSPI时序的Verilog实现
一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 4.Matlab版本:Matlab2014b/ ...
- 学习FPGA需要做哪些
有些人比较差,做了一些介绍,有误导成分.有些人水平太高,介绍的很好,但是很多人依旧听不懂,得到的肯定很少.学习FPGA,在不同层次的人明显有不同的答案. 熟悉硬件描述语言语法,不需要什么都会,但是要记 ...
- Xilinx 常用模块汇总(verilog)【01】
作者:桂. 时间:2018-05-07 19:11:23 链接:http://www.cnblogs.com/xingshansi/p/9004492.html 前言 该文私用,不定期更新,主要汇总 ...
随机推荐
- wcf 双工
服务器 [ServiceContract(Namespace="http://www.artech.com/", CallbackContract = typeof(ICallba ...
- 小白学Linux--虚拟机下安装Ubuntu16
最近接收到任务,说是下半年可能要搞全文检索.听到后顿时炸锅了,一方面是对新技术的兴奋(当然主要还是这技术比较值钱),另一方面,我TM连Linux都不会玩,怎么搞全文检索.怀揣着对开源世界的无线向往(恐 ...
- js中的浅拷贝和深拷贝
说说最近所学:浅拷贝和深拷贝也叫做浅克隆和深克隆,深浅主要针对的是对象的"深度",常见的对象都是"浅"的,也就是对象里的属性就是单个的属性,而"深&q ...
- jQuery对复选框(checkbox)的全选,全不选,反选等的操作
效果截图: HTML代码: <body><ul id="list"> <li><label><input type=" ...
- img标签src不给路径就会出现边框————记一次二笔的编码经历
<img/>在src加载失败或没有给的,浏览器会自动给img加上边框. 如下图这样: 产品觉得影响美观,一定要pass掉. 原码是这样: .ctn{ position: relative; ...
- Git的安装和使用记录
Git是目前世界上最先进的分布式版本控制系统(没有之一),只用过集中式版本控制工具的我,今天也要开始学习啦.廖雪峰的git教程我觉得很详细了,这里记录一下步骤以及我终于学会用Markdown了,真的是 ...
- 【使用 DOM】使用 DOM 元素
1. 使用元素对象 HTMLElement对象提供了一组属性,可以用它们来读取和修改被代表的数据.下表介绍了这些属性. 下面代码展示了如何使用表中所列的一些基本属性. <!DOCTYPE htm ...
- [ html canvas globalCompositeOperation ] canvas绘图属性 设置合成图像如何显示 属性演示
<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...
- Xcode 编译运行报错: CpResource /user/xxxx/ xxx Directory not empty
之前遇到过相同的问题,总是记吃不记打,踩过的坑后面还会踩进去... 仅以次标记加深一下印象 错误特征RT 确认该类型错误是library或frameWork的search路径问题 首先找到编译错误的路 ...
- 【读书笔记】iOS-Xcode知识-多线程
一,Xcode使用的调试器是GDB.GDB是GNU项目的一部分,它可以在很多不同的平台上使用.如果你愿意,可以通过命令行来运行它.GDB有着完善的文档系统,尽管它的文档有些难于理解并且网络上流传着好几 ...