cordic算法圆周系统计算sin、cos、平方和开根、atan、坐标系变换

cordic算法圆周系统计算sin、cos、平方和开根、atan

  • 一、cordic圆周系统旋转模式和向量模式
    • 1.1 旋转模式
    • 1.2 向量模式
  • 二、一些需要考虑的事项
    • 2.1角度范围
    • 2.2输入正负
    • 2.3关于迭代精度
    • 2.4坐标系旋转
  • 参考文献:

若想计算 s i n sin sin c o s cos cos x 2 + y 2 \sqrt{x^2+y^2} x2+y2 a t a n atan atan、坐标系旋转等复杂的数学运算,cordic算法提供了一种逼近的思想。cordic的圆周系统可以较精准的求解出上述数学运算,它将复杂的三角函数等数学运算通过迭代的方式分解为移位和加法,最终逼近所需要的求解精度。

一、cordic圆周系统旋转模式和向量模式

关于cordic算法的背景和理论网上已经有大量的参考文献,此处仅仅简述cordic算法的工作模式:

1.1 旋转模式

旋转模式的思想就是想通过旋转的方式,初始化 x 0 = K x_0=K x0=K y 0 = 0 y_0=0 y0=0 z 0 = θ z_0=\theta z0=θ,每次迭代通过 z i z_i zi值的正负性确定旋转方向,将已知的角度值 z 0 z_0 z0通过不断的迭代,逐渐逼近到 z n = 0 z_n=0 zn=0的过程。最终 x n = c o s θ x_n=cos \theta xn=cosθ y n = s i n θ y_n=sin \theta yn=sinθ θ ∈ ( − π ∼ π ) \theta\in(-\pi \sim \pi) θ(ππ)

1.2 向量模式

向量模式的思想就是初始化 x 0 = A x_0=A x0=A y 0 = B y_0=B y0=B z 0 = 0 z_0=0 z0=0,每次迭代通过 y i y_i yi值的正负性确定旋转方向,最终使初始向量旋转至 x x x轴的正半轴,使 y n y_n yn趋向于 0 0 0。最终 x n = A 2 + B 2 x_n=\sqrt{A^2+B^2} xn=A2+B2 y n = a r c t a n ( B A ) y_n= arctan(\frac{B}{A}) yn=arctan(AB)

二者模式的对比如下:
cordic圆周系统

二、一些需要考虑的事项

2.1角度范围

旋转模式的目标旋转角度 θ i \theta_i θi的取值范围是 [ − 99.8829 ° ∼ 99.8829 ° ] [-99.8829\degree \sim 99.8829\degree] [99.8829°99.8829°] ,而计算sin、cos大部分需要的角度要大于此角度,因此可通过正余弦定理将第一二三四象限的角度全部统一到第一象限,即0-90度。即可满足 [ − 180 ° ∼ 180 ° ] [-180\degree \sim 180\degree] [180°180°] 的实际项目需要。计算arctan的角度需要的范围完全满足,因此不需要特殊处理。

2.2输入正负

当求解 x 2 + y 2 \sqrt{x^2+y^2} x2+y2 时,注意输入的x,y值建议为正数,若为signed值,建议将负数转化成正数。实测发现当输入为负数时,求得的结果的误差较输入全正数时大的多。

2.3关于迭代精度

因项目要求,需要尽可能的减少资源,因此要求在保证精度的前提下通过减少迭代次数等方式进行优化来降低资源占用。
在迭代精度上,以求解 a t a n atan atan的精度为例:当迭代16次时,求解 a r c t a n 1 arctan1 arctan1 的角度值如图1所示,能精确到小数点后两位。经过实测,如图2所示,当迭代8次时,通过四舍五入的方式求得的角度值基本符合项目要求(要求数值精确到整数)。
图1:求解atan迭代16次精度

图1 求解atan迭代16次的精度

在这里插入图片描述

图2 求解atan迭代8次的精度

例2: 求解 1 2 + 1 2 \sqrt{1^2+1^2} 12+12 迭代16次的精度如图3所示, 精度非常高:
求解根号迭代16次的精度

图3 求解$\sqrt{1^2+1^2}$迭代16次的精度

2 \sqrt{2} 2 的理论值如下:
根号2的理论值

2.4坐标系旋转

