FPGA之CORDIC算法实现_理论篇(上)
关于cordic的算法原理核心思想就是规定好旋转角度,然后通过不停迭代逐步逼近的思想来实现数学求解,网上关于这部分的资料非常多,主要可以参考:
1)https://blog.csdn.net/qq_39210023/article/details/77456031
2)https://blog.csdn.net/rookiew/article/details/74967394
Xinlinx自带的官方说明文档也非常值得参考,文章末尾会补充相关参考资料。
1、cordic的优化算法:
1)

2)第一次旋转
,
为旋转方向

3)第二次旋转
,
为旋转方向

式子一直都会有
和
,每次都可以提取
。虽然FPGA无法计算,但
,因此可以执行和
效果相同的移位操作
来取代
。对于
,可以预先全部提取出来,然后等待迭代结束之后,再把因为简化计算过程抽出的
还原回去即可。
2、公式总结:
提取
,2-i等效替换成
1)
2)
3)
迭代过程:
i从0开始迭代,假设当
时,
趋向于0(i从0至n-1),得到点
,此时点
就近似等于之前假设的点
,此时将之前抽出的
还原回去。

进一步将式子转化,可得

注意:
,
的极值为1,因此当i的次数很大,
的值趋于一个常数。
3、求解sina,cosa的起点取值问题
设起点(x0,y0),当i = n-1时,迭代结束,到达终点(xn, yn), 因为中间用了伪旋转,所以结果必须要乘以为了简化计算过程抽出的
,因此有

观察上面的式子,我们的目标是根据迭代后的xn、yn求出sina,cosa,因此可设

可将(1)化简得到

上式中的xn,yn是经过迭代后的结果,而不是之前一开始假设的点(xn,yn),要注意区分这一点。因此,我们可以观察到,最后正余弦的求解仅仅是以初始点的设置以及
的值有关,
可以预先通过matlab求解预存起来,一般经过16次的迭代后就逐渐趋于稳定。

下一篇,我会接着来讲用FPGA来实现这个Cordic算法。
FPGA之CORDIC算法实现_理论篇(上)的更多相关文章
- FPGA之CORDIC算法实现_代码实现(下)
关于FPGA之CORDIC算法的纯逻辑实现,博主洋葱洋葱“https://www.cnblogs.com/cofin/p/9188629.html”以及善良的一休军“https://blog.csdn ...
- 基于FPGA的Cordic算法实现
CORDIC(Coordinate Rotation Digital Computer)算法即坐标旋转数字计算方法,是J.D.Volder1于1959年首次提出,主要用于三角函数.双曲线.指数.对数的 ...
- 基于FPGA的cordic算法的verilog初步实现
最近在看cordic算法,由于还不会使用matlab,真是痛苦,一系列的笔算才大概明白了这个算法是怎么回事.于是尝试用verilog来实现.用verilog实现之前先参考软件的程序,于是先看了此博文h ...
- 新一代分布式实时流处理引擎Flink入门实战之先导理论篇-上
@ 目录 概述 定义 为什么使用Flink 应用行业和场景 应用行业 应用场景 实时数仓演变 Flink VS Spark 架构 系统架构 术语 无界和有界数据 流式分析基础 分层API 运行模式 作 ...
- Android下基于SDL的位图渲染(二)理论篇
理论篇 上一篇中介绍了如何将SDL2源码应用到Android渲染中,实际上SDL本身提供的android-project实现了基于android的c运行时环境,通过上面实践篇的介绍,就是完成这个环境搭 ...
- [黑金原创教程] FPGA那些事儿《数学篇》- CORDIC 算法
简介 一本为完善<设计篇>的书,教你CORDIC算法以及定点数等,内容请看目录. 贴士 这本教程难度略高,请先用<时序篇>垫底. 目录 Experiment 01:认识CORD ...
- FPGA时序约束——理论篇
在FPGA 设计中,很少进行细致全面的时序约束和分析,Fmax是最常见也往往是一个设计唯一的约束.这一方面是由FPGA的特殊结构决定的,另一方面也是由于缺乏好用的工具造成的.好的时序约束可以指导布局布 ...
- 定点CORDIC算法求所有三角函数及向量模的原理分析、硬件实现(FPGA)
一.CORDIC算法 CORDIC(Coordinate Rotation DIgital Computer)是一种通过迭代对多种数学函数求值的方法,它可以对三角函数.双曲函数和平面旋转问题进行求解. ...
- 一步步教你轻松学支持向量机SVM算法之理论篇1
一步步教你轻松学支持向量机SVM算法之理论篇1 (白宁超 2018年10月22日10:03:35) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...
随机推荐
- mysql navicat 及命令行 创建、删除数据库
1.命令行创建数据库 create database mybatis default character set utf8 collate utf8_general_ci; drop database ...
- CentOS随笔 - 5.CentOS7安装Sql Server 2017
前言 转帖请注明出处: http://www.cnblogs.com/Troy-Lv5/ 开发环境嘛, 作为.Net系Sql Server那是必备的. 听过Sql server可以安装在Linux上了 ...
- 计算机网络通信、线程、tcp、udp通信及信号量等读书笔记
一.计算机网络 1.什么是计算机网络:把分布在不同地理位置的计算机与专门的网络设备用通信线路互相连成一个规模大.功能强的系统,从而使众多计算机可以方便地互相传递信息.共享软件.硬件.数据信息等.简单来 ...
- flask的orm操作
django是有orm操作的 可想而知 那么flask也是有orm操作的,其实flask的orm操作的使用和djnago的是差不多的 django的orm操作进行条件筛选的时候后面跟着的是objec ...
- [翻译] GiFHUD
GiFHUD progress hud for displaying only animated gif images. no labels (for now) 状态指示器,仅仅用来显示gif图片,不 ...
- __iter__的有无
迭代器和生成器 1.迭代器 我们之前⼀直在⽤可迭代对象进⾏迭代操作. 那么到底什么是可迭代对象.⾸先我们先回顾⼀下⽬前我们所熟知的可迭代对象有哪些: str, list, tuple, dict, s ...
- THE CUP OF LIFE即生命之杯。
生命之杯 编辑 THE CUP OF LIFE即生命之杯. <生命之杯>(西班牙语:La copa de la vida,英语:The Cup of Life)是一首由波多黎各裔歌手瑞奇· ...
- print in或者not in, 判断在不在里面
print("不疼" in "麻花疼") # 结果False print("不疼"in "真不疼") # ...
- Uva1395 POJ3522 Slim Span (最小生成树)
Description Given an undirected weighted graph G, you should find one of spanning trees specified as ...
- 微软YY公开课[《微软中国云计算Azure平台体验与新企业架构设计》 周六晚9点
YY频道是 52545291//@_勤_: YY账号真的是一次一账号啊! 全然记不得之前注冊的//@老徐FrankXuLei: 最火爆的微软免费公开课.第一次顶峰126人.第二次96人.第三次我们又来 ...