现在开始学习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. Buildroot构建指南--Overview

    使用Buildroot,让嵌入式Linux系统构建更加便捷.本文以Buildroot-2016.05的版本为基础来讲解,不同版本之间有细节差异,需要根据读者使用的版本自行调整. Buildroot是什 ...

  2. obj-y,obj-m 区别

    obj-y:把由foo.c 或者 foo.s 文件编译得到foo.o 并连接进内核.obj-m: 则表示该文件作为模块编译.除了y.m以外的obj-x 形式的目标都不会被编译. 除了obj-形式的目标 ...

  3. 软件测试模型---V模型、W模型、H模型、X模型

    人活着一定要有目标,确定自己喜欢什么,再坚持做下去,那么他过得一定不会太差. 煽情的话,不多说,本文主要讲解:"软件测试模型-V模型.W模型.H模型.X模型". 1.V模型 V模型 ...

  4. oracle数据库导入导出09192255

    1.导入数据库(dmp) Linux系统中: 1. 用root账号登录服务器,然后切换到oracle账号(安装oracle数据库的时候用的用的账号) 2. 切换到oralce的安装目录下的bin下 3 ...

  5. Ext JS 5 关于Store load返回json错误信息或异常的处理

    关于在store load的时候服务器返回错误信息或服务器出错的处理.ExtJS4应该也能用,没测试过. 这里有两种情况: 服务器返回错误json错误信息,状态为200 服务器异常,状态为500 一. ...

  6. python 怎么画图

    1 安装matplotlib: 安装方法:http://www.2cto.com/os/201309/246928.html(其中,安装过程中,tar解压怎么解都有问题.然后就删掉再下载一遍) 2 使 ...

  7. 【集成学习】安装lightgbm

    1.下载whl lightgbm的whl下载地址 2.输入命令 pip install lightgbm-2.0.3-py2.py3-one-win_am64.whl 3.验证是否成功 import ...

  8. C#将html代码转换成文本代码

    /// <summary> /// 去除HTML标记 /// </summary> /// <param name="strHtml">包括HT ...

  9. 每天一个linux命令(权限):【转载】 /etc/group文件详解

    Linux /etc/group文件与/etc/passwd和/etc/shadow文件都是有关于系统管理员对用户和用户组管理时相关的文件.linux /etc/group文件是有关于系统管理员对用户 ...

  10. test20181029 思考熊的马拉松

    题意 思考熊的马拉松 问题描述 今年,n只思考熊参加了校园马拉松比赛.马拉松的赛道是环形的,每圈的长度是A,完成比赛需要跑L圈. 比赛中,甲领先乙很长距离,绕过一圈或多圈后从后面追上了乙的现象叫做&q ...