Cordic算法原理详解

这篇具有很好参考价值的文章主要介绍了Cordic算法原理详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

坐标旋转分析

Cordic算法原理

应用举例1:求sin值与cos值

应用举例2:求反正切值

cosθ的还原补偿


坐标旋转数字计算机CORDIC(COordinate Rotation DIgital Computer)算法,通过移位和加减运算,能递归计算常用函数值,如Sin,Cos,Sinh,Cosh等函数,由J. Volder于1959年提出,首先用于导航系统,使得矢量的旋转和定向运算不需要做查三角函数表、乘法、开方及反三角函数等复杂运算。J. Walther在1974年用它研究了一种能计算出多种超越函数的统一算法。

坐标旋转分析

已知:OA逆时针旋转θ角度后得到OB,线段OA=OB,∠AOB=θ,A 点坐标(x1,y1),B 点坐标(x2,y2);

求证:x2=x1*cosθ - y1*sinθ;y2=x1*sinθ+ y1*cosθ

cordic,算法,CORDIC,迭代算法,mcu,fpga开发

假设OA=OB=m;

假设点B在第一象限,

x1=m*cosα,y1=m*sinα。

 文章来源地址https://www.toymoban.com/news/detail-763387.html

x2=m*cos(α+θ)=m*(cosαcosθ- sinαsinθ)

=m*(cosαcosθ- cosαtanαsinθ)

=m*cosα*(cosθ- tanαsinθ)

=x1*(cosθ- tanαsinθ)

=x1*cosθ-x1* tanαsinθ

=x1*cosθ-y1* sinθ

 

y2=m*sin(α+θ)=m*(sinαcosθ+ cosαsinθ)

=m*sinαcosθ+ m*cosαsinθ)

=y1cosθ+x1sinθ

 

假设点B在第四象限,

x1=m*cosα,y1=m*sinα。

 

x2=m*cos(360°-(θ+α))=m*cos(-(α+θ))=

=m*cos(α+θ)=m*(cosαcosθ- sinαsinθ)

=m*(cosαcosθ- cosαtanαsinθ)

=m*cosα*(cosθ- tanαsinθ)

=x1*(cosθ- tanαsinθ)

=x1*cosθ-x1* tanαsinθ

=x1*cosθ-y1* sinθ

 

y2=-m*sin(360°-(θ+α))=-m*sin(-(θ+α))

=m*sin(α+θ)=m*(sinαcosθ+ cosαsinθ)

=m*sinαcosθ+ m*cosαsinθ)

=y1cosθ+x1sinθ

同理,无论A在第几象限,B旋转到第几象限,公式都成立。

 

Cordic算法原理

将坐标关系写成矩阵形式:

cordic,算法,CORDIC,迭代算法,mcu,fpga开发

继续旋转第二次:

cordic,算法,CORDIC,迭代算法,mcu,fpga开发

旋转第i次:

cordic,算法,CORDIC,迭代算法,mcu,fpga开发

提取出cosθ便得到了初步的cordic算法公式:

cordic,算法,CORDIC,迭代算法,mcu,fpga开发

如果将上式中的cosθ忽略掉,则称该旋转过程为伪旋转,角度正确,但是模长变化,即:

cordic,算法,CORDIC,迭代算法,mcu,fpga开发

由于硬件比较容易通过移位实现2的乘法与除法,我们固定取第i次(从0开始计数)旋转的角度为cordic,算法,CORDIC,迭代算法,mcu,fpga开发 ,也就是cordic,算法,CORDIC,迭代算法,mcu,fpga开发

参考下表,一般设置旋转16次,既可以认为得到比较精准的逼近值。

第i次旋转

tanθi

角度

旋转弧度

0

2^-0

45°

0.78539

1

2^-1

26.565°

0.46365

2

2^-2

14.036°

0.24498

3

2^-3

7.1250°

0.12435

4

2^-4

3.5763°

0.06241

5

2^-5

1.7899°

0.03123

6

2^-6

0.8951°

0.01562

7

2^-7

0.4476°

0.00781

8

2^-8

0.2238°

0.00391

9

2^-9

0.1119°

0.00195

10

2^-10

0.0559°

0.00098

11

2^-11

0.0279°

0.00049

12

2^-12

0.0139°

0.00024

