关于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算法。

最新文章

  1. 配置使用EF常见的一些问题及解决方案
  2. GLSL语言基础
  3. linux中无 conio.h的解决办法
  4. CSS line-height 和 vertical-align 精解(上篇)
  5. XtraGrid使用心得(折叠式主细档、分组统计)
  6. AngularJS中的MVC模式
  7. PHP提取身份证号码中的生日并验证是否成年的函数
  8. Script: Who’s using a database link?(找出谁在使用dblink)
  9. URAL 1727. Znaika's Magic Numbers(数学 vector)
  10. Flash、Ajax各自的优缺点,在使用中如何取舍?
  11. 【Java基础】【16List集合】
  12. Java Web开发Session超时设置
  13. Tomcat启动特慢之SecureRandom问题解决
  14. java8模拟grouby方法
  15. 实时Cartographer测试(1) - rplidar
  16. Too much thinking! Too much annoying.
  17. 解决 VUE 微信登录验证 【感谢原文:https://segmentfault.com/a/1190000009493199】
  18. git 删除远程分支文件夹
  19. 【python】并行化的又一种思路
  20. 打开AVD时报”Data partition already in use. Changes will not persist!”

热门文章

  1. ubuntu14.04 忘记了登录密码和root密码
  2. Mysql使用binlog恢复数据解决误操作问题的两种方法
  3. 3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息
  4. 封装用于解析NSDate的便利的类
  5. Service Mesh服务网格之Linkerd架构
  6. RabbitMQ学习以及与Spring的集成(三)
  7. 如何动态调用 C 函数
  8. 02.Java入门
  9. sqlmap参数
  10. selenium + python自动化测试unittest框架学习(六)分页