由于多个雷达的点云数据需要统一到同一个坐标系下进行计算,因此用到了坐标系旋转。该算法也可利用Cordic算法思想进行求解,此时输入为 x 0 x_0 x0 y 0 y_0 y0 θ \theta θ,输出取 x n x_n xn y n y_n yn。迭代方程此时变为:
{ x n = K ( x 0 + d i y 0 2 − i ) y n = K ( y 0 − d i y 0 2 − i ) \left\{ \begin{matrix} x_n=K(x_0+d_i y_0 2^{-i}) \\ y_n=K(y_0-d_i y_02^{-i}) \end{matrix} \right. {xn=K(x0+diy02i)yn=K(y0diy02i)
将原有的Cordic算法稍作更改即可实现。

参考文献:

流水线求sincos:
https://blog.csdn.net/u010712012/article/details/77755567
坐标系旋转:
https://zhuanlan.zhihu.com/p/631899064
https://zhuanlan.zhihu.com/p/41263701
流水线求arctan:
https://blog.csdn.net/zwl_liang/article/details/104885263
开源ip核:
https://opencores.org/projects/cordic_atan_iq

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CTFshow web(php文件上传155-158)

web155 老样子,还是那个后端检测。 知识点: auto_append_file 是 PHP 配置选项之一,在 PHP 脚本执行结束后自动追加执行指定的文件。 当 auto_append_file 配置被设置为一个文件路径时,PHP 将在执行完脚本文件的所有代码后&…

LeetCode Python - 16.最接近的三数之和

目录 题目答案运行结果 题目 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 1: 输入:nums [-1,2,1,-4],…

双链表简介

一.双链表 这里简单的介绍一下双链表,双链表也是和单链表是一种类型的结构,但是也有些许不同,其中不同的地方在于,双链表多了一个可以存储上一个单元的地址,并且是循环的链表,而且还增加了一个哨兵位&…

C语言—简单的if语句

1.输入你的身高和体重,测试你的健康状况。 计算bmi的值, bmi (体重/身高的平方) 如果bmi 小于18.5,则显示“偏瘦,注意加强营养” 如果bmi 在18.…

网络原理(3)--以太网协议,DNS

💕"Echo"💕 作者:Mylvzi 文章主要内容:网络原理(3)–以太网协议,DNS 在网络原理(2)中介绍了网络层中的一个重要的协议–ip协议,网络层关注的通信时的起点和终点,而数据链路层更加"底层"一些,关注的是传输过程…

如何在极低成本硬件上落地人工智能算法 —— 分布式AI

一、背景 分布式AI的发展前景非常广阔,随着5G、6G等高速网络通信技术的普及和边缘计算能力的提升,以及AI算法和硬件的不断优化进步,分布式AI将在多个领域展现出强大的应用潜力和市场价值: 1. **物联网(IoT&#xff0…

Proteus -模拟串口被关闭后怎样打开

Proteus -模拟串口被关闭后怎样打开 点击恢复弹出窗口,即可重新打开

基于Echarts的可视化项目

整体的效果 概览区域 <!-- 概览区域模块制作 --><div class"panel overview"><div class"inner"><ul><li><h4>2190</h4><span><i class"icon-dot"></i>设备总数</span></…

软件实例分享,洗车店系统管理软件会员卡电子系统教程

软件实例分享&#xff0c;洗车店系统管理软件会员卡电子系统教程 一、前言 以下软件教程以 佳易王洗车店会员管理软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、会员卡号可以绑定车牌号或手机号 2、卡号也可以直接使用手机号&a…

121.乐理基础-五线谱-五线谱的临时变音记号规则

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;五线谱的多声部与指法问题 前置内容&#xff1a;还原号、临时变音记号在简谱中的规则 变音记号三个规则&#xff1a; 例子1&#xff1a;下方乐谱中午任意变音记号&#xff0c;所以就遵循第三个规则&#xff0c;它…

腾讯云4核8G服务器多少钱?

腾讯云4核8G服务器多少钱&#xff1f;轻量应用服务器4核8G12M带宽一年446元、646元15个月&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;标准型SA2服务器1444.8元一年&#xff0c;在txy.wiki可以查询详细配置和精准报价…

【C语言】数据结构#实现堆

目录 &#xff08;一&#xff09;堆 &#xff08;1&#xff09;堆区与数据结构的堆 &#xff08;二&#xff09;头文件 &#xff08;三&#xff09;功能实现 &#xff08;1&#xff09;堆的初始化 &#xff08;2&#xff09;堆的销毁 &#xff08;3&#xff09;插入数据 …