当前位置: 首页 > 范文大全 > 公文范文 >

基于CORDIC算法的三角函数实现

时间:2022-05-03 10:00:06  浏览次数:

摘要:在软件无线电技术中涉及到了使用数控振荡器来产生正交调制信号和数模转换控制、使用鉴相器来提取载波相位,针对这两项需求,我们通常选择CORDIC算法来实现,该算法可以在降低运算复杂度的同时提高运算的效率。该算法不仅使用在软件无线电通信中,在通信领域的其他系统中也有广泛的应用。

关键词:CORDIC算法 反三角函数 SDR

中图分类号: TP346文献标识码:A文章编号:1007-9416(2011)08-0003-02

1、CORDIC算法基本原理原理

(1)原理:CORDIC(Coordinate Rotation Digital Computer)即坐标旋转数字计算法的基本思想就是原始向量通过多次固定基准角度的旋转不断逼近目标向量,基准角度的正切值以二进制表示,则角度的旋转就转化为二进制数的移位和加减运算。

(2)数学模型推导:若坐标系内有向量和向量,模长相等设为l,由逆时针旋转角度得到,则

若向量通过多次(n)旋转无限逼近向量,如图2所示,设每次微旋转的角度为,则n次旋转后总的角度,与上同理:第i次旋转后的坐标关系为:

每次微旋转的角度的正切值:,则。表示第i次旋转后的向量相对于初始向量的角度差距,则迭代公式为,逆时针方向为正,则CORDIC算法的迭代式如下

是一个增益因子,不考虑该因子的作用,公式可变化为

经过n次旋转后的向量无限逼近于向量,当时,取增益因子的倒数作为调整,则

(3)基于CORDIC算法的三角函数与反三角函数计算原理

对于sin(x)、cos(x)的计算,给定初始值,,,则

输出的变量即为sin(x)的值,输出的变量即为所cos(x)的值。

对于arctan(x)的计算,采用图3所示的旋转方式,即为CORDIC算法的向量模式。下面对该模式进行说明。

该模式与上述旋转模式的区别有两个:目标向量在X轴上,坐标为;第i+1次旋转方向以第i次旋转后的正负决定,若,则i+1次逆时针旋转;若,则i+1次顺时针旋转。表示第i次旋转后实际转过的角度。

由该模式旋转的意义可知,经n次旋转后向量的纵坐标无限趋近于0、横坐标无限趋近于初始向量的模长的1/k倍(实际旋转时同上述多次旋转不考虑增益因子k的作用,最后取该因子的倒数作为调整),而角度坐标无限趋近于初始向量的角度,则当时,

2、应用领域

(1)数控振荡器NCO通信领域中,为了提高传输性能,在数字频带调制中常使用正交调制解调。正交调制即将输入二进制序列通过串并转化后分为两路并行信号,这两路信号分别与相同频率的sin(wt)和cos(wt)相乘,相加得到调制信号;正交解调过程也需要sin(wt)和cos(wt)信号,而且是否能得到幅度、频率均一致、相位相差的奇数倍的正交信号是决定调制解调性能的一个重要因素。可以看出,不同的相位有特定的输出波形,这为我们作精细的仿真和系统模拟提供了坚实的基础。

传统的模拟I/Q路检波存在着两路信号幅度有差距等问题;而基于CORDIC算法的NCO与数字信号处理技术结合,将信号数字化处理,提高了信号传输的可靠性。

在现在的通信领域,NCO在与其他控制器件结合还可以很好的模拟锯齿波、方波、三角波等,是函数信号发生器不可缺少的控制器件。

(2)鉴相器鉴相器的作用是从输入的信号分析出该信号的相位。由理论推导可获得其实现方法:将正交分解后的两路信号作为鉴相器的两路输入,设定精度,输出的值即为信号的相位信息。由于时,才有,则实际得出的相位信息为,存在着的误差,由于,随着迭代次数的增加,数据截尾的误差减小,但由于计算次数的增多,会使处理速度下降、存储器资源占有率明显增大。

