当前位置:范文大全 > 公文范文 > 基于CORDIC算法的流水型DDS设计与研究

基于CORDIC算法的流水型DDS设计与研究

时间:2025-08-01 12:31:28 浏览次数:

摘 要:在分析CORDIC算法原理基础上,提出了一种基于CORDIC算法的流水型DDS结构,用以取代传统的ROM查找表法。同时对输入角度进行预处理,对迭代结果进行后处理,实现了整个周期的三角函数计算。设计采用verilog语言描述,在Quartus Ⅱ 9.0下编译综合,以及Modelsimaltera 6.4进行了仿真。结果表明,该算法比传统算法具有计算角度范围大、高速度和低资源的优势。

关键词:CORDIC算法; 直接数字频率合成; 循环迭代; 流水线

中图分类号:TN91134 文献标识码:A 文章编号:1004373X(2012)22010403

直接数字频率合成(Direct Digital Synthesis,DDS)技术,最早于1971年,美国学者J.Tierney等撰写的“A Digital Frequency Synthesizer”一文中提出的[1]。它以有别于其他频率合成方法具有低成本、低功耗、高分辨率和快速转换时间等优点而得到广泛的运用。但是传统的DDS主要运用查找表结构,其存放相位到幅度转换的查找表ROM的大小和相位精度的位数成指数关系,很难实现数字信号处理中的高精度、高分辨率、实时运算的要求[2]。而采用CORDIC算法的DDS很容易满足这些要求。

本文提出了基于CORDIC算法的16位流水线并行结构的DDS,替代了传统的查找表结构。实现了高速,高精度,硬件实现简单的DDS。CORDIC算法只需要硬件的加、减法器和移位器就可以完成正、余弦函数的计算。

1 CORDIC基本原理

CORDIC 算法最早由J.Volder 于1959年在美国航天控制系统设计中提出[3],其是一种用于计算运算函数的循环迭代算法。到1971年,Valther提出了统一的CORDIC算法[4]。如图1所示,初始向量A(x0,y0)旋转θ角度之后得到新的向量B(x1,y1),此向量满足以下关系:x1

y1=cos θ-sin θ

sin θcos θx0

y0

=cos θ1-tan θ

tan θ1x0

y0

(1)

图1 CORDIC算法图解假设初始向量经过n次旋转后得到新的向量,且每次旋转的角度θi满足条件tan θi=2-i,则第i次旋转的角度θi=arctan 2-i。即cos θi=(1+2-2i)-12。引入s(i)={1;-1},s(i)=1时表示逆时针旋转,s(i)=-1时表示顺时针旋转。则第i步旋转的向量关系可以表示为:xi+1

yi+1=cos θi1-si2i

si2i1xi

yi

=(1+2-2i)-121-si2i

si2i1xi

yi

(2)式中cos θi=(1+2-2i)-12称为校模因子,收敛于一个常数,即∏∞i=0(1+2-2i)-12≈0.607 3

这样,算法的每一步就可以简化为:xi+1

yi+1=1-si2i

si2i1xi

yi

(3)式中对于移动角度θ,只需要硬件的移位器、加法器和减法器就可以实现。现在引入变量zi表示第i次旋转后剩余未旋转的角度。则zi+1=zi-siarctan 2-i。

2 CORDIC算法的DDS实现

本文设计主要实现正、余弦信号的产生。在高速数字信号处理系统中,系统的运算速度,已经成为衡量系统性能的一个重要指标。CORDIC 算法的实现可分为迭代结构和流水结构2种[56] 。式(2)是CORDIC算法的迭代结构,传统的方法是将角度集存放于查找表中,用状态机跟踪迭代过程。那么随着迭代次数的增加,查找表的地址也随着增加,而且每次迭代必须在前一次迭代完成后进行[7]。这不适合高速、高精度、实时处理的要求。而采用提高数据吞吐率的流水线结构,极大的提高了处理速度。本文设计了16级并行运算的流水线结构,相对于8级精度得到了很大的提高,但是增加了运算的复杂度。因此必需在精度和速度之间折中。流水结构只需要一个时钟周期就能输出一个数据。多级流水结构如图2所示。

