在通信的算法中,常采用Cordic算法之一,知道角度产生正交的的正弦余弦,

或者知道正弦和余弦求角度,求反正切。

1. 求正弦和余弦值。

方法:旋转角度,得到正弦余弦值; 再旋转角度,到达下一个正弦余弦值;直到旋转的角度趋近于 0 ,不能再进行旋转。

把每次旋转的坐标的x,Y 轴的值各自相加,即得到为该角度的正弦和余弦值。

2 .求反正切:Angle  = artan(y/x)。

方法: 及给定x,y 的坐标通过向量旋转,使得y 值不断减小, 通过不断地迭代使得 y 逐渐 趋渐0;

最终得到旋转的角度之和 z, z 即为 反正切值。

验证 输入y=5000, x=5000;通过计算 atan(5000/5000) =0.5(pi 弧度)*90度 = 45度。

验证 输入y=6000, x=4000;通过计算 atan(6000/4000) =0.626(pi 弧度)* 90度 = 56.3度

验证 输入y=6000, x=500;通过计算 atan(6000/0500) =0.947(pi 弧度)* 90度 = 85.23度。

//level 1
always@(posedge clk or negedge rst_n)
begin
        if(!rst_n)
               begin
                       x1<=0;
                       y1<=0;
                       z1<=0;
               end
         else
                if(ena)
                       if(y0<0)
                               begin
                                      x1<=x0-y0;
                                      y1<=y0+x0;
                                      z1<=z0-15'd4500;  //45deg
                               end
                      else if(y0>0)
                               begin
                                      x1<=x0+y0;
                                      y1<=y0-x0;
                                      z1<=z0+15'd4500;  //45deg 
                              end 
                      else 
                          begin
                              x1 <= x0;
                              y1 <= y0;
                              z1 <= z0;
                          end 
end

//level 2
always@(posedge clk or negedge rst_n)
begin
        if(!rst_n)
               begin
                       x2<=0;
                       y2<=0;
                       z2<=0;
               end
         else
                if(ena)
                       if(y1<0)
                               begin
                                      x2<=x1-{y1[DATA_WIDTH-1],y1[DATA_WIDTH-1:1]};
                                      y2<=y1+{x1[DATA_WIDTH-1],x1[DATA_WIDTH-1:1]};
                                      z2<=z1-15'd2656;  //26.56deg
                                     
                               end
                        else if(y1>0)
                               begin
                                      x2<=x1+{y1[DATA_WIDTH-1],y1[DATA_WIDTH-1:1]};
                                      y2<=y1-{x1[DATA_WIDTH-1],x1[DATA_WIDTH-1:1]};
                                      z2<=z1+15'd2656;
                               end
                      else
                               begin
                                 x2 <= x1;
                                 y2 <= y1;
                                 z2 <= z1;
                                 end
end

...

...

...

//level 13
always@(posedge clk or negedge rst_n)
begin
        if(!rst_n)
                 begin
                       x13<=0;
                       y13<=0;
                       z13<=0;
               end
         else
                if(ena)
                       if(y12<0)
                               begin
                                      x13<=x12-{{12{y12[DATA_WIDTH-1]}},y12[DATA_WIDTH-1:12]};
                                      y13<=y12+{{12{x12[DATA_WIDTH-1]}},x12[DATA_WIDTH-1:12]};
                                      z13<=z12-15'd01;  //0.014deg
                               end
                        else if(y12>0)
                              begin
                                      x13<=x12+{{12{y12[DATA_WIDTH-1]}},y12[DATA_WIDTH-1:12]};
                                      y13<=y12-{{12{x12[DATA_WIDTH-1]}},x12[DATA_WIDTH-1:12]};
                                      z13<=z12+15'd01;
                               end
                             else
                               begin
                                    x13 <= x12;
                                    y13 <= y12;
                                    z13 <= z12;
                                 end
end

