基于CORDIC算法的高速高精度DDS研究与实现

基于CORDIC算法的高速高精度DDS研究与实现
汤文亮
【摘 要】针对基于查表方法不能实现高速高精度DDS,提出了一种优化的基于CORDIC算法实现高速高精度DDS的方法.介绍了CORDIC算法实现DDS中相位到幅度转换的原理.对基于CORDIC算法的DDS实现进行了较详细的描述,并在FPGA上采用流水线优化方法实现了CORDIC算法,最后在FPGA上实现了一个高速高精度DDS,实验结果表明,设计实现的DDS能稳定高速的工作.现代化管理
【期刊名称】《制造业自动化》
【年(卷),期】2011(033)005
【总页数】3页(P104-105,188)
【关键词】DDS;CORDIC算法;FPGA;查表;流水线技术
【作 者】汤文亮
【作者单位】华东交通大学软件学院,南昌,330013
【正文语种】中 文
【中图分类】TP391
0 引言
直接数字频率合成(DDS)是一种信号频率合成技术,它具有频率分辨率高、转换速度快、相位连续等许多优点,并朝着高频率、多功能、多通道、低功耗等方向发展。DDS系统主要由相位累加器、相位幅度转换电路和数模转换电路等部分组成。它通过相位累加器将相位按频率调节控制字指定的步长进行累加,再由相位-幅度转换电路将瞬时相位转换为其对应的正弦值或余弦值序列输出,最后经由数模转换电路和低通滤波,即可得到模拟正弦波或余弦波信号。
DDS传统采用查表方法实现, 但其存放相位到幅度转换的查表ROM的大小和相位精度的位数成指数关系。当精度要求很高的时候需要大容量ROM,使系统的处理速度降低。因此,采用查表法方法无法设计高速、高精度的DDS。采用CORDIC算法来实现超函数时[1,
2],则无需使用乘法器,它只需要一个最小的查表(LUT),利用简单的移位和相加运算,即可产生高精度的正余弦波形,尤其适合于FPGA的实现。采用CORDIC算法能实现高速高精度的DDS。本文先介绍CORDIC算法原理,再详细讲述基于CORDIC 算法的DDS实现。
1 CORDIC算法
神经皮肤黑变病CORDIC算法[4]是Volder于1959年在美国航空控制系统的设计中提出来的,它是一种用于计算运算函数的循环迭代算法。从广义上讲它是一个数值计算逼近的方法。这些固定的角度与计算基数有关,运算只有移位和加减。传统上计算三角函数和其他一些硬件不易实现的函数, 一般使用查表法、多项式展开或近似的方法[3]。这些方法不能兼顾速度、精度、简单性等方面的要求。CORDIC算法正是为解决这种问题而产生的。它从算法本身入手,将复杂的算法分解成一些在硬件中容易实现的基本算法,如加法、移位等, 从而使得这些算法在硬件上可以得到较好的实现。
如图1所示,假设直角坐标系内有一个向量a(Xa,Xa),逆时针旋转θ角度后得到另一个向量b(Xa,Xa)。
图1 向量单次旋转
图2 向量多次旋转
椒图科技
碱式碳酸锌这个过程可以用矩阵形式表示如下:
如果向量a(Xa,Xa)经过n次旋转才到达向量b(Xa,Xa),如图2所示。其中第 次旋转的角度为θt,那么第i次旋转的表达式为:
到此为止没有任何简化, 为了便于硬件实现限制tanθi=±2-i,即θi=±arctan2-i,θ的值可以存放在一个小的查表中。通过一系列连续的小角度旋转,可以得到任意小的旋转角度。旋转角度总和为当档si=-1;时表示向量是逆时针旋转,当 时表示向量是顺时针旋转。这时式(3)变为:
式中k是一个常数增益, 暂时不考虑这个增益因子,式(4)可以写成:
式(7)就是CORDIC的迭代式,它只需要通过移位和相加就可以完成矢量旋转。
原子能科学技术
设z0是a,b两向量的夹角,要使a旋转到b,则Si的符号由第i次旋转时的角度,它们的关系
如下:zi<0时, Si=-1;zi≥0时, Si=+1(特殊情况下, z0<0时,Si=-1;zi≥0时,Si=+1 )。
向量a向量b 逼迫的精度由迭代的次数决定,迭代的次数越多,逼迫的精度就越高。迭代n次(n→∞)得到的最终结果为:
得到的结果为:
从式(8)、(9)和(10)可以看出,给适当初值,通过本算法可以计算出cosine和sine,这就是CORDIC算法的旋转模式。
2 基于CORDIC 算法的DDS实现
CORDIC旋转的移位相加流水结构,每一级流水线单元只需3个加减法器、2个移位寄存器和1个系数存储器,非常节省资源,如需提高精度,只需简单地增加流水单元即可,扩展性很好。这种流水线结构在正常工作时只需一个时钟周期就可输出一个数据,可实现高速实时处理,非常适合于在FPGA 中实现。图3是DDS顶层电路设计图,频率控制字寄存器将频率控制字送入相位累加器,相位累加器对系统时钟进行计数,每到达输入频率控制字的值,即对相位进行累加,随后将累加值的高16位送入相位相加器,与相位控制字寄存器接
收到的初始相位进行相加,得到当前的相位值。然后把当前相位值的最高位用作象限判定,并把低15位扩展1位符号位用于基于CORDIC的函数发生器。
图3 DDS顶层电路设计图
针对迭代结构的缺点,我们设计中可以采用进位链和流水线技术相结合的方法,采用该方法实现的相位累加器既能保证具有较高的资源利用率,又能大幅提高系统的性能和速度。CORDIC算法采用流水线型设计。该设计有两个优点:第一,它的移位寄存器进行迭代法比可变移位寄存器简单的多。第二,它没有在角计算中存储常量的ROM,可以用硬件直接来实现。因此在实际设计中,采用流水线型设计的CORDIC运算单元正常工作时只需一个时钟周期就能输出一个数据,为数据实现高速实时处理提供了前提。
3 仿真和实现结果
在Quartus II开发环境中,使用基于查表和基于CORDIC算法实现DDS的方法设计实现一个相同指标要求的DDS系统,并进行性能指标分析。本设计的DDS的相位累加器位数为30位,正弦值量化位数为8位。使用该两种方法实现的DDS,其正弦值输出精度很相近,基
于CORDIC算法实现的DDS比基于查表实现的DDS运行速度快4倍多,其最高工作时钟频率如表1所示。
表1 运行速度性能对比
当本设计的DDS系统使用系统时钟为100M,输出信号频率的频率分辨率为0.096Hz。输出频率 时,M=20C4A8;输出频率 时,M=106254。当频率控制字为20C4A8时,输出正弦波的周期为500ns,即正弦波的频率为2MHz;当频率控制字为106254时,输出正弦波的周期为1000ns,即正弦波的频率为1MHz,仿真正确。本设计的所有模块用HDL语言编写,在Quartus II下进行了功能仿真,仿真结果图如图4所示。
图4 DSS输出正弦信号仿真图
4 结论
本论文分析了CORDIC算法实现DDS中相位到幅度转换的原理,详细讲述了一种优化的基于CORDIC算法实现高速高精度DDS的方法。最后在FPGA上实现了一个产生正弦/余弦信号高速高精度DDS,该DDS非常适用于在软件无线电中进行高速高精度的数字调制解调。
章宗祥参考文献:
[1] 李滔,韩月秋.基于流水线CORDIC算法的三角函数发生器[J].系统工程与电子技术,2000,2(4):85-87.
[2] 周柱,张炜.基于CORDIC的优化的直接数字频率合成器[J].电子工程师,2005,31(10):34-37.
[3] Vankka J,Halonen K.Direct digital synthesizers:theory,design and applications[M].Norwell:Kluwer Academic,2001:3372402.
[4] Volder J E.The CORDIC Trigonometric Computing Technique[J].IRE Transactions on Electronics Computers,1959,8(3):330-333.

本文发布于:2024-09-21 19:43:13,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/158294.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实现   相位   算法   频率   旋转
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议