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,一经查实,立即删除!

相关文章

SpringCloud入门概述

1. 介绍 Spring Cloud 1.1 什么是 Spring Cloud Spring Cloud 是一个基于 Spring Boot 的微服务架构开发工具集,它为开发者提供了一系列开箱即用的工具和库,用于构建分布式系统中的微服务架构。Spring Cloud 提供了诸如服务发现、配置中心、负载均衡、…

【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 图形用户界面应用程序框架 。它为应用程序开发者提供了建立艺术级图形界⾯所需的所有功能。它是完全⾯向对…

电脑设置静态地址有啥用

随着信息技术的迅猛发展,计算机网络已成为现代社会不可或缺的基础设施。在网络世界中,每一台计算机都需要一个独特的标识来与其他计算机进行通信,这个标识就是IP地址。其中,静态IP地址作为一种固定的网络配置方式,在特…

C语言-----习题

1.通过这个例题,我们可以知道*p.a是无法打印99的,因为.的优先级比解引用*高; ​ struct S {int a;int b; }; int main() {struct S a, * p &a;//可以分为两部分理解//struct S a;//struct S *p &a;a.a 99;printf("%d\n"…

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

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

2024年华为OD机试真题-密码输入检测-Java-OD统一考试(C卷)

题目描述: 给定用户密码输入流input,输入流中字符<表示退格,可以清除前一个输入的字符,请你编写程序,输出最终得到的密码字符,并判断密码是否满足如下的密码安全要求。 密码安全要求如下: 1.密码长度>=8; 2.密码至少需要包含1个大写字母; 3.密码至少需要包含1个小…

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

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

从傅立叶变换到奥运五环

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

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

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

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

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

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

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

算法-16-并查集

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

Hadoop-Yarn-ResourceManagerHA

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

【深度学习】S2 数学基础 P3 微积分(上)导数与微分

目录 圆与微积分导数与微分导数的含义数学定义常用函数微分常用微分法则Python 实现 圆与微积分 公元前 2500 年&#xff0c;古希腊数学家阿基米德通过一种名为 “逼近法” 的技巧来估算圆的面积。他采用一个有奇数边的正多边形来外切圆&#xff0c;并用一个有偶数边的正多边形…

【经验】STM32的一些细节

这两天 碰到的奇葩问题是 STM32定时器同步的问题。 我的设计本意是&#xff1a;使用定时器T3以100us的周期来定时发送命令给 FPGA。由于编码器出结果的最长时间为51us。因此&#xff0c;希望PWM中断要滞后于T3 约60us 。 调试过程&#xff1a;分别在T3和PWM中断中置IO1&#…

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

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