图示CORDIC算法

2023-10-29

目录

简介

原理

硬件实现


简介

CORDIC,Coordinate Rotation Digital Computer, 坐标旋转数字计算方法

应用:计算三角函数,cos,sin,tan,或者计算旋转角

原理

问题:在下图中,C点的坐标是(x0,y0),AC与AD的夹角是48.71°,求D点的坐标。

解答:

\\ x1 = x0 cos\theta - y0 sin\theta = cos\theta(x0-y0tan\theta)\\ y1 = y0 cos\theta + x1 sin\theta = cos\theta (y0+ x0 tan\theta) \\

这里的难点在于如何得到cos以及tan。

假设我们重新选择一点C',使AC'与AC之间的夹角是45°。由于tan45°=1,我们比较方便的得到C'的坐标为

\\ x_{C'} = cos\theta(x0-y0tan\theta) = cos45(x0-y0)\\ y_{C'} = cos\theta(y0+ x0 tan\theta) = cos45(y0+x0)

由于C'与D还不足够接近,我们再次选择一个点,C'',使AC''与AC'之间的夹角是22.5°,由于tan22.5°=1/2,我们比较方便的从C'得到C''的坐标为

\\ x_{C''} = cos\theta(x_{C'}-y_{C'}tan\theta) = cos22.5(x_{C'}-\frac{1}{2}y_{C'})\\ y_{C''} = cos\theta(y_{C'}+ x_{C'} tan\theta) = cos22.5(y_{C'}+\frac{1}{2}x_{C'})

C''好像离D点更远了,我们继续执行以上操作,使新的点C'''与前一个点C''的夹角为11.25°。由于C''远离了D点,因此C''要顺时针旋转11.25°来得到C'''。

\\ x_{C'''} = cos\theta(x_{C''}-y_{C''}tan\theta) = cos(-11.25)(x_{C''}+\frac{1}{4}y_{C''})\\ y_{C'''} = cos\theta(y_{C''}+ x_{C''} tan\theta) = cos(-11.25)(y_{C''}-\frac{1}{4}x_{C''})

不断的迭代以上过程,旋转的角度分别为5.625°,2.8125°等等,我们就可以无限的逼近D点

这里,还有个cos联乘的问题没有解决,好消息是:

cos45*cos22.5*cos11.25*cos5.625*cos.... = 0.0672。

那么迭代多少次次才能够满足精度要求呢?看下图,大概12次左右就可以满足

 

硬件实现

