摘要:在研究数控振荡器NCO工作原理的基础上,通过分析对比几种不同的NCO设计方法,采用了算法简单、节省资源的基于ROM查找表的设计方法。针对正交数控振荡器NCO的主要部件正余弦存储表、可变模计数器进行了算法设计和电路设计,并在Altera公司的FPGA上进行了验证,波形仿真结果表明了电路设计的正确性。采用查找表的方法可以有效提高系统功能的可扩展性和系统的可集成性,使得NCO功能模块可以通过配置存储表、频率控制字来满足多种应用场合下的NCO设计需要,可以广泛地应用于各种现代通信系统中。
随着数字通信技术的飞速发展,软件无线电的应用愈加的广泛,而影响软件无线电性能的关键器件数控振荡器NCO(Numerical CONtrolled Oscillator)的设计至关重要;NCO的设计采用直接数字频率合成(DDS)技术;1971年3月美国学者J.Tierncy、C.M.Rader和B.Gold首次提出了直接数字频率合成(DDS)技术。这是一种从相位概念出发直接合成所需要的波形的新的全数字频率合成技术。同传统的频率合成技术相比,DDS技术具有频率精度高、转换时间短、频谱纯度高以及频率相位易编程、输出的频率稳定度与系统的时钟稳定度相同等一系列优点,广泛应用于现代各种通信系统中,包括数字上下变频、中频变换、频率合成以及扩频系统和各种频率相位数字调制解调系统中。
在软件无线电及通信领域,经常使用正交的数字信号;针对此类应用,本文给出了一种基于FPGA的正交NCO设计方法,可以实现正交的、连续相位、高性能、高精度、可重利用的数控振荡器,适合于多种应用场景的片上系统的设计。
1 NCO实现原理
直接数字频率合成(DDS)技术是一种全数字技术,同传统的频率合成技术相比,DDS技术具有多项优点:频率切换时间短、频率分辨率高、相位变化连续、容易实现对输出信号的多种调制等。
DDS的原理框图如图1所示,其实质是以基准频率源(系统时钟)对相位进行等间隔的采样。由图1可见,DDS由相位累加器和波形存储器(ROM查询表)构成的数控振荡器(NCO)、数模转换器(DAC)以及低通滤波器(LPF)3部分组成。而DDS的核心是NCO的设计与实现,NCO一般是由相位累加器和正余弦查找表两部分组成,其中相位累加器的设计较简单,故设计NCO的关键是设计正、余弦函数发生器。
实现函数发生器的方法为查表法(LUT),对于一个相位位数为L,输出信号幅度位数为M的NCO,所需查找表的大小为M×2L。
图1 DDS基本原理框图
在每一个时钟周期,L位相位累加器与其反馈值进行累加,其结果的高N位作为ROM查询表的地址,然后从ROM中读出相应的幅度值送到DAC。低通滤波器LPF用于滤除DAC输出中的高次谐波。因此通过改变频率控制字K就可以改变输出频率fout。容易得到输出频率fout与频率控制字K 的关系为:fout=Kfc/2L,其中fc为相位累加器的时钟频率,L为相位累加器的位数。定义当K=1为系统频率分辨率,即f=fc/2L。
2 NCO几种常见设计方法
常见的NCO实现的方法目前主要有计算法、CORDIC(Coordinated RotATIon DigitalComputer)算法和查表法等。
计算法是一种以软件编程的方式通过实时计算产生正弦波样本,该方法耗时多且只能产生频率相对较低的正弦波,而需要产生高速的正交信号时,用此方法不能很好的满足要求。
CORDIC算法即坐标旋转数字计算方法,其基本思想是用一系列固定角度的不断偏摆逼近所需旋转的角度,实现包括乘除、平方根、三角函数、向量旋转(即复数乘法)以及指数运算,该算法往往需要通过乘法器和查找表才能实现多种超越函数的计算,这会导致硬件电路实现复杂、运算速度降低,此外它能够计算的角度范围也有限,故CORDIC算法在实际使用时有较大的限制条件。
在实际应用中一般采用最有效、最简单的查表法,即事先根据各个NCO正弦波相位计算好相位的正弦值,并以相位角度作为地址把该相位的正弦值数据存储在表中,然后通过相位累加产生地址信息读取当前时刻的相位值在表中对应的正弦值,从而产生所需频率的正弦波;同时由于正余弦波形的对称性,只需要存储部分数据即可完成全相位的数值输出。这种实现方法,设计简单、运算速度较高,可以很好的满足在数字变频、扩频、调制解调等多种场合的要求。
3 正交NCO的查找表实现方法
基于FPGA的正交NCO设计原理框图如图2所示,主要由3部分组成:可变模计数器、正余弦查找表和输出单元3个模块组成。
图2 NCO的设计原理框图
下面以输入的频率控制字为1200Hz为例进行设计。
Fre_sample,表示系统采用时钟;Fre_cnt_word表示频率控制字。
1)可变模计数器的设计
可变模计数器是根据频率控制字,计算出正余弦表的查表所需的地址;同时要保证产生的正余弦波的相位保持连续(有些应用场合常常要求输出的相位连续),即置于相应的余数值。在第1个工作时钟周期读入频率控制字,第2个工作时钟周期内计算出mod(Fre_sample,Fre_cnt_word)作为相位控制字,第3个工作时钟周期内部计数器复位置入相位控制字,第4个时钟周期开始以频率控制字为步长,相位控制字为初始值进行计数输出。
2)正余弦查找表的设计
正余弦查找表是根据可变模计数器的输出查表得到相应载频波形的输出。
基于FPGA的NCO设计的一个关键就是波形存储器ROM相位累加器的输出地址作为ROM的地址输入,经查表和运算后,ROM输出正余弦波形的量化数据;设计中主要是要节省存储器资源的开销,即减小ROM存储表的空间;由于存储表的尺寸随着地址位数或数据位数的增加呈现指数级递增关系,所以在满足频率分辨率、信号性能的前提下,主要考虑较小ROM存储表的开销;在实际的应用中,可以充分利用正余弦信号在一个周期内的对称性来减少ROM存储表的开销,例如正弦信号,在一个周期内对于X轴是对称的,基于此可以将ROM存储表减少至原来的1/2,再利用半周期内的左右对称性,又可以将ROM存储表减少至原来的1/2,因此通过一个正弦查找表的前1/4周期就可以变换得到整个正弦波周期查找表,这样就节省了3/4的存储器资源。
正余弦表的具体设计思想如下:取频率分辨率为df=1Hz;假设频率控制字为1200Hz的频率左右,现考虑对1200Hz的正余弦波形每一个周期采8个样点,则可得采样率为fs=1200×8=9600Hz。设对于每一个样点值取8bit量化,则每个表格共需存储9.6kB;(如果考虑到正、余弦信号的对称性,设计时可优化为上每个表格存储1/4个波形即可,即每个表格只需存储2.4kB;)使用时是用步长STep来调节输出频率,同时保证输出的正余弦波的相位连续。如果每隔0样点取1,即step=1,输出频率为1Hz;每隔1点取1,即step=2,输出频率为2Hz;……;每隔1199点取1,step=1200,输出频率为1200Hz。
3)正余弦表的装载
采用Quartus软件中的。mif 文件格式可以方便的完成存储表的装载;同时对于装载文件的生成可以使用matlab输出。mif的文件格式很方便的生成;如下文中给出了位宽为8bit,深度为9600,地址为无符号数,数据为十进制数的9600个单元的mif文件,在初始化RAM时,按照Quartus软件的引导直接配置即可。
WIDTH=8;
DEPTH=9600;
ADDRESS_RADIX=UNS;
DATA_RADIX=DEC;
CONTENT BEGIN
0 : 0;
1 : 2;
2 : 10;
3 : 30;
4 : 50;
5 : 50;
6 : 10;
7 : 100;
……
9598 : 0;
9599 : 0;
END
4 设计实现及其仿真波形
本次设计采用性价比较高的ALTERA公司的STRATIX芯片进行设计仿真,该系列芯片是基于1.5V工作电压、0.13μm全铜布线SRAM工艺的FPGA芯片。此系列芯片拥有最多114140个逻辑单元(Les)和最多10Mbits的内部RAM。该系列芯片支持多种I/O标准,提供了最多可达12个的用于处理复杂时钟信号的锁相环(PLLs)。同时,STRATIX系列芯片提供了最多可达28个的数字信号处理单元(DSP),它们由总共224个内置硬件乘法器(9位乘9位)组成,利用它们可以有效地实现例如快速傅立叶变换(FFT)、有限冲击响应(FIR)滤波器、无限冲击响应(IIR)滤波器等高性能的数字信号处理单元或者乘法器。
图3 NCO模块的主要端口定义
2)Quartus仿真输出波形,如图4所示。
图4 NCO的仿真输出波形
此仿真波形为3个频点的NCO输出波形,用matlab绘出输出的载波的波形如图5所示。
图5 输出载波的波形
由上面的仿真结果可以看出,NCO正确输出了3个频点的仿真波形;同时通过实际的FPGA硬件测试和验证,该设计达到了所要求的性能指标。
5 资源占用情况
使用Altera公司的STRATIX芯片进行编译、综合,所得的资源占用结果如图6所示。
图6 NCO资源占用情况
6 结束语
本文给出了一种基于FPGA的正交NCO的设计方法,在实际应用过程中可参考给出的设计实例,通过改变频率控制字、系统采样频率、存储正余弦查找表的深度和存储表的位宽,即可得到不同输入频率范围的NCO;同时如果涉及需要的精度及频率较高,也可采用外置的存储器,如FLASH,SRAM等与FPGA配合使用,较大的扩展存储表的深度和位宽,可最终达到设计的要求。
作者:张阿宁 赵萍 西安邮电学院电子工程学院 来源:《电子设计工程》2011年17期
我推荐大家读
轻松参与
VS
表达立场
这是垃圾文章