Cordic算法原理详解

news2024/11/23 9:10:03

目录

坐标旋转分析

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θ

a65c127b79384b838a0cd1f46ba58372.jpeg

假设OA=OB=m;

假设点B在第一象限,

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

 

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算法原理

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

209cc9b68f704d39bb32caae4809525a.png

继续旋转第二次:

2b48b0723f6c4bc8b4f509e87f911ec3.png

旋转第i次:

0efe7b0870a74db3be243425098d15d7.png

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

3eb70cba66b0490d9657b8d1c3f11b83.png

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

9601c2bcc4ae41db950789fba9ef06ea.png

由于硬件比较容易通过移位实现2的乘法与除法,我们固定取第i次(从0开始计数)旋转的角度为fcf856ff724b4753ae545d8f00138d02.png ,也就是5154eb93da344873a87a718dc828d6fe.png

参考下表,一般设置旋转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°为例,可以经过如下迭代得到:

de063b0e81004237984d355f0d245483.png

 

应用举例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θ直接调用上一节表格中的值进行计算。

c63a7f9ac3304f588aa03baf0fb428fa.png

迭代过程如下:

4c20a07a15b04a52a2b37ea350485814.jpeg

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

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

 

应用举例2:求反正切值

当y(0)=2,x(0)=1,求37f16fa2969b4fdba40652ae46e56b36.png .

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

0f01356f028448ab82c9f2aa3c8ba497.jpeg

通过cordic算法后,得到ce2ae55fbf8f4b9f92ae1f73bdc32982.png

 

cosθ的还原补偿

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

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

a7b4e1f135644bc48d2be915a7fc7872.png

补偿因子An:

5a6cd93c41194498a2693ead04c797be.png

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

即,当i趋于无穷大时:

67e137e16cd7489a86d5f86cd3055954.png

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/449604.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Netty》从零开始学netty源码(四十一)之PoolChunk.runsAvail

runsAvail runsAvail用于记录long型的指针值,是一个LongPriorityQueue数组,LongPriorityQueue的结构如下: array数组用于存储handle的值,其中下标对应SizeClasses中pageIdx,size为array数组的大小,size的大…

1.13|1.14|1.15|1.6、GDB调试

1.13|1.14|1.15|1.6、GDB调试 1.13、GDB调试(1),GDB调试(2)1. 什么是GDB2. 准备工作3. GDB命令—启动、推出、查看代码实际操作①用list查看代码 1.15、GDB调试(3)1. GDB命令—断点操作实际操作…

Redis 快速上手 Java 增删改查(包含 RedisTemplateConfig 的编写)

一:Redis 数据类型 先了解 redis 的五种基本数据类型。 String 字符串类型:name: "value1"List 列表:names: ["value1", "value2", "value2"]Set 集合:names: ["value1", &qu…

多源迁移学习网络补充知识用于具有不可见故障的机器智能诊断

**摘要:**当前基于深度迁移学习的故障诊断的大多数成功需要两个假设:1)源机器的健康状态集合应当与目标机器的健康状态集合重叠;2)目标机器样本的数量跨健康状态平衡。然而,这样的假设在工程场景中是不现实的&#xff…

【闲聊杂谈】HTTPS原理详解

HTTPS和HTTP的区别 HTTP虽然使用极为广泛, 但是却存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付, 网络交易等新兴应用中安全方面最需要关注的。 关于 HTTP的明文数据传输, 攻击者最常用的攻击手法就是网络嗅探, 试图从传输过程…

Redis高可用高性能缓存的应用系列06 - 热Key,大Key,并发竞争解决方案

概述 终于迎来了Redis系列的尾声,本文针对Redis常遇到的热Key,大Key,并发竞争解决方案进行介绍。 热Key 什么是热key?当一个key的访问量明显大于其他key的时候,他就可以被称为热key。 热Key带来的问题 热key占用大量的CPU资…

黑马在线教育数仓实战7

1. hive的相关的优化 1.1 hive的相关的函数(补充说明) if函数: 作用: 用于进行逻辑判断操作语法: if(条件, true返回信息,false返回信息) 注意: if函数支持嵌套使用 nvl函数: 作用: null值替换函数格式: nvl(T value, T default_value) COALESCE函数 作用: 非空查找函数:格式…

