现在开始学习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逼近算法的更多相关文章

  1. FPGA之CORDIC算法实现_理论篇(上)

    关于cordic的算法原理核心思想就是规定好旋转角度,然后通过不停迭代逐步逼近的思想来实现数学求解,网上关于这部分的资料非常多,主要可以参考: 1)https://blog.csdn.net/qq_3 ...

  2. 使用CORDIC算法求解角度正余弦及Verilog实现

    本文是用于记录在了解和学习CORDIC算法期间的收获,以供日后自己及他人参考:并且附上了使用Verilog实现CORDIC算法求解角度的正弦和余弦的代码.简单的testbench测试代码.以及在Mod ...

  3. 最新IP地址数据库 二分逼近&二分查找 高效解析800万大数据之区域分布

    最新IP地址数据库  来自 qqzeng.com 利用二分逼近法(bisection method) ,每秒300多万, 比较高效! 原来的顺序查找算法 效率比较低 readonly string i ...

  4. EM最大期望化算法

    最大期望算法(Expectation-maximization algorithm,又译期望最大化算法)在统计中被用于寻找,依赖于不可观察的隐性变量的概率模型中,参数的最大似然估计. 在统计计算中,最 ...

  5. 理解逐次逼近寄存器型ADC:与其它类型ADC的架构对比【转】

    转自:http://bbs.dzsc.com/space/viewspacepost.aspx?postid=86760 摘要:逐次逼近寄存器型(SAR)模数转换器(ADC)占据着大部分的中等至高分辨 ...

  6. 最大期望算法 Expectation Maximization概念

    在统计计算中,最大期望(EM,Expectation–Maximization)算法是在概率(probabilistic)模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量(Lat ...

  7. STM32 逐次逼近寄存器型(SAR)模拟数字转换器(ADC)

    是采样速率低于5Msps (每秒百万次采样)的中等至高分辨率应用的常见结构. SAR ADC的分辨率一般为8位至16位,具有低功耗.小尺寸等特点. 这些特点使该类型ADC具有很宽的应用范围,例如便携/ ...

  8. 机器学习: 共轭梯度算法(PCG)

    今天介绍数值计算和优化方法中非常有效的一种数值解法,共轭梯度法.我们知道,在解大型线性方程组的时候,很少会有一步到位的精确解析解,一般都需要通过迭代来进行逼近,而 PCG 就是这样一种迭代逼近算法. ...

  9. EM算法[转]

    最大期望算法:EM算法. 在统计计算中,最大期望算法(EM)是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐藏变量. 最大期望算法经过两个步骤交替进行计算: 第 ...

随机推荐

  1. 微信小程序页面跳转方法汇总

    微信小程序前端页面跳转有多种方式,汇总如下: Tips: 小程序前端的页面跳转之后,跳转之前的页面并不会凭空消失,而是存进了一个类似“页面栈”的空间里: 只有当这个所谓的“页面栈”满了之后页面才会退出 ...

  2. Nginx 作为反向代理优化要点proxy_buffering

    当nginx用于反向代理时,每个客户端将使用两个连接:一个用于响应客户端的请求,另一个用于到后端的访问: 那么,可以从如下配置起步: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  3. 十图详解TensorFlow数据读取机制(附代码)

    在学习TensorFlow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料.今天这篇文章就以图片的形式,用最简单的语言,为大家详细解释一下 ...

  4. Leetcode 814. Binary Tree Pruning

    dfs 要点是这一句: return node.val==1 or node.left or node.right 完整代码: # Definition for a binary tree node. ...

  5. wireshark的提示

    内容:12个wrieshark的提示 1.[Packet size limited during capture] 在捕获数据包大小有限,即包没有抓全 2.[TCP previous segment ...

  6. JavaScript库基本格式写法

    /********************************************************************* * JavaScript库基本格式写法 * 说明: * 由 ...

  7. ubuntu16.04 LTS grafana安装与启动

    1.首先从官网上下载相应的包,网址为:http://grafana.org/download 2.安装 cd Downloads sudo dpkg -i grafana_4.1.2-14869897 ...

  8. IIS项目发布完整流程

    第一步: 发布项目 使在IIS上发布是防止源码泄露 第二步: 打开IIS(如果没有就自己安装一个)打开IIS步骤 控制面板>系统安全>管理工具>IIS管理器 填写网站的名称和之前发布 ...

  9. 《DSP using MATLAB》示例Example 8.22

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  10. asp搭建网站

    测试环境:Windows 2003 下载asp源码导入 C:\Inetpub\wwwroot ###一.通过ip访问 最后浏览 浏览器输入ip或者 http://127.0.0.1 二.通过域名访问 ...