现在开始学习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. 《Drools7.0.0.Final规则引擎教程》第4章 4.4 约束(Pattern的一部分)

    4.4.3 约束(Pattern的一部分) 前面我们已经介绍了条件约束在Pattern中位置了,那么什么是条件约束呢?简单来说就是一个返回true或者false的表达式,比如下面的5小于6,就是一个约 ...

  2. ElasticSearchRepository和ElasticSearchTemplate的使用

    Spring-data-elasticsearch是Spring提供的操作ElasticSearch的数据层,封装了大量的基础操作,通过它可以很方便的操作ElasticSearch的数据. 版本说明 ...

  3. 怎么样在python 3.6里安装tensorflow?

    首先要下载python3.6: https://www.python.org/downloads/release/python-361/ 接着下载: numpy-1.13.0-cp36-none-wi ...

  4. MPAndroidChart Wiki(译文)~Part 5

    19. ChartData子类 这篇wiki主要关注ChartData子类的具体介绍.至于此部分没有提及到的ChartData的子类,代表他们没有特性功能需要介绍. BarData 方法 使用 set ...

  5. js 由快到慢的执行

    let t=0; for(var i=0;i<len;i++){ (function (t) { $timeout(function(){ console.log(t); },t); })(t) ...

  6. linux 系统优化+定时任务

    安装软件 通过yum安装 自动补全工具:yum completion yum install -y tree bash-completion wget vim find -[TAB] 更改系统的yum ...

  7. 白话machine learning之Loss Function

    转载自:http://eletva.com/tower/?p=186 有关Loss Function(LF),只想说,终于写了 一.Loss Function 什么是Loss Function?wik ...

  8. BZOJ3566 SHOI2014 概率充电器 【概率DP】

    BZOJ3566 SHOI2014 概率充电器 Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器: “采用全新纳米级加工技术,实现元件与导线能 ...

  9. 实现一个 WPF 版本的 ConnectedAnimation

    Windows 10 的创造者更新为开发者们带来了 Connected Animation 连接动画,这也是 Fluent Design System 的一部分.它的视觉引导性很强,用户能够在它的帮助 ...

  10. NSURLSession学习笔记(一)简介

    一.URL Session的基本概念 1.三种工作模式: 默认会话模式(default):工作模式类似于原来的NSURLConnection,使用的是基于磁盘缓存的持久化策略,使用用户keychain ...