当n→∞旋转角度和∑∞n=0arctan 2-n≈89.883°,所以只要迭代的次数足够大,就可以实现-89.883°~89.883°之间的任意角度的转换。在工程实际应用中,需要对-π~π之间任意角度值进行运算。由于sin θ和cos θ只需计算[0,π/2]便可恢复整个周期的值[810]。本文采用分象限法,将输入角转到第一象限之中,此称为前处理。相位累加器对频率控制字K进行线性累加,产生输入相位,用16位的phase_in表示。利用它的最高两位判断该相位所在的象限,然后转入到第一象限中。在同样的精度下,可以节约硬件成本。前处理Verilog编写的代码如下:

begin

case(phase_in[15:14])

2"b00:phase_in_reg <= phase_in;

2"b01:phase_in_reg <= phase_in-16"h40_00;

2"b10:phase_in_reg <= phase_in-16"h80_00;

2"b11:phase_in_reg <= phase_in-16"hc0_00;

default:;

endcase

end

图2 流水线CORDIC结构在流水结构中,给定初值x0=16′h4D_B9,y0=16′h0和z0=phase_in,经过16次迭代后得到sin θ和cos θ在第一象限中的值,然后恢复其整个周期的值,此称为后处理。后处理的象限映射关系如表1所示。

3 仿真实验

针对本文的DDS系统结构,编写Verilog代码,在 Quartus Ⅱ 9.0软件环境下编译生成硬件算法模块。并利用Modelsimaltera 6.4软件进行了功能仿真,通过改变频率控制字来控制输出信号的频率。输出波形如图3所示。从仿真结果可见,这种基于CORDIC算法的流水型DDS是可行的,可以产生特性较好的波形。

频率控制字为25时产生的波形进行误差分析,见表2。误差不超过5×10-4,精度相当高。由DDS原理可知,信号的输出频率为f0=fc2N×K,这里信号频率fc=100 MHz,N为相位累加器位数,代码中phase_in为16位,那么频率分辨率为1 526 Hz。改率频率控制字K,可以得到所需要频率的信号。

4 结 语

本文设计了基于CORDIC算法的流水型DDS,它在硬件上实现时只需要移位器、加法器和减法器就可以产生高精度的正、余弦波形,尤其适合FPGA的实现。流水结构提高了数据的吞吐率,具有高精度、高速度、硬件资源消耗少等优点,相对于传统的查找表方法,CORDIC算法的流水型DDS具有明显的优势和广泛的运用前景。

参 考 文 献

[1] 王旭东,潘明海.数字信号处理的FPGA实现[M].北京:清华大学出版社,2011.

[2] 何伟,逯金涛,李伟,等.基于CORDIC改进算法的DDS设计[J].电子技术应用,2011,37(1):6567.

[3] VOLDER J E. The CORDIC trigonometric computing technique \[J\]. IRE Trans. on Electronic Computers, 1959, EC8(3): 330334.

[4] WALTHER J S. A unified algorithm for elementary functions \[C\]// Proceeding of of Spring Joint Computer Conference. New York, NY, USA: SJCC, 1971: 379385.

[5] VLADIMIROVA T, TIGGELER H. FPGA implementation of sine and cosine generators using the CORDIC algorithm \[J/OL\]. \[20110630\]. http:// wenku.baidu.com/view/6a53cb.

[6] WASSATSCH A,DOLLING S. Area minimization of redundat CORDIC pipeline architectures \[C\]// Proceedings of International Conference on Computer Design: VLSI in Computers and Processors. Austin, TX: ICCD, 1998: 136141.

[7] 谢建华,阮圆.基于CORDIC 算法的流水线型DDS设计[J].微计算机信息,2008,24(29):286287.

[8] 田书林,王厚军.一种基于CORDIC算法的信号发生器技术研究[J].仪器仪表学报,2002,23(5):150153.

[9] 车力,党幼云.基于CORDIC算法的正余弦函数FPGA实现[J].西安工程大学学报,2010,24(6):805809.

[10] 陈立功,宋学瑞,王鑫.改进的CORDIC模块实现的直接数字频率合成器[J].计算机工程与应用,2010,46(17):5759.

作者简介: 江金浓 男,1986年出生,硕士研究生。研究方向为嵌入式系统设计及其数字信号处理。

谢扩军 男,1965年出生,副教授。主要从事物理电子学方面的研究和等离子体物理方面的研究工作

相关热词搜索: 算法 流水 研究 设计 CORDIC