CORDIC逼近算法
现在开始学习CORDIC算法
学习的博文:
(1)http://blog.csdn.net/liyuanbhu/article/details/8458769 三角函数计算,Cordic 算法入门
(1)很好的解释了cordic算法的思想。坐标旋转公式。推导http://www.cnblogs.com/ywxgod/archive/2010/08/06/1793609.html
顺时针旋转: x' = xcos(θ) + ysin(θ), y' = -xsin(θ) + ycos(θ);
逆时针旋转:x' = xcos(θ) - ysin(θ), y' = xsin(θ) + ycos(θ);
知道这个后,要确定(x,y)的极坐标ρ = sqrt(x2+y2 ), θ = arctan(y/x)。其中θ 的求解就是一个要求超函数。在博文中是通过二分查找发。其中逼近的指标是y = 0;到此我估计cordic算法也是一种类似的逼近。
这个二分查找实在是形象。
使用FPGA实现如下:只使用了5级流水线。其角度精度在26-7.
//*****************************************************************************************
//
// function: achieve the coordinate rotation digital computers 5
//
//
// corn 2014.11.15
//
//
//***************************************************************************************** module cordic_module(
input clk, rst_n, input signed [ : ] x0, y0, output reg signed [ : ] r, syta ); parameter WIDTH = ; reg signed [WIDTH - : ] x0_r, x1_r, x2_r, x3_r, x4_r;
reg signed [WIDTH - : ] y0_r, y1_r, y2_r, y3_r, y4_r;
reg signed [WIDTH - : ] syta0_r, syta1_r, syta2_r, syta3_r, syta4_r; always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
syta0_r <= ;
end
else begin
//first stage----------------------------------------------------------
if(x0 >= ) begin //in the first sector or forth sector
x0_r <= x0;
y0_r <= y0;
syta0_r <= ;
end
else if(y0 >= ) begin //in the second sector
x0_r <= y0;
y0_r <= -x0;
syta0_r <= ;
end
else begin //in the third sector
x0_r <= -y0;
y0_r <= x0;
syta0_r <= -;
end
//second stage arctan(1)-------------------------------------------------------
if(y0_r >= ) begin
x1_r <= x0_r + y0_r;
y1_r <= y0_r - x0_r;
syta1_r <= syta0_r + ;
end
else begin
x1_r <= x0_r - y0_r;
y1_r <= y0_r + x0_r;
syta1_r <= syta0_r - ;
end
//third stage arctan(2)---------------------------------------------------------
if(y1_r >= ) begin
x2_r <= x1_r + y1_r / ;
y2_r <= y1_r - x1_r / ;
syta2_r <= syta1_r + ;
end
else begin
x2_r <= x1_r - y1_r / ;
y2_r <= y1_r + x1_r / ;
syta2_r <= syta1_r - ;
end
//forth stage arctan(4)---------------------------------------------------------
if(y2_r >= ) begin
x3_r <= x2_r + y2_r / ;
y3_r <= y2_r - x2_r / ;
syta3_r <= syta2_r + ;
end
else begin
x3_r <= x2_r - y2_r / ;
y3_r <= y2_r + x2_r / ;
syta3_r <= syta2_r - ;
end
//fiveth stage arctan(8)---------------------------------------------------------
if(y3_r >= ) begin
x4_r <= x3_r + y3_r / ;
y4_r <= y3_r - x3_r / ;
syta4_r <= syta3_r + ;
end
else begin
x4_r <= x3_r - y3_r / ;
y4_r <= y3_r + x3_r / ;
syta4_r <= syta3_r - ;
end //output
r <= x4_r;
syta <= syta4_r;
end end //always
// endmodule
仿真结果:
其中使用了三组数据:(-41, 55),(4, -4),(3, 3)
使用计算机的结果:(68.6,-53), (5.6, -45) (4.2, 45)
仿真结果: (112,-126),(9, -40),(6, 50)其中(-126)180 = -54
结论: 半径有所增加,角度有一定的误差误差范围在27-7。在角度的时候有一定的误差。如果要增加精度,就增加迭代的次数。
CORDIC逼近算法的更多相关文章
- FPGA之CORDIC算法实现_理论篇(上)
关于cordic的算法原理核心思想就是规定好旋转角度,然后通过不停迭代逐步逼近的思想来实现数学求解,网上关于这部分的资料非常多,主要可以参考: 1)https://blog.csdn.net/qq_3 ...
- 使用CORDIC算法求解角度正余弦及Verilog实现
本文是用于记录在了解和学习CORDIC算法期间的收获,以供日后自己及他人参考:并且附上了使用Verilog实现CORDIC算法求解角度的正弦和余弦的代码.简单的testbench测试代码.以及在Mod ...
- 最新IP地址数据库 二分逼近&二分查找 高效解析800万大数据之区域分布
最新IP地址数据库 来自 qqzeng.com 利用二分逼近法(bisection method) ,每秒300多万, 比较高效! 原来的顺序查找算法 效率比较低 readonly string i ...
- EM最大期望化算法
最大期望算法(Expectation-maximization algorithm,又译期望最大化算法)在统计中被用于寻找,依赖于不可观察的隐性变量的概率模型中,参数的最大似然估计. 在统计计算中,最 ...
- 理解逐次逼近寄存器型ADC:与其它类型ADC的架构对比【转】
转自:http://bbs.dzsc.com/space/viewspacepost.aspx?postid=86760 摘要:逐次逼近寄存器型(SAR)模数转换器(ADC)占据着大部分的中等至高分辨 ...
- 最大期望算法 Expectation Maximization概念
在统计计算中,最大期望(EM,Expectation–Maximization)算法是在概率(probabilistic)模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量(Lat ...
- STM32 逐次逼近寄存器型(SAR)模拟数字转换器(ADC)
是采样速率低于5Msps (每秒百万次采样)的中等至高分辨率应用的常见结构. SAR ADC的分辨率一般为8位至16位,具有低功耗.小尺寸等特点. 这些特点使该类型ADC具有很宽的应用范围,例如便携/ ...
- 机器学习: 共轭梯度算法(PCG)
今天介绍数值计算和优化方法中非常有效的一种数值解法,共轭梯度法.我们知道,在解大型线性方程组的时候,很少会有一步到位的精确解析解,一般都需要通过迭代来进行逼近,而 PCG 就是这样一种迭代逼近算法. ...
- EM算法[转]
最大期望算法:EM算法. 在统计计算中,最大期望算法(EM)是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐藏变量. 最大期望算法经过两个步骤交替进行计算: 第 ...
随机推荐
- 微信小程序页面跳转方法汇总
微信小程序前端页面跳转有多种方式,汇总如下: Tips: 小程序前端的页面跳转之后,跳转之前的页面并不会凭空消失,而是存进了一个类似“页面栈”的空间里: 只有当这个所谓的“页面栈”满了之后页面才会退出 ...
- Nginx 作为反向代理优化要点proxy_buffering
当nginx用于反向代理时,每个客户端将使用两个连接:一个用于响应客户端的请求,另一个用于到后端的访问: 那么,可以从如下配置起步: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- 十图详解TensorFlow数据读取机制(附代码)
在学习TensorFlow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料.今天这篇文章就以图片的形式,用最简单的语言,为大家详细解释一下 ...
- Leetcode 814. Binary Tree Pruning
dfs 要点是这一句: return node.val==1 or node.left or node.right 完整代码: # Definition for a binary tree node. ...
- wireshark的提示
内容:12个wrieshark的提示 1.[Packet size limited during capture] 在捕获数据包大小有限,即包没有抓全 2.[TCP previous segment ...
- JavaScript库基本格式写法
/********************************************************************* * JavaScript库基本格式写法 * 说明: * 由 ...
- ubuntu16.04 LTS grafana安装与启动
1.首先从官网上下载相应的包,网址为:http://grafana.org/download 2.安装 cd Downloads sudo dpkg -i grafana_4.1.2-14869897 ...
- IIS项目发布完整流程
第一步: 发布项目 使在IIS上发布是防止源码泄露 第二步: 打开IIS(如果没有就自己安装一个)打开IIS步骤 控制面板>系统安全>管理工具>IIS管理器 填写网站的名称和之前发布 ...
- 《DSP using MATLAB》示例Example 8.22
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- asp搭建网站
测试环境:Windows 2003 下载asp源码导入 C:\Inetpub\wwwroot ###一.通过ip访问 最后浏览 浏览器输入ip或者 http://127.0.0.1 二.通过域名访问 ...