Windows安装GPU环境CUDA、深度学习框架Tensorflow和Pytorch

Windows安装GPU环境CUDA、深度学习框架Tensorflow和Pytorch 1、未安装CUDA使用tensorflow报错 import tensorflow as tf2022-03-06 15:14:38.869955: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library cudart64_110.dll; dl…

Django | 一文完美解决admin增加新用户只有用户名密码和确认密码的问题

文章目录 如图所示,下面给出解决方案: 如果您使用 使用 Django 默认的后台管理界面添加用户时,只看到了三个字段(通常是 username、password和 repassword),那么可以通过定义 add_fieldsets 属性来增加更多…

【JUC】原子操作类

【JUC】原子操作类 文章目录 【JUC】原子操作类1. 原子操作类1.1 基本类型原子类1.2 数组类型原子类1.3 引用类型原子类1.3.1 AtomicReference1.3.2 AtomicStampedReference1.3.3 AtomicMarkableReference 1.4 对象的属性修改原子类 1. 原子操作类 原子操作类如下所示&#xf…

【Linux】进程间通信 --- 管道 共享内存 消息队列 信号量

等明年国庆去西藏洗涤灵魂,laozi不伺候这无聊的生活了 文章目录 一、进程间通信1.什么是通信?(IPC)2.为什么要有通信?(多进程协同)3.如何进行通信? 二、基于文件系统的管道通信1.通信…

acwing17给了一个头节点,从尾到头输出链表的元素,顺便练练容器

方法一 建立一个数组,从头到尾遍历一遍链表,然后将链表的每个元素的值赋给数组 犯了一个错误 新建的vector容器是一个可变长的数组,要想像数组下标那样访问前提是这个下标所指向的元素得存在,这也就跟那个声明一维数组得写出长度来…

rk3568 适配摄像头 (CIF协议)

rk3568 适配摄像头 (CIF协议) 在RK3568处理器中,支持CIF协议的摄像头可以通过CSI接口连接到处理器,实现视频数据的采集和处理。同时,RK3568还支持多种图像处理算法和编解码器,可以对采集到的视频数据进行实时处理和压缩&#xff…

[Golang实战] 带你入手gin框架使用,以项目为例

😚一个不甘平凡的普通人,致力于为Golang社区和算法学习做出贡献,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘 🤗专栏:算法学习 &am…

Dear ImGui结合CMake实现基于GLFW和OpenGL3的入门级hello world代码

Dear ImGui结合CMake实现基于GLFW和OpenGL3的入门级hello world代码 如需转载请标明出处:https://blog.csdn.net/itas109 技术交流:129518033 环境: OS: windows 10 / Ubuntu 22.04 imgui: 1.89.5 glw: 3.3.8前言 Dear ImGui 是一个 用于…

alibaba arthas的新人上手教程

背景 Arthas 是Alibaba开源的Java诊断工具。 github开源地址:GitHub - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas 上手教程 1.下载arthas,并测试运行demo curl -O https://arthas.aliyun.com/arthas-boot.j…

高防IP的定义与作用

随着网络技术的发展,网络攻击的频率和威力不断升级,对企业和个人的网络安全造成了巨大风险。于是,高防IP作为一种网络安全防护工具应运而生,成为广大用户保障网络安全的重要手段。接下来让我们一起来详细了解下高防IP的定义和作用…

web实验(1)

(1) 应用html和css完成如图所示界面效果。内容相对于浏览器居中,图标见附件disc.jpg。 说明: 内容相对于浏览器居中,图标见附件disc.jpg盒子边框1px solid #ccc,内边距20px文本字体颜色#122e67&#xff…

outlook邮箱pc/mac客户端下载 含最新版

新的 Outlook for Windows or mac 为 Outlook 应用带来了最新功能、智能辅助功能和新的新式简化设计。 你可以根据自己的风格定制它,并使用新的 Outlook for Windows/mac 执行更多操作! 览版,与我们一起开始旅程,并帮助我们塑造新…

SSM整合完整流程

🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目前在某公司实习&#x1f…