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.mzph.cn/news/682796.shtml

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

相关文章

【MySQL】索引事务

MySQL索引事务 1. 索引1.1 概念1.2 作用1.3 使用场景1.4 使用1.5 案例 2. 事务2.2 事物的概念2.3 使用 3. 内容重点总结 1. 索引 1.1 概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类…

【leetcode热题100】不同的二叉搜索树

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n 3 输出:5示例 2: 输入:n 1 输出:1 …

算法学习——LeetCode力扣回溯篇2

算法学习——LeetCode力扣回溯篇2 40. 组合总和 II 40. 组合总和 II - 力扣(LeetCode) 描述 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字…

Qt 的准备知识

文章目录 1. Qt 背景介绍2. 搭建 Qt 开发环境3. 认识 Qt Creator3.1 main.cpp3.2 widget.h3.3 widget.cpp3.4 Forms3.5 .pro文件 1. Qt 背景介绍 Qt 是⼀个 跨平台的 C 图形用户界面应用程序框架 。它为应用程序开发者提供了建立艺术级图形界⾯所需的所有功能。它是完全⾯向对…

Docker 在window 2024版笔记 下载 安装 操作 配置

---Docker 前言--- Docker windows版官方版是一款专业开源的应用容器引擎,可以加快用户构建、共享和运行现代应用程序的速度,支持运行Linux和Windows Docker容器。 Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互…

关于Windows Media Player的一些知识,看这篇文章就差不多了

你知道如何在电脑上打开Windows Media Player吗?如果它不是你电脑上默认的媒体播放器,你知道如何将其设为默认吗?此外,如果你找不到它,你知道怎么把它找回来吗?这篇文章将向你展示你想要了解的所有信息。 在这篇文章中,我们将向你展示以下信息: 如何打开Windows Medi…

从傅立叶变换到奥运五环

傅立叶变换的本质 离散傅立叶变换的本质就是用一系列的正弦(或者余弦)函数的和来拟合一个周期函数f(t)。公式如下: (1) 其中T是f(t)的周期,即f(tT)f(t)对任意t成立。和的周期是。换句话说,后两者的频率是f(t)的频率的…

推荐10个最受欢迎的 Vue.js UI 库

在2024年,随着Vue.js的不断普及和发展,这个轻量级、易于学习的JavaScript框架在前端开发者中的受欢迎程度日益上升。Vue.js之所以受到青睐,很大一部分原因是其庞大的生态系统,特别是众多的UI库,这些库提供了预先构建的组件和工具,帮助开发者快速高效地构建出既美观又响应…

Python算法深度探索:从基础到进阶

引言 本文将引导您从Python的基础算法出发,逐步深入到更复杂的算法领域。我们将探讨数组操作、图算法以及机器学习中的常用算法,并通过实例和代码展示它们在实际应用中的价值。 1. 基础算法:数组操作 数组操作是算法实现中非常基础且重要的一…

Editing While Playing 使用 Easyx 开发的 RPG 地图编辑器 tilemap eaitor

AWSD移动画布 鼠标右键长按拖拽 鼠标左键长按绘制 可以边拖拽边移动画布边绘制。 F1 导出 DLC F2 导入DLC author: 民用级脑的研发记录 1309602336qq.com 开发环境: 内置 easyx 的 devc 5.11 或者 VS 2022 TDM GCC 4.9.2 64-bit c11及以上都可运行 windows 环境运行…

算法-16-并查集

并查集简介 并查集:一开始,把a,b,c放入并查集,a自己一个集合,b自己一个,c自己一个 提供的方法 1.boolean isSameSet(a,b),判断ab是否在同一个集合 2.void union(a,b),把a所…

Hadoop-Yarn-ResourceManagerHA

在这里先给屏幕面前的你送上祝福,祝你在未来一年:技术步步高升、薪资节节攀升,身体健健康康,家庭和和美美。 一、介绍 在Hadoop2.4之前,ResourceManager是YARN集群中的单点故障 ResourceManager HA是通过 Active/St…

163基于matlab的不同目标函数的盲源信号分离基于负熵的

基于matlab的不同目标函数的盲源信号分离基于负熵的;基于负熵的改进算法; 基于峭度的;基于互信息的;基于非线性PCA的。输出解混前后信号结果。程序已调通,可直接运行。 163 负熵、峭度、互信息、PCA 信号处理 (xiaohon…

牛客——递归实现组合型枚举(枚举,dfs)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 从 1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。n>0n \gt 0n>0, 0≤m≤n0 \leq m \leq n0≤m≤n, n(n−m)≤25n(n-m)\leq 25n(n−m)≤25。 输入描述…

LeetCode Python - 17.电话号码的字母组合

目录 题目答案运行结果 题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits…

HGAME 2024 WEEK2 Web方向题解 全

---------【WEEK-2】--------- What the cow say? 题目描述:the cow want to tell you something 注意title,Python的flask漏洞可多呢 版本310 先测一下SSTI 正常情况下 SSTI测试 变量渲染测试,被waf了,说明方向对了 单单过滤…

企业人力资源大数据分析解决方案

一、 背景痛点 随着企业发展和市场竞争的加剧,传统的人力资源管理模式已经无法满足企业的需求。而大数据技术的出现,为企业提供了新的解决方案,能够更好地应对市场变化和人力资源挑战。 二、基本人力分析应用 整个人力资源体系是承接集团战略的重要部分,通过对人力资源战…

《小强升职记:时间管理故事书》阅读笔记

目录 前言 一、你的时间都去哪儿了 1.1 你真的很忙吗 1.2 如何记录和分析时间日志 1.3 如何找到自己的价值观 二、无压工作法 2.1 传说中的“四象限法则 2.2 衣柜整理法 三、行动时遇到问题怎么办? 3.1 臣服与拖延 3.2 如何做到要事第一? 3.…

文生图提示词:肖像风格

人物与肖像 --肖像风格 Portrait Styles 覆盖了从技术和媒介到时代和地域特征的广泛肖像风格,展示了人物肖像艺术的多样性和丰富性。 Realistic 现实主义 Abstract 抽象 Impressionistic 印象主义 Expressionistic 表现主义 Surrealistic 超现实主义 Photorealistic…

快速搭建PyTorch环境:Miniconda一步到位

快速搭建PyTorch环境:Miniconda一步到位 🌵文章目录🌵 🌳一、为何选择Miniconda搭建PyTorch环境?🌳🌳二、Miniconda安装指南:轻松上手🌳🌳三、PyTorch与Minic…