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 前言 该文私用,不定期更新,主要汇总 ...
随机推荐
- 怎样用C#代码屏蔽任务管理器?
这是我在网上找的并多加了一些我自己需要的代码,经过我的测试,可以屏蔽任务管理器,但还有一些瑕疵. 首先,我在vs2012中新建一个项目,选择window下的window窗体应用程序,把窗体form1拉 ...
- mybatis mapper association collection
1.Question Description: sometimes, POJO bean contains another bean or collection as property, it's s ...
- ahjesus 安装mongodb企业版for ubuntu
导入共匙 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 创建源列表 echo 'deb http ...
- php生成静态文件
1,通用生成方法 //获取文件内容 $content=file_get_contents("http://www.google.com/" ); $id=110; $filenam ...
- 使用Jsoup解析html网页
一. JSOUP简介 在以往用java来处理解析HTML文档或者片段时,我们通常会采用htmlparser(http://htmlparser.sourceforge.net/)这个开源类库.现在 ...
- Web前端小白入门指迷
前注:这篇文章首发于我自己创办的服务于校园的技术分享 [西邮 Upper -- 004]Web前端小白入门指迷,写得很用心也就发在这里. 大前端之旅 大前端有很多种,Shell 前端,客户端前端,Ap ...
- webform(内置对象)
一.内置对象 (一)Response - 响应请求对象1.定义:Response对象用于动态响应客户端请示,控制发送给用户的信息,并将动态生成响应.Response对象只提供了一个数据集合cookie ...
- 挖掘机技术哪家强(c++实现)
描述:为了用事实说明挖掘机技术到底哪家强,组织一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入:输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位参赛者的 ...
- C++引用笔记
1.什么是引用: 百度百科里的解释:引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样.用&符号表示 举例: using namespace std; int _tmai ...
- Mybatis学习记录(六)----Mybatis的高级映射
1.一对多查询 1.1 需求 查询订单及订单明细的信息. 1.2 sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders. ...