每一拍需要两个移位器,三个加法器

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图示CORDIC算法 的相关文章

  • 使用forever和always语句

    以下两个代码都会生成一个时钟 我需要知道除了时钟生成之外 永远循环是否还有其他用途 我只在时钟一代中遇到过永远 如果只是为了这个目的 那岂不是毫无用处 initial begin clk 0 forever begin 5 clk clk
  • 在逻辑中使用单端端口期待差异对?

    我使用的逻辑被设置为需要一个差分对时钟端口 然而 对于一个特定的应用程序 我只能输入一个单端时钟 由于硬件限制 修改逻辑以接受单端时钟不是一种选择 因为涉及许多文件和代码行 有没有办法可以输入单端端口并以某种方式将其馈送到模块的差异对端口
  • 使用双寄存器方法解决亚稳态问题

    为了解决Verilog中不同时钟域引起的亚稳态 采用双寄存器方法 但据我所知 亚稳态的最终输出尚未确定 输出独立于输入 那么 我的问题是如何保证使用双寄存器方法输出的正确性 Thanks 您不能完全确定您避免了亚稳态 正如您所提到的 亚稳态
  • 如何让长按电源键拒绝关机?

    在大多数较新的计算机上 您可以通过按住电源按钮几秒钟来硬关闭 但我想完全阻止这种情况发生 您可以阻止一些软事件 例如 Windows 控制面板中的睡眠 挂起 休眠和 按电源按钮 事件 您还可以使用一些 Win32 和 WDI 编程来捕获和处
  • if 语句导致 Verilog 中的锁存推断?

    我正在编写用于合成算法的 Verilog 代码 我对哪些情况可能导致推断锁存器有点困惑 下面是这样的一段代码 虽然它在模拟中工作得很好 但我担心它可能会导致硬件问题 always b1 or b2 b1 map b2 map m1 map
  • 硬件断点始终为 EXCEPTION_SINGLE_STEP

    我有一个充当调试器的程序 我为线程设置了一个 hw bp 将 dr0 设置为我想要 bp 所在的地址 并将 dr7 设置为 1 因为我希望 bp 在每次执行该地址时生成一个事件 它有效 但现在的问题是我一直没有停止接收 EXCEPTION
  • 如何使用 Verilog 和 FPGA 计算一系列组合电路的传播延迟?

    我是 FPGA 和 HDL 的新手 但我正在尝试学习 但无法弄清楚这一点 如何通过多个级别的组合逻辑来计算或估计传播延迟 我可以仅凭经验确定这一点 还是可以在设计时弄清楚 在这种情况下 我使用 FPGA 来实现奇偶校验设置和检查电路 该电路
  • 我可以通过PHP语言控制硬件吗?

    我想知道是否可以使用PHP来控制与并行端口或USB端口连接的外部硬件 有什么想法或资源吗 对于 Linux 上的串行连接设备来说 这是一个有用的类 PHP串口 http www phpclasses org browse package 3
  • 对象 <名称> 未声明

    这是我的代码 据我所知 LEDs被定义为 module sevenseg LEDs in output reg 6 0 LEDs input 3 0 in always in begin case in 0 LEDs 7 b1000000
  • 在 Verilog 设计中产生时钟故障

    我正在使用 Verilog 设计芯片 我有一个 3 位计数器 我希望当计数器处于第 8 次循环时 应该有一个时钟故障 之后就可以正常工作了 在 Verilog 设计中产生时钟故障的可能方法是什么 在时钟信号上注入毛刺的一种方法是使用forc
  • 具有 +1 逻辑的 4 位计数器 D 触发器

    我正在尝试通过 Verilog 实现带有 1 逻辑的 D 触发器计数器 但是我收到了很多有关网络多个常量驱动程序的错误代码 有人可以帮我吗 这是到目前为止的代码 module LAB clk clear Enable Q input clk
  • 使用Python直接向USB发送信号

    如何使用 Python 将 USB 端口连接设置为高或低 这可用于定制 USB 设备 例如 假设我有一个 LED 连接到 USB 端口 数据线 现在通过代码我想闪烁它或控制它 现在 这可以通过使用任何微控制器 Arduino Raspber
  • 如何获取CPU一级缓存(主缓存)信息?

    我尝试使用 WMI 获取 CPU 缓存信息 效果很好 但仅适用于 2 级和 3 级缓存 所以我的问题是 如何获取 CPU 1 级缓存信息 这是WinAPI方式 它使用GetLogicalProcessorInformation http m
  • 我怎样才能让我的verilog移位器更通用?

    这里我有一个移位器 但现在它最多只能工作 3 位 我一直在寻找 但不知道如何让它工作最多 8 位 module shifter a b out input 7 0 a b output 7 0 out wire 7 0 out1 out2
  • verilog 中的案例陈述

    我遇到了优先级编码器设计 并找到了一种使用 case 语句来实现它的新方法 唯一令人困惑的是 case语句是否优先考虑case 例子 case 1 b1 A 3 Y lt 4 b1000 A 2 Y lt 4 b0100 A 1 Y lt
  • 使用正则表达式进行 Verilog 端口映射

    我有一个很长的端口映射 我想在其中替换一堆 SignalName i with SignalName SignalName i 我想我可以用正则表达式轻松地做到这一点 但我无法弄清楚如何做到这一点 有任何想法吗 假设 SignalData
  • Verilog 按位或 ("|") 单子

    我见过 Verilog 代码 其中使用了按位或运算符 目的是什么 例如 address 15 14 0 or address 15 14 io din ramrd 不能省略 吗在这些情况下 在这种情况下 它充当归约运算符 例如 4 b100
  • 32位机器如何计算双精度数

    如果我只有32位机器 CPU如何计算双精度数 这个数字是 64 位宽 FPU 如何处理它 更普遍的问题是 如何计算比我的 alu 更宽的东西 不过我完全理解整数方式 您可以简单地split https stackoverflow com q
  • 具有内部赋值延迟的阻塞和非阻塞语句之间的区别

    以下 2 个 verilog 代码片段有什么区别 1 always in out 5 in AND 2 always in out lt 5 in 考虑到always块中不存在其他行 输出会有什么不同吗 问题参考幻灯片 16 参见 o5 和
  • 学习 Verilog 的资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 Verilog 新手 有人可以推荐学习资源 书籍 视频 博客或任何他们有良好个人经验并帮助他们更