(3)软件无线电通信 在传统的无线通信中,系统不兼容是通信技术发展的一大阻碍,为了解决这一问题,软件无线电应运而生。软件无线电通信主要涉及本文中的数字信号处理部分的正交调制解调以及数模转换时的数字信号控制,即上述两个应用的综合。

3、仿真结果

根据CORDIC算法的原理,可编写不同的硬件实现程序来实现sin(x)和cos(x)信号的产生以及相位的求解,这里使用VerilogHDL语言,基于Modelsim平台进行仿真。

其中NCO仿真,输出信号的精度从10~32位可调,此精度值由下述M值决定。arctan函数的仿真:由于使用旋转向量,没有对I路及Q路的信号幅值进行限制,因而由两路输入直接得出的相位值的范围是;并且反正切函数无法计算出对应于无限值的的奇数倍的角度也可由此函数计算出,下面的仿真很好的验证了这一点。CORDIC算法会产生相位模糊,甚至arctan的奇点也有了有限值的表示,这也是由于仿真不是理论计算引起的。

由下仿真可以看出,无论是幅值还是相位都量化为二进制数字进行表示。NCO仿真可以看出通过数字信号作为控制变量控制振荡器产生的正弦信号的频率的性能很稳定,验证了数字信号可以保留更多信息。

3.1 基于CORDIC的NCO产生信号sin(x)和cos(x)仿真

频率计算公式为:[4],其中;表示的是当前的累积相位;M为计算精度,此处M=32;f为输出信号频率。若输出信号频率为1MHz,则相应的输入相位值为1M×232/50M=85899346=226.36,其余频率值的对应相位同理计算,见下表。该NCO的频率分辨率为50M/232=0.0116Hz。

输出变量sin和cos的位宽为18位,首位为符号位,所以总的表示范围为-2-17~217,对应正弦信号的幅度值;输入变量phi即为Fsum累积相位的位宽为32位,以原码表示,所以总的表示范围为0~232。

仿真结果见上图,信号频率依次为1MHz、2MHz、4MHz、8MHz。

3.2 arctan(x):分别对X=±1,Y=1和X=1,Y=0;X=0,Y=1进行仿真

输入及输出变量的位宽为14位,首位为符号位,所以213=8192→∞,对应;同理-8192→-∞,对应;0对应0度;±4096对应。

由上述仿真结果和图表可知,:±4058≈±4096;:±8156≈±8192;±0:±36≈±0,存在误差,主要是系统误差,可以通过增加位宽和迭代次数来提高数据精度。

4、结语

CORDIC算法在一定程度上提高了处理速度,因为它将复杂的算术运算转换为简单的线性移位和加减运算,降低了算法的复杂度,就可将资源更多的用于提高处理速度和数据精度;但并没有从本质上解决这一根本性矛盾,提高迭代次数和位宽来提高性能终究是有限的,当达到一定的存储数量还是要考虑成本、速度的因素。同时由于采用逼近的基本思想,就决定了迭代次数不是小数量,因而该算法应用在大中型系统中,才能获得很好的收益。

参考文献

[1]Jack E. Volder, The CORDIC Trigonometric Computing Technique, IRE Transactions on Electronic Computers, September, 1959, pp. 330-334.

[2]J.S.Walther, “A unified algorithm for elementary functions,”In spring Joint Computer Conference, 1971,PP.379-385.

[3]胡国荣,孙允恭.CORDIC算法及其应用.信号处理,1991;12:229-242.

[4]时春雨,刘娇.一种基于FPGA的数控振荡器的设计与实现[J].微计算机信息,2007,23(12-2):209-210.

本文由北京邮电大学大学生研究创新基金(Research Innovation Fund for College Student of Beijing University of Posts and Telecommunications)资助。

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文

推荐访问: 算法 函数 CORDIC