欢迎来到天天文库
浏览记录
ID:16512902
大小:4.50 MB
页数:8页
时间:2018-08-13
《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
此文档下载收益归作者所有