【算法】Cordic算法的原理及matlab/verilog应用
一、前言
单片机或者FPGA等计算能力弱的嵌入式设备进行加减运算还是容易实现,但是想要计算三角函数(sin、cos、tan),甚至双曲线、指数、对数这样复杂的函数,那就需要费些力了。通常这些函数的计算需要通者查找表或近似计算(如泰勒级数逼近)等技术来转换为硬件易于实现的方式。
CORDIC(Coordinate Rotation Digital Computer, 坐标旋转数字计算方法)算法就是一种化繁为简的算法,通过基本的加减和移位运算代替乘法运算,逐渐逼近目标值,得出函数的数值解。
二、Cordic算法理论推导
理论推导参考:CORDIC算法理论详解_cordic算法详解-CSDN博客,这篇博客的推导仔细而全面。
Cordic算法的基石在于一个规律:从tan45°开始,角度每减半,tan值也接近减半。这一规律直接将三角函数运算变成2的幂运算,而这在数字电路中可直接用移位运算来实现。
三、Cordic算法 matlab实现
3.1 已知相位(角度)求坐标(正弦余弦)
function [sin_theta,cos_theta] = cordic_sincos(theta,n)
% n:iterations
% theta: -180~180
tan_table = 2.^-(0 : n-1);
angle_rad_lut = atan(tan_table);
%angle_deg_lut = rad2deg( atan(tan_table) );k = 1;
for i = 0 : n-1k = k*(1/sqrt(1 + 2^(-2*i)));
endx = k;
y = 0;
theta_tar = theta*pi/180; % to be rad
z=theta_tar;% preprocess
if (theta_tar > pi/2) theta_tar = theta_tar - pi/2;
elseif (theta_tar < -pi/2)theta_tar = theta_tar + pi/2;
endfor i = 0 : n-1 if (z > 0) d =1;elsed=-1;endx_temp = x;y_temp =y;z_temp = z;x= x_temp - d*y_temp*2^(-i);y = y_temp + d*x_temp*2^(-i);z = z_temp - d*angle_rad_lut(i+1);endif (theta_tar > pi/2) sin_theta = -x;cos_theta = y;
elseif (theta_tar < -pi/2)sin_theta = x;cos_theta = -y;
elsesin_theta = y;cos_theta = x;
end
end
3.2 已知坐标求相位
待实现
四、cordic算法的verilog实现
待实现
相关文章:
【算法】Cordic算法的原理及matlab/verilog应用
一、前言 单片机或者FPGA等计算能力弱的嵌入式设备进行加减运算还是容易实现,但是想要计算三角函数(sin、cos、tan),甚至双曲线、指数、对数这样复杂的函数,那就需要费些力了。通常这些函数的计算需要通者查找表或近似…...
QT:信号与槽
作业: 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和…...
以动态库链接库 .dll 探索结构体参数
Dev c C语言实现第一个 dll 动态链接库 创建与调用-CSDN博客 在写dll 插件中发现的函数指针用途和 typedef 的定义指针的用法-CSDN博客 两步之后,尝试加入结构体实现整体数据使用。 注意结构体 Ak 是相同的 代码如下 DLL文件有两个,dll.dll是上面提到…...
vue快速入门(三)差值表达式
注释很详细,直接上代码 上一篇 新增内容 插值表达式基本用法插值表达式常用公式 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…...
RabbitMQ的交换机与队列
一、流程 首先先介绍一个简单的一个消息推送到接收的流程,提供一个简单的图 黄色的圈圈就是我们的消息推送服务,将消息推送到 中间方框里面也就是 rabbitMq的服务器,然后经过服务器里面的交换机、队列等各种关系(后面会详细讲&am…...
Spring的 IOC和AOP编程思想
Spring的IOC(控制反转)编程思想 IOC(Inversion of Control,控制反转)是Spring框架的核心思想之一。在传统的编程方式中,我们直接通过new关键字来创建对象,并直接调用对象的方法。这种方式下&am…...
Qt中显示hex数据的控件
效果类似QTextEdit,但是显示十六进制的数据,比如用于显示抓取串口或者bin文件的数据等等 chunks.h #ifndef CHUNKS_H #define CHUNKS_H/** \cond docNever *//*! The Chunks class is the storage backend for QHexEdit.** When QHexEdit loads data, C…...
python web 开发 - 常用Web框架
python web 开发 - 文章目录 python web 开发 -1、关于Web开发2、常用Web框架3、开发案例3.1. 使用Flask框架创建一个简单的Web应用程序3.2. 使用tornado框架创建一个简单的Web应用程序3.3. 使用Django框架创建一个简单的待办事项应用程序 4、总结 1、关于Web开发 Web当然是网…...
设计模式——适配器模式06
适配器模式 通常在已有程序中使用,至少有两个类的接口不兼容时,让相互不兼容的类能很好地合作。例如之前系统 用的Target 接口调用,现在要新增第三方接口Adaptee。如何进行适配,面向客户端提供 调用Target接口方式达到使用Adaptee…...
【鸿蒙开发】组件状态管理@Prop,@Link,@Provide,@Consume,@Observed,@ObjectLink
1. Prop 父子单向同步 概述 Prop装饰的变量和父组件建立单向的同步关系: Prop变量允许在本地修改,但修改后的变化不会同步回父组件。当父组件中的数据源更改时,与之相关的Prop装饰的变量都会自动更新。如果子组件已经在本地修改了Prop装饰…...
Web 前端性能优化之八:前端性能检测实践
五、前端性能检测实践 1、常用的检测工具 Lighthouse、Chrome开发者工具中与性能检测相关的一些工具面板、页面加载性能分析工具PageSpeed Insights、专业的性能检测工具WEBPAGETEST等 1、Chrome 任务管理器 通过Chrome任务管理器我们可以查看当前Chrome浏览器中࿰…...
安装VMware ESXi虚拟机系统
简介:ESXi是VMware公司开发的一款服务器虚拟化操作系统。它能够在一台物理服务器上运行多个虚拟机,每个虚拟机都可以独立运行操作系统和应用程序,而且对硬件配置要求低,系统运行稳定。 准备工具: 1.8G或者8G以上容…...
Vue3实践之全局请求URL配置和请求参数说明
Vue3实践之全局请求URL配置和请求参数说明 全局请求URL配置 1、首先需要导入router和axios import router from "/router";2、创建app,将router挂载到app上 const app createApp(App) app.use(router).use(elementIcons).mount(#app)3、设置全局请求…...
类和对象—初阶
目录 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 【面试题】 4.2 封装 【面试题】 5.类的作用域 6.类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式 7.3 结构体内存对齐规则 【面试题】…...
【Linux】shell 脚本基础使用
在终端中输入命令可以完成一些常用的操作,但是我们都是一条一条输入命令,比较麻烦,为了解决这个问题,就会涉及到 shell 脚本,它可以将很多条命令放到一个文件里面,然后直接运行这个文件即可。 shell 脚本类…...
nfs部署--相关记录
以下是在 CentOS 8 中将 10.40.111.41 上的 /nfsdata 目录通过 NFS 共享到 10.40.111.43 和 10.40.111.45 的 /nfsdata 目录的详细步骤: 在 10.40.111.41 上操作: 安装并配置 NFS 服务器: a. 安装 NFS 服务器软件包: sudo dnf in…...
java国产化云HIS基层医院系统源码 SaaS模式
目录 云HIS开发环境 功能模块介绍: 1、门诊模块 2、住院模块 3、药房、药库模块 编辑 4、电子病历模块 5、统计报表模块 6、系统管理模块 系统优势 云his之电子病历子系统功能 云 his 系统是运用云计算、大数据、物联网等新兴信息技术,按…...
docker 部署 Epusdt - 独角数卡 dujiaoka 的 usdt 支付插件
部署 部署说明 部署之前必须注意的几点事项,该教程不一定适合所有用户: 本教程主要是使用 docker 部署,宝塔用户或宿主机直接安装的用户请直接参考官网教程.本教程是独立部署 epusdt,使用独立的mysql和redis,与dujiaoka项目分开. 在研究的过程中发现 epusdt 也需要用到 mys…...
数据结构排序之冒泡、快速、插入、选择、堆、归并等排序及时间,空间复杂度等(超详解,绝对能满足你的需求,并能学到很多有用知识)
在本文章开始之前给大家介绍个网站,可以通过下面动画网址来理解 ,(国外的网站帮助学习数据结构很多知识,可以翻译下来,在搜索框搜索相应的排序算法进行动画演示,非常好用。)https://www.cs.usfca.edu/~galles/visualization/https://www.cs.usfca.edu/~galles/vis…...
如何在windows环境和linux环境运行jar包
功能:实现对字符串小写转大写 java代码如下: package a_od_test;import java.util.Locale; /* 实现小写转大写 打jar包 分别在windows环境和liunx环境运行*/ public class Main28_To_Upper {public static void main(String[] args) {if (args.length 1) {System.out.printl…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
【Java多线程从青铜到王者】单例设计模式(八)
wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本,sleep也是可以指定时间的,也就是说时间一到就会解除阻塞,继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒),wait能被notify提前唤醒…...
Electron简介(附电子书学习资料)
一、什么是Electron? Electron 是一个由 GitHub 开发的 开源框架,允许开发者使用 Web技术(HTML、CSS、JavaScript) 构建跨平台的桌面应用程序(Windows、macOS、Linux)。它将 Chromium浏览器内核 和 Node.j…...
LTR-381RGB-01RGB+环境光检测应用场景及客户类型主要有哪些?
RGB环境光检测 功能,在应用场景及客户类型: 1. 可应用的儿童玩具类型 (1) 智能互动玩具 功能:通过检测环境光或物体颜色触发互动(如颜色识别积木、光感音乐盒)。 客户参考: LEGO(乐高&#x…...
今日行情明日机会——20250609
上证指数放量上涨,接近3400点,个股涨多跌少。 深证放量上涨,但有个小上影线,相对上证走势更弱。 2025年6月9日涨停股主要行业方向分析(基于最新图片数据) 1. 医药(11家涨停) 代表标…...