Cordic 算法之 反正切的更多相关文章

  1. Cordic 算法的原理介绍

    cordic 算法知道正弦和余弦值,求反正切,即角度. 采用用不断的旋转求出对应的正弦余弦值,是一种近似求解发. 旋转的角度很讲求,每次旋转的角度必须使得 正切值近似等于 1/(2^N).旋转的目的是 ...

  2. 定点CORDIC算法求所有三角函数及向量模的原理分析、硬件实现(FPGA)

    一.CORDIC算法 CORDIC(Coordinate Rotation DIgital Computer)是一种通过迭代对多种数学函数求值的方法,它可以对三角函数.双曲函数和平面旋转问题进行求解. ...

  3. cordic算法的verilog实现及modelsim仿真

    1. 算法介绍 CORDIC(Coordinate Rotation Digital Computer)算法即坐标旋转数字计算方法,是J.D.Volder1于1959年首次提出,主要用于三角函数.双曲 ...

  4. CORDIC算法(1):圆周旋转模式下计算三角函数和模值

    CORDIC(Coordinate Rotation Digital Computer)坐标旋转数字计算机,是数学与计算机技术交叉产生的一种机器算法,用于解决计算机的数学计算问题.发展到现在,CORD ...

  5. 使用帅气的cordic算法进行坐标系互转及log10的求解

    参考博客 https://blog.csdn.net/u010712012/article/details/77755567 https://blog.csdn.net/Reborn_Lee/arti ...

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

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

  7. 三角函数计算,Cordic 算法入门

    [-] 三角函数计算Cordic 算法入门 从二分查找法说起 减少乘法运算 消除乘法运算 三角函数计算,Cordic 算法入门 三角函数的计算是个复杂的主题,有计算机之前,人们通常通过查找三角函数表来 ...

  8. (转)三角函数计算,Cordic 算法入门

    由于最近要使用atan2函数,但是时间上消耗比较多,因而网上搜了一下简化的算法. 原帖地址:http://blog.csdn.net/liyuanbhu/article/details/8458769 ...

  9. 基于FPGA的cordic算法的verilog初步实现

    最近在看cordic算法,由于还不会使用matlab,真是痛苦,一系列的笔算才大概明白了这个算法是怎么回事.于是尝试用verilog来实现.用verilog实现之前先参考软件的程序,于是先看了此博文h ...

随机推荐

  1. 将Excel数据表到数据库表

    假设你有大量的数据要导入到数据库表,恐怕是没有效率的写程序,作为用于数据操纵,Excel在这方面有优势,但是,如何将其结合起来?将Excel数据表到数据库表,就是本篇博客的目的. 首先去下载MySQL ...

  2. 转载ECTouch1.0 修改后台广告管理中广告列表显示广告图片

    http://www.ectouch.cn/topics/94.html 效果 操作: 1. 修改后台控制器文件 调用出相关字段信息. mobile\include\apps\admin\contro ...

  3. JavaScript 常见陷阱

    JavaScript中的一些特性和通常我们想象的不太一样.这里我总结了一些有悖直觉的语言特性. 1 数组 1.1 数组的遍历 在直接支持for a in b的语言中,比方Python/Ruby里的a的 ...

  4. ZOJ Problem Set - 3829Known Notation(贪心)

    ZOJ Problem Set - 3829Known Notation(贪心) 题目链接 题目大意:给你一个后缀表达式(仅仅有数字和符号),可是这个后缀表达式的空格不幸丢失,如今给你一个这种后缀表达 ...

  5. LightOj 1148 Basic Math

    1148 - Mad Counting PDF (English) Statistics Forum Time Limit: 0.5 second(s) Memory Limit: 32 MB Mob ...

  6. 将本地文件上传到指定的服务器(HttpWebRequest方法)

    将本地文件上传到指定的服务器(HttpWebRequest方法),通过文件流,带文件名,同文件一同上传的表单文本域及值. ///<summary> /// 将本地文件上传到指定的服务器(H ...

  7. win8/win10/win2012r2 存储池 冗余分析

    StorageSpace:a. Simple,相当于RAID0,无冗余,不考虑b. Two-way Mirror,双重镜像,至少2块盘,性能单盘,可以坏一块盘c. Three-way Mirror,三 ...

  8. ASF(传感器)

    版权声明:曾经的Blog文章合并.原创作品,谢绝转载.否则将追究法律责任. SensorManager类:用于创建sensor service的实例.该类提供了非常多 用于訪问和枚举传感器,注冊和注销 ...

  9. Asp.net MVC4 +EF6开发

    Asp.net MVC4 +EF6开发的个人网站源码和介绍(仅供新手学习) 本项目是我去年利用业余时间开发的,采用的是asp.net mvc 4 +EF6+三层架构,适合新手进行学习,高手就没有什么价 ...

  10. Win7 IIS配置 applicationHost.config 错误:无法识别的特性“setProfileEnvironment” 解决方法

    Win7下配置IIS时容易出现这样的错误提示:这是百度知道上面另一个人提问的图,我的显示行号133 解决方法: 到C:\inetpub\history中找到最近一次的applicationHost.c ...