13

2^-13

0.0069°

0.00012

14

2^-14

0.0035°

0.00006

15

2^-15

0.0017°

0.00003

Cordic 算法的思想是通过迭代的方法,不断的旋转特定的角度,使得累计旋转的角度无限接近某一设定的角度,每次旋转的角度的θ = arctan( 1/(2^n) );

以目标角度α=30°为例,可以经过如下迭代得到:

cordic,算法,CORDIC,迭代算法,mcu,fpga开发

 

应用举例1:求sin值与cos值

当z(0)=30°时,计算sin z(0),cos z(0).

迭代计算方法如下表,其中z(i)表示第i次迭代前和目标角度的差值;di表示z(i)的正负;θ(i)表示第i次迭代发生旋转的角度;y(i)为第i次迭代前的纵坐标;x(i)为第i次迭代前的横坐标;

迭代过程中,根据下式计算x(i+1)与y(i+1)的值,tanθ直接调用上一节表格中的值进行计算。

cordic,算法,CORDIC,迭代算法,mcu,fpga开发

迭代过程如下:

cordic,算法,CORDIC,迭代算法,mcu,fpga开发

通过cordic算法后,得到sin30°=0.5006,cos30°=0.8657。

结果没有问题,但是x(0)为什么取0.6073呢?继续往下看吧~答案就在后面~

 

应用举例2:求反正切值

当y(0)=2,x(0)=1,求cordic,算法,CORDIC,迭代算法,mcu,fpga开发 .

z(i)表示第i次旋转前总共旋转的角度;θ(i)表示第i次迭代发生旋转的角度;y(i)表示第i次旋转前的纵坐标;di表示θ(i)的正负方向,在下表中省略。

cordic,算法,CORDIC,迭代算法,mcu,fpga开发

通过cordic算法后,得到cordic,算法,CORDIC,迭代算法,mcu,fpga开发

 

cosθ的还原补偿

前面分析cosθ时讲到了伪旋转,每旋转1次,模长缩小了cosθi,我们如果最终须要恢复原有模长的话,就需要在最后的结果上乘以补偿系数An。

设Ai为第i次旋转的补偿系数,,根据三角函数及勾股定理可得:

cordic,算法,CORDIC,迭代算法,mcu,fpga开发

补偿因子An:

cordic,算法,CORDIC,迭代算法,mcu,fpga开发

旋转的次数越多,旋转的角度趋近于0°,Ai趋近于1,经过计算,当n趋于无穷大时,An趋近于0.607252935。

即,当i趋于无穷大时:

cordic,算法,CORDIC,迭代算法,mcu,fpga开发

 

