一种基于误差的数字式正弦波发生器设计方法
2017-06-29张文铎
张文铎
(北京圣非凡电子系统技术开发有限公司北京100044)
一种基于误差的数字式正弦波发生器设计方法
张文铎
(北京圣非凡电子系统技术开发有限公司北京100044)
论文介绍一种通过数字方式获得精准正弦波的算法,通过分析和差化积公式,预先计算需要对输出值的误差进行补偿的相应取样点的位置和相邻取样点的间隔,并在编程时在每个采样点的位置对正弦波的输出值进行误差校正。进而获得更精确的正弦波。该算法已在Altera公司的CYCLONEIV系列芯片Ep4CE15F7C8上完成了实现,采用VerilogHDL语言进行编程。该算法结构清晰简明,不需要调用乘法器,消耗更少的资源,生成波形较平滑,可被用作完整载波在一般通信系统中进行使用,也可应用在仪器仪表及工控等领域,合成较复杂的波形。
正弦波;发生器;VerilogHDL;FPGA
Class NumberTM9
1 引言
模拟方式和数字方式是常用的两种正弦波发生器设计方式。常见模拟方式有RC震荡电路、LC震荡电路和石英晶体震荡器等。一般的正弦波震荡电路采用选频网络进行选频,利用正反馈产生正弦波,再采用其他模拟电路来进行放大或处理[1]。这种模拟方式生成正弦波需通过调整器件参数来达到改变正弦波频率的目的。多数模拟电路形成的系统是非线性的,不容易通过计算来得出精确的参数,通常是通过一些粗略的估算,选择合适的工作点,确定器件的具体值。所以通过模拟方式产生较稳定、较高精度的正弦信号需要较长时间的调整[2]。这种方法不容易固化电路参数,容易受外界环境干扰。如果想获得良好的正弦波需要花费大量成本。
采用直接频率合成(DDS)的方法,可以采用DSP、FPGA或其他MCU作为数字控制芯片。这种方法是预先在存储区中放入一个完整周期的2n个等间隔正弦值数据,通过对这些数据的变换间隔取样输出并进行D/A转换得到正弦波。通过改变存储区数据的取样宽度,即变换取样点的间隔可合成不同频率的波形。这种方法伴随n值的变大可以满足要求的精度(存储的数据量随之增大)。因此这种方法若想得到满意的精度,需要具有足够的存储区空间,同时配合高精度数模转换器才可实现。经典的计算正弦波数值的算法有以下两种:
第一种是被称为Cordic算法的坐标旋转数字计算方法。Cordic算法是1971年J.Walther最先提出一种只用加法运算和移位运算的方法。通过恒定旋转求出相应的三角函数值,对多次不同方向旋转的角度进行累加,得到的角度代数和即为所求值。该方法在需提高正弦值精度时,需增加流水线级数,会大量消耗数字芯片的内部资源。
第二种算法是运用数值分析中逼近函数的思想,采用级数来逼近函数值的算法,一般的方式有chebyshev逼近、pade逼近、taylor逼近和最佳一致逼近等。多项式展开的项数越多,被近似的三角函数值就越准确。如果要求的函数值精度较高,则需要很多展开项来进行逼近,且编程时多为复杂系数的迭代多项式,运算的次数很多。计算过程中需调用乘法器,并且程序要执行大量浮点运算。
本文提出一种新设计思路可以消耗较少的硬件资源,通过计算的方法同时获得较精确正弦值。这种算法得到的正弦波可以用于电视、广播等数字通信系统中。
2 正弦波发生器设计
2.1 硬件部分实现
由于本发生器输出正弦波具有较高精度,在硬件电路的设计上采用控制芯片FPGA、数模转换芯片D/A和滤波器进行完成。FPGA负责运算,采用CYCLONEIV系列。型号为EP4CE15F17C8,封装为表贴256-LBGA,核电压1.25V。速度级别为8,逻辑门数为15408个,存储空间为516096位。内置4个锁相环。具有260个9×9位的乘法器,200个18×18位的乘法器。D/A进行数模转换,采用AD公司的AD9708,AD9708为8位、125MSPSD/A转换芯片。滤波器负责对输出波形进行整形,滤去杂波。采用7阶Butterworth滤波器,该滤波器通频带内较平坦,阻带渐渐下降,满足输出要求。
2.2 软件部分实现
为得到较精确的正弦值,对相邻取样点的正弦值误差进行计算。在第一个1/4个周期中,共插入256个取样点,即在一个完整的正弦波周期中共有1024个取样点。并且这些点均为等间隔分布。第一个1/4个周期的正弦波的最小值为原点的值0,最大值即峰值为π/2。先计算每个等间隔点对应的弧度值。第k个点对应的弧度值为
第一个1/4周期内所有的弧度值为
由此可以得出完整周期内的间隔d为(2π/ 510)-(π/510)=π/510。根据三角函数的和差化积进行推算。本文采用的三角公式为
由积化和差公式计算间隔为固定值d的第n个取样点和第n+1个取样点可得相邻两个点的误差计算式:
上式中12’h00c为计算机中的正弦值所代表的16进制数值。下面再来计算和差化积公式中右侧的c■为三角函数值,数值变化为非线性,因此寻找其误差规律。根据式的值在编程过程中按照某16进制数值变化时,算式的值会保持不变,在此误差算式值保持不变的情况下,等间隔的正弦值会保持相同的误差进行增长。且此误差计算式即使在变化的情况下,每次变化的值为12’h001。编程过程中更容易实现。通过区间估计计算可得如下正弦值误差表。
表1 正弦值误差表
根据上表可以看出误差值每次变化值为1,通过误差值对实际正弦值进行拟合即可得到精度较高的正弦值。根据以上误差分析编写其程序如下:
通过以上程序在FPGA+DA+filter的硬件平台上进行了实验,对程序进行了验证,获得了预期的波形。
3 与传统三种方案的比较
使用模拟电路产生的精确正弦波,成本高,调试过程繁琐,所需器件多,制作周期长。Cordic算法将输出反馈到输入进行反复迭代的运算,计算速度将减慢。若要提高精度必须扩大流水线级数。伴随流水线的增加,速度将会下降,而且程序还会消耗更大的系统面积。且每级迭代中都需要预先存储入反正切值(arctanθ),当运算字长增大时,所需存储空间呈指数增长。系统占据的资源将急剧加大,多次对存储空间进行访问也会降低速度。利用taylor级数进行逼近产生正弦波也具有局限性,taylor级数的精度取决与展开的项数(即迭代次数)和初始值,次数越多越精确,但运算时间长。初始值较小,精度就高,但随着迭代初始值增大,精度就会随之降低。
本算法与三种传统算法相比,既避免了较大的资源浪费,同时又得到有一定精准度的正弦波,在开发和调试过程中,节约时间和成本,具有一定的实际应用价值。
4 实验及波形
本算法经过实验验证可得到10k~270k频率范围的正弦波,1/4个周期中共有256个点,外部时钟频率为50MHz。通过改变取样间隔即可改变正弦波的频率。实验生成的信号和频谱如下。
5 结语
本设计是基于FPGA的数字式信号发生器,充分利用VerilogHDL硬件描述语言编程时方便的优势,算法设计思路简单,可提高开发效率,缩短开放周期,容易修改,可将输出频率范围增大。消耗逻辑门数量较少,该算法不需要调用FPGA片内multiplier,节省资源。完全不用考虑模拟方式使用哪些分立元件及其带来的调试、修改的麻烦,而且可以进行功能测试以及硬件测试。实验表明发生器产生的波形稳定,频率调节较为方便,精度高,接入示波器可得到平滑、稳定、精度较高的正弦波,有一定的开发及生产价值。
[1]朱卫华,黄乡佩,卢桂荣.基于FPGA的高精度数字移相低频正弦波发生器[J].微计算机信息,2005,21(7):106-107,125.
[2]韩素敏.基于VHDL的正弦波发生器设计[J].陕西工学院学报,2003,19(4):8-10.
[3]刘渝.快速高精度正弦波频率估计综合算法[J].电子学报,1999,27(6):126-128.
[4]赵国勋徐苓安.基于直接数字频率合成的正弦波发生器[J].自动化与仪表,2000,15(1):15-18.
[5]陈一尧,黄丽,方红斌.数字合成正弦波发生器[J].仪表技术,1998(5):9-11.
[6]王江,杨敏.一种基于DSP的数字合成正弦波发生器[J].微计算机信息,2009(2):9-11.
[7]汉泽西,张海飞,卢桂荣.基于DDS技术正弦波信号发生器的设计[J].电子测试,2009(8):65-69.
[8]霰军宪,邵立群,张杰.基于低失真、高精度可调正弦波发生器实现[J].现代电子技术,2010,33(8):134-137.
[9]杨小明,吴光敏,孟宇.一种正弦波发生器的设计方法[J].现代电子技术,2008,31(1):64-65.
[10]商同,刘兴荣.一种新型实用、性能稳定的正弦发生器[J].计量技术,1998(6):21-24.
[11]王燕.一种新颖的程控正弦波发生器[J].电测与仪表,1996(4):19-21.
[12]王正仕,楼珍丽.一种新型的数字化正弦波发生器[J].仪表技术,1999(3):26-27.
A Digital Sine Wave Generator Design Method Based on Error
ZHANG Wenduo
(Beijing's Extraordinary Electronic Technology Development Ltd.,Beijing100044)
This paper introduces an algorithm to get the accurate sine wave by digital method.By analyzing and calculating the product formula,the position of the corresponding sampling point and the interval of the adjacent sampling point which need to compensate the error of the output value are caculated.The output value of the sine wave is subjected to error correction at the position of each sample point,thereby obtaining a more accurate sine wave.The algorithm has been implemented on the CYCLONEIV series chip Ep4CE15F7C8 of Altera Corporation,and is programmed with VerilogHDL.The algorithm has a clear and concise structure,does not need to call the multiplier,consumes less resources,generates a smoother waveform,can be used as a complete carrier in the general communication system,can also be used in instrumentation and industrial control.
sine wave,generator,VerilogHDL,FPGA
TM9
10.3969/j.issn.1672-9730.2017.06.035
2016年12月1日,
2017年1月21日
张文铎,男,硕士研究生,研究方向:电力电子电路及其控制。