fpga环境下基于cordic运算实现反正切运算(vhdl)

fpga环境下基于cordic运算实现反正切运算(vhdl)

ID:16512902

大小:4.50 MB

页数:8页

时间:2018-08-13

fpga环境下基于cordic运算实现反正切运算(vhdl)_第1页
fpga环境下基于cordic运算实现反正切运算(vhdl)_第2页
fpga环境下基于cordic运算实现反正切运算(vhdl)_第3页
fpga环境下基于cordic运算实现反正切运算(vhdl)_第4页
fpga环境下基于cordic运算实现反正切运算(vhdl)_第5页
资源描述:

《fpga环境下基于cordic运算实现反正切运算(vhdl)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、CORDIC算法实现反正切运算算法1.前言CORDIC算法包括圆周系统、线性系统、双曲系统三种旋转系统,每种系统又分别具有旋转模式和向量模式两种运算模式。其中,运用最为广泛的时圆周系统的两种运算模式,本文也立足与项目应用,仅阐述圆周系统,其余系统可参看相关资料。2.算法分析要充分理解圆周系统,我们需先引入其旋转模式的概念,再以旋转模式引申到向量的概念中去。CORDIC算法的旋转模式运算的实质就是执行一个平面内旋转,如图1所示,就是从一个坐标点转换到另一个坐标点的过程.图1.平面旋转模式运算示意图如图1中所示,原向量的坐标表达式为(1)其中,r为向量的长度,由于本文的目的是

2、讨论角度的计算,所以,都假定向量旋转过程中的长度是固定不变的,这样,我们可以专注于角度的变化。所以,目标向量的坐标表达式为(2)即用向量统一表示为(3)公式1表示由向量到向量的旋转过程,即转过的相角为,可以通过迭代运算分多步执行角度旋转,每一步完成旋转的一部分.单步表述为:(4)其中表示下一步迭代需要执行的运算。根据公式2,必须确切知道每单步要旋转的角度,具体计算方法阐述如下:为方便表示,并简化方程中的参量,方程(4)提取COS后变成(5)规定每一步所调整的角度为(6)即单次调整最大为当n=0时调整,其后每次调整值逐步减小,如此多次调整后最终调整角度值即为目标值,向量旋转

3、完毕。即,其中为角度调整的方向,取值为{-1,+1},每次的取值由上次调整完后的角度剩余量的符号决定,将仍旧需要调整的角度定义为。(7)于是(8)<0表示调整过度,需要回调,所以=-1,下一步要逆时针旋转,反之,=1,继续按照逆时针调整。综上所述,结合(5)、(6)式和(7)式以及旋转模式下旋转方向问题,(5)式在工程实现时应为(9)公式(9)是可以工程实现的迭代公式,试想,通过n次迭代运算后,向量由原来位置经过了n次不同角度的旋转,形成的新位置为(10)由上式可以看出,对于给定次数的向量旋转(n为有限次),所有的cos乘积趋近于固定值,为(11)于是,令(12)此K值与

4、具体的迭代次数有关,对于所有的初始向量(n=0)和旋转角度而言,K时一个常数。而当迭代次数N趋向于无穷大时,K值收敛且K0.67253。通常定义K叫做聚焦常数,其倒数P1.64676,通常称作旋转增益,于是旋转向量又写为(13)在旋转模式下,经N次迭代运算后,已趋近于0,即=1,CORDIC公式的输出为,(14)公式(14)即为工程实现中的指导公式。在此种模式下,可以根据上式很方便的计算出一个给定角度的正弦、余弦和正切值。但在数字计算中,使用向量模式求取一个向量的角度更容易,我们此次的工程中需要求取的就是反正切的角度,这样使用向量模式非常方便。向量模式的计算方法和旋转模式

5、很相似,区别在于向量模式的输入只有一组坐标值,求取此向量的角度,只需要将此向量旋转,使向量的Y坐标趋近于0,即,使向量旋转到与实轴重合,所转过的角度即为此向量的角度。如图2所示图2.向量模式下旋转求角度示意图并且,在计算过程中,的取值需取决于调整过程中的符号,因为在向量模式下要调整的目标位置为,故可根据的正负符号判断向量转动的角度是否已经超过目标值。当迭代运算N次后,,=1,实现指导公式变为:,(15)注意,此时的取值与旋转模式下的区别。其原则仍是+1表示要正向(逆时针)调整,-1表示要逆向(顺时针)调整。将Z值初始化为,经迭代运算,当运算持续到Y=0时,此时(16),此

6、即为我们需要的向量的反正切值,即为向量的角度。1.代码实现基于以上算法原理,可实现计算的精确值,按照式(15),将Z赋初始值,由上一层模块产生此反正切计算模块的数据录入使能load_dat_en,使能信号一个时钟周期宽度,在此使能下录入向量的坐标值,在芯片化项目中,,即,把IK、QK分别看做平面坐标下向量的实部与虚部,进而计算此坐标的相角。IK、QK值与load_dat_en一起有效,并随之产生本模块内部的运算时序计数器,根据运算精度要求,目前需要8次迭代运算即可逼近目标值,而不是一定要计算到,所以此时序计数器安排为1~10循环,在相应位置执行相应操作,每个时钟周期都计算

7、当前X、Y、Z的值,并在8此迭代都计算完毕后检测所有步骤的Y值是否为0,有为0的即输出对应的Z值作为相角值,如果没有,则将第8次迭代结果作为最终结果输出。输出时产生一个数据输出使能,一个时钟周期宽度,告知上层调用模块,可以读取本模块计算结果。在迭代运算过程中,为方便计算,规定I/O口及模块内部的16bit数据在表征相角时涵盖范围是-180°~+180°,用16bit中的低15bit表示0°~180°,最高位表示符号位。这样,可以得出相应的一些关键角度所对应的数值。角度数值90°X”4000”-90°X”C000”45°X”20

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。