到了这里,关于Cordic算法原理详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【FPGA】Xilinx Cordic IP 内核使用记录(输入输出数据格式介绍)及实验仿真

    【FPGA】Xilinx Cordic IP 内核使用记录(输入输出数据格式介绍)及实验仿真

    Rotate 实现的功能是坐标的旋转。 输入 X, Y, Phase 输出X’, Y’ 具体实现的功能对应的数学表达形式如下: 在做FFT 复乘旋转因子时也可以用这个IP核的Rotate功能来实现。旋转因子-旋转! Translation 实现的功能是求模,以及向量的夹角 输入 X, Y 输出X’ and Phase 具体实现的功能对应

    2024年02月07日
    浏览(14)
  • Vivado cordic IP核rotate和translate使用详解(附有代码)

    Vivado cordic IP核rotate和translate使用详解(附有代码)

    Vivado cordic IP核rotate和translate使用详解(附有代码) 目录 前言 一、cordic简介 二、使用cordic IP核需要知道的预备知识 1.数据端口 2.Q Numbers Format 3.Vector Translation 4.Vector Rotation 三、IP核配置说明 1.translate 2.Rotate 四、Translate仿真 1.顶层代码 2.仿真代码 五、Rotate仿真 1.顶层代码 2.仿真代

    2023年04月27日
    浏览(114)
  • vivado CORDIC ip核计算arctan记录

    vivado CORDIC ip核计算arctan记录

    本文主要记录自己使用vivado CORDIC ip 核计算arctan的过程。 下面是我测试工程的具体配置。 要计算arctan需要在 Functional Selection 选择为“Arc Tan”,结构默认为并行结构。 Pipelining Mode 可以设置为最大值(Maximum)、最优值(Optimal)和不设置流水线(No pipelining即纯组合逻辑实现)

    2024年02月07日
    浏览(11)
  • 【STM32】STM32G系列使用CORDIC模块加速计算

    【STM32】STM32G系列使用CORDIC模块加速计算

    STM32G431系列产品内置了CORDIC运算单元,可以用来加速数学计算,如三角函数、取模、开方等。适合大量数据进行相同的运算操作。配合DMA可以大大节省CPU计算开销。 使用CORDIC模块无需配置参数,若采用DMA方式则只需配置DMA读写通道,配置如下 在代码中对cordic模块进行初始化

    2024年02月12日
    浏览(84)
  • 基于SPI的FPGA-MCU通用通信界面设计与技术详解

    基于SPI的FPGA-MCU通用通信界面设计与技术详解

    FPGA与MCU之间的通信想必是很多异构人极为头疼的难题。如果每次写一个工程都要大费周章重写通信逻辑、通信协议之类的东西,不仅耗费心神,而且浪费时间。本文基于安陆PH1A90SBG484,提出一个已经通过门级仿真验证的通用通信界面解决方案。详细代码见以下链接: Github代

    2024年02月04日
    浏览(11)
  • [Unity] 基于迭代器的协程底层原理详解

    Unity 是单线程设计的游戏引擎, 所有对于 Unity 的调用都应该在主线程执行. 倘若我们要实现另外再执行一个任务, 该怎么做呢? 答案就是协程. 协程本质上是基于 C# yield 迭代器的, 使用 yield 语法生成的返回迭代器的方法, 其内部的逻辑执行, 是 “懒” 的, 只有在调用 MoveNext 的时

    2024年01月16日
    浏览(9)
  • 数据结构与算法----详解二叉树的遍历(迭代、递归)

    数据结构与算法----详解二叉树的遍历(迭代、递归)

    ❤️ 作者简介 :大家好我是小鱼干儿♛是一个热爱编程、热爱算法的大三学生,蓝桥杯国赛二等奖获得者 🐟 个人主页 :https://blog.csdn.net/qq_52007481 ⭐ 个人社区 :【小鱼干爱编程】 🔥 算法专栏 :算法竞赛进阶指南 💯 刷题网站 :虽然市面上有很多的刷题网站,但是里面

    2024年01月24日
    浏览(15)
  • MCU最小系统原理图中四个问题详解——芯片中有很多电源管脚的原因(VDD/VSS/VBAT)、LC滤波、两级滤波、NC可切换元件

    MCU最小系统原理图中四个问题详解——芯片中有很多电源管脚的原因(VDD/VSS/VBAT)、LC滤波、两级滤波、NC可切换元件

    前言: 本文对MCU最小系统原理图中的四个问题进行详解:芯片中有很多电源管脚的原因(VDD/VSS/VBAT)、LC滤波、两级滤波、NC可切换元件。本文以GD32F103C8T6最小系统原理图举例 目录: 芯片中有很多电源管脚的原因(VDD/VSS/VBAT) 两级滤波 LC滤波 NC可切换元件 本文以GD32F103C8T6最

    2024年01月17日
    浏览(10)
  • FPGA图像处理的一些方法、原理和算法优缺点介绍

    FPGA图像处理的一些方法、原理和算法优缺点介绍

    目录 一、FPGA图像处理的基本原理 二、FPGA图像处理的方法 1. 图像滤波 2. 边缘检测 3. 图像分割 4. 图像增强 5. 图像目标提取算法 6. 注意事项 三、FPGA图像处理的应用 1. 医学影像 2. 工业检测 3. 安防监控 四、总结 注意:后续技术分享,第一时间更新,以及更多更及时的技术资

    2024年02月15日
    浏览(14)
  • 语音降噪系统 FPGA 实现及算法详解

    语音降噪系统 FPGA 实现及算法详解 在日常的语音通信中,由于外部噪声等干扰因素的存在,会使得语音质量受到影响,甚至无法正常进行通信。为了解决这个问题,我们可以利用 SOPC 技术实现语音降噪系统,并在其中应用相应的算法。 在本文中,我们将探讨如何基于 FPGA 平

    2024年01月20日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包