随机推荐

  • dll 导出函数名的那些事

    经常使用VC6的Dependency查看DLL导出函数的名字 会发现有DLL导出函数的名字有时大不相同 导致不同的原因大多是和编译DLL时候指定DLL导出函数的界定符有关系 VC 支持两种语言 即C C 这也是造成DLL导出函数差异的根源
  • 2019年,iOS开发的你准备何时跳槽?

    序言 我相信很多人都在说 iOS行业不好了 iOS现在行情越来越难了 失业的人比找工作的人还要多 失业即相当于转行 跳槽即相当于降低自己的身价 那么做iOS开发的你 你是否在时刻准备着跳槽或者转行了 我们先看一下现在iOS行业 iOS程序员
  • 人脸修复祛马赛克算法CodeFormer——C++与Python模型部署

    一 人脸修复算法 1 算法简介 CodeFormer是一种基于AI技术深度学习的人脸复原模型 由南洋理工大学和商汤科技联合研究中心联合开发 它能够接收模糊或马赛克图像作为输入 并生成更清晰的原始图像 算法源码地址 https github
  • Qt5 项目文件.pro参数详解

    qmake的概念 qmake是用来为不同的平台的开发项目创建makefile的一个工具 qmake简化了makefile的生成 因此创建一个makefile只需要几行信息的文件 qmake可以供任何一个软件项目使用 而不用管他是不是使用Qt
  • C/C++Java生成指定长度随机字符串的三种方法

    学习 实验记录 也是方便自己以后查找 目录 两种实现思路 第一种实现思路 随机数转char 第二种思路 随机数取字符 C语言 使用char数组 C语言 使用char C 使用string类 Java通过字符数组或字符串方式 两种实现思路 C
  • Android OnTouchListener自定义 onTouch完全解析

    做android开发对touch事件是要清晰明了的 如果心存疑问 那么本博客 可以帮你清晰的屡清楚源码是如果实现 onLongClickListener onDoubleClickListener onClickListener 并且再次基
  • Python遍历多个列表:ValueError: too many values to unpack (expected 2)

    项目场景 在进行列表遍历的时候 希望同时遍历多个列表 问题描述 在使用循环遍历两个列表时 希望x y各自获取到数组a b里全部的元素 却产生了意料之外的报错 ValueError too many values to unpack expe
  • vue-introjs实现网站引导功能

    文章目录 说明 效果展示 静态 动态演示 相关技术 intro js 的一分钟入门说明 在 vue 项目中使用 intro js 安装 配置 使用 一些问题 只首次进入的时候显示引导 如果是 v for 循环出来的元素 我们咋显示引导内容呢
  • stm32f407 6个串口dma_STM32实例DMA 实验

    在前面我们提到过 DMA 这一章我们就来学习 STM32F1 的DMA 使 用 要实现的功能是 通过 K UP 按键控制 DMA 串口 1 数据的传送 在传送过程中让 D2 指示灯不断闪烁 直到数据传送完成 D1 指示灯闪烁提示系统正常运行
  • 华为od机试 python 计算快递主站点

    题目 题目背景 一个快递公司 有一些站点之间可以直接传送快递 如果站点A可以传送给站点B 同时站点B又可以传送给站点C 那么其实站点A也可以直接或间接地传送给站点C 现在的问题是 给定一些站点以及他们之间是否可以直接传送快递的信息 为了确保
  • QMessageBox的使用(二)

    参考博客 以下内容摘抄以下链接大神博客 https blog csdn net zjx1230 article details 83715421 QMessageBox warning this Search String Please e
  • python的launcher用法知识点总结

    更多编程教程请到 菜鸟教程 https www piaodoo com python launcher是适用于 Windows 的 Python 启动器 可帮助您定位和执行不同的 Python 版本 它允许脚本 或命令行 为特定的 Pyth
  • Idea 生成模板代码(Demo)

    1 在html文件中复制需要生成模板的代码 如下图选中部分 ctrl c 2 点击 File gt Settings 如下图 3 选择 Editor gt Live Template 点击右边的 然后点击 1 Live Template 如
  • 【Yarn】Yarn ApplicationMasterLauncher的工作机制

    文章目录 1 概述 2 源码 2 1 类变量 2 2 构造方法 2 4 serviceInit 2 5 serviceStart 2 6 LauncherThread 2 7 launch事件 2 8 AMLauncher的run 1 概述
  • 前端框架Vue(5)——Vue + Echarts (数据可视化)

    Echarts 是数据可视化中佼佼者 推荐大家可以玩一玩 非常实用 如果第一次接触Echarts的同学 这边有我以前写过的一篇入门 浅谈Echarts3 0 Vue Echarts 现附上代码
  • 数据结构作业:实现链表的基本操作

    数据结构作业 实现链表的基本操作 链表是一种常见的数据结构 它由一系列节点组成 每个节点包含数据和指向下一个节点的指针 本文将介绍链表的基本操作 包括创建链表 插入节点 删除节点以及遍历链表 首先 我们需要定义链表节点的结构体 节点包含一个
  • signature=31a231fa44057e3d64bcbe8f86676d0e,typescript-definitions

    THIS IS AN AUTOGENERATED FILE DO NOT EDIT THIS FILE DIRECTLY yarn lockfile v1 continuous auth client 1 1 0 version 1 2 3
  • 2020-04-08

    查看有关计算机的基本信息 1 右键点击 计算机 的 属性 就能看到这台电脑的基本信息了
  • Android Platform 3.0 SDK和Eclipse ADT安装记录(最初版本,纪念用)

    注意 此文非常非常地过时 只是用于个人回想 请参看 二 以后的笔记 20110926 注意 此文由于结构过于混乱且内容过时 将会被删除 用新的学习日记取代 如果我有时间的话 注 我只是为了学习简单的Android编程和模拟 所以没有考虑SD
  • 图示CORDIC算法

    目录 简介 原理 硬件实现 简介 CORDIC Coordinate Rotation Digital Computer 坐标旋转数字计算方法 应用 计算三角函数 cos sin tan 或者计算旋转角 原理 问题 在下图中 C点的坐标是