基于CORDIC算法2FSK调制器的FPGA设计

2011-06-30 01:09雷能芳
现代电子技术 2011年9期
关键词:调制器

摘 要:频移键控(FSK)是用不同频率的载波来传递数字信号,并用数字基带信号控制载波信号的频率。提出一种基于流水线CORDIC 算法的2FSK 调制器的FPGA实现方案,可有效地节省FPGA 的硬件资源,提高运算速度。最后,给出该方案的硬件测试结果,验证了设计的正确性。

关键词:移频键控; 调制器; CORDIC算法; FPGA

中图分类号:TN911-34

文献标识码:A

文章编号:1004-373X(2011)09-0077-03

Design of 2FSK Modulator Based on CORDIC Algorithm and FPGA

LEI Neng-fang

(Department of Physics and Electronic Engineering, Weinan Teachers University, Weinan 714000, China)

Abstract: The frequency-shift keying (FSK) transmits the digital signal with different frequency carrier, and controls the frequency of carrier with the digital basedand signal. The implementation scheme of 2FSK modulator based on pipeline CORDIC algorithm and FPGA is porposed. It can save the hardware resources and improve the operating speed efficiently. The design was verified by the practical testing result.

Keywords: FSK; modulator; CORDIC algorithm; FPGA

0 引 言

频移键控(FSK)是用不同频率的载波来传送数字信号,并用数字基带信号控制载波信号的频率。具有抗噪声性能好、传输距离远、误码率低等优点。在中低速数据传输中,特别是在衰落信道中传输数据时,有着广泛的应用。传统上以硬件实现载波的方法都是采用直接频率合成器(DDS)实现。但是DDS传统的实现方式是基于查找表思想,即通过查找预先存储的正余弦表来产生需要的正余弦值。当频率、精度要求越高,需要存储的值也就越多,考虑FPGA的RAM资源有限,传统的DDS实现方式就有了应用瓶颈[1]。因此导致开发成本过高,甚至无法实现,不适合现代通信系统的发展。

本文提出了应用CORDIC(Coordinate Rotation Digital Computer)算法实时计算正弦值的方案,并基于CORDIC算法在FPGA芯片上设计了2FSK调制器。这不仅能够节省大量的FPGA逻辑资源,而且能很好地兼顾速度、精度、简单、高效等方面。

1 CORDIC算法原理及结构

1.1 CORDIC算法原理

CORDIC算法[2]是由J.Volder于1959年提出的。该算法适用于解决一些三角学的问题,如平面坐标的旋转和直角坐标到极坐标的转换等。CORDIC算法的基本思想是通过一系列固定的、与运算基数有关的角度的不断偏摆以逼近所需的旋转角度。从广义上讲,CORDIC方法就是一种数值计算的逼近方法。该算法实现三角函数的基本原理如图1所示。

图1 CORDIC算法原理图

设初始向量(x0,y0)逆时针旋转角度θ后得到向量(xn,yn),如图1所示。则:

xn=x0cos θ-y0sin θ

yn=y0cos θ+x0sin θ

(1)

经变换为:

xn=(x0-y0tan θ)cos θ

yn=(y0+x0tan θ)cos θ

(2)

为了避免复杂的乘法运算,用一系列微旋转来处理,第i次旋转可表示为:

xi+1=(xi-δiyi2-i)ki

yi+1=(yi+δixi2-i)ki

zi+1=zi-δitan-12-i

(3)

式中:θi表示第i次旋转的角度,并且满足tan θi=2-i;zi表示第i次旋转后与目标角度的差;δi表示向量的旋转方向,由zi的符号位来决定,即δi=sign zi。ki=11+2-2i为每一级的校正因子,也就是每一级旋转时向量模长发生的变化,对于字长一定的运算,总的校正因子是一个常数。若总的旋转次数为n,则总校正因子用k表示为:

k=∏n-1i=011+2-2i

(4)

令x′0

=kx0,y′0

=ky0,则:

x′i+1

=

x′i-δi

y′i2-i

y′i+1=

y′i+δi

x′i2-i

(5)

式(5)就是CORDIC算法的迭代式。迭代n次(n→∞)后可以得到如下结果:

xn=(x0cos θ-y0sin θ)k

yn=(y0cos θ+x0sin θ)k

zn=z0-θ

(6)

若给定的初始输入数据为x0=1/k,y0=0时,z0=θ,则输出为:

xn=cos θ

yn=sin θ

zn=0

(7)

由式(7)可知:xn,yn分别为输入角θ的余弦和正弦值,故基于CORDIC算法可产生正弦载波信号,而且由式(5)可以看出所有运算简化成加减法和移位操作,因此很容易用硬件实现。

1.2 CORDIC 流水线结构

CORDIC算法的实现方式有2种:简单状态机法和高速全流水线处理器法。如果计算时间的要求不严格,可以采用状态机结构。这一结构中最复杂的就是两个桶状移位器,而桶状移位器的面积大约和它所包含的传输门的数目成正比[3]。尽管可以通过改进CORDIC算法来减小CORDIC处理器的总面积,但桶状移位器所占的面积并不能减小。另外,这种结构由于只在时间上复用资源,因此,数据吞吐率不高。

由于CORDIC算法的内部数据流规则,决定了在CORDIC处理器解决方案中非常适合采用流水线型微旋转结构。采用流水线可将一个算术操作分解成一些小规模的加减法和移位操作,并在多个比较高速的时钟内完成。另一方面,输出信号的精度只与CORDIC算法的旋转次数或流水单元数有关,即与级数有关。如需提高精度,只需简单地增加流水单元即可,其扩展性很好,而且这并不会大量增加FPGA的资源耗费[4]。CORDIC流水线结构的每一级迭代旋转的硬件实现基本单元如图2所示。

图2 CORDIC算法基本单元

2 基于CORDIC算法正弦载波发生器的总体结构

正弦载波发生器系统结构如图3所示。

图3 正弦载波发生器系统结构图

在该系统结构图中,CORDIC计算单元是核心。CORDIC计算单元的输入由相位加法器提供。相位加法器不间断地产生角度值,由CORDIC计算单元计算出相应的三角函数值,即可在其输出端产生连续的数字正弦载波。

通过频率控制字,改变相位累加器的步长,这样即可改变正弦载波的频率。具体的数学推导如下[5]:

设相位累加器的字长为N,频率控制字即步长为step,则2琋就相当于2π rad,N位中的最低有效位相当于2π/2琋 rad,即最小的相位增量,step对应的相位为step×(2π/2琋) rad,完成一个周期的正弦载波输出需要2琋/step个参考时钟周期。所以输出正弦载波的周期为:

Tsinout=2琋stepTclk

(8)

输出正弦载波的频率为:

fsinout=step2琋fclk

(9)

当step=1时,输出频率最低,即正弦载波的频率分辨率为:

Δf=12琋fclk

(10)

可见改变相位累加器的步长step,可以改变正弦载波的频率;改变相位累加器的字长N,可控制正弦载波的频率分辨率。在相位累加器后加入相位加法器, 通过改变相位控制字P,可以控制输出信号的相位;通过设置幅度控制字A,可控制最终输出的正弦载波的幅度大小。因此,通过对相位控制字、频率控制字或幅度控制字进行多路选择, 可以形成不同进制的调制方式。可以看出, 使用该结构可以很容易实现频率调制、相位调制和幅值调制。

3 2FSK调制器的FPGA设计

图4为2FSK调制器顶层工程原理图。该原理图主要由三个模块组成:2选1数据选择器MUX21、相位累加器adder、正弦载波生成模块cordic。其中,clk为系统时钟信号,rst为系统清零信号,step1,step2为2个不同的频率控制字,s为系统频率控制字选通端。2选1数据选择器的选通端s受基带信号控制,当基带信号为‘0时,选通控制字step1;当基带信号为‘1时,选通控制字step2。通过对step1,step2的选择,可以实现频率的切换。

在QuartusⅡ环境中,三个子模块均用VHDL语言进行设计,系统顶层工程采用原理图进行设计,对系统顶层工程进行器件选择、引脚锁定、编译、综合后下载到Cyclone系列EP1C12Q240C8器件中,通过在频率控制字的引脚选择不同参数即可在FPGA器件中完成2FSK调制器的设计。

图4 2FSK调制器顶层工程原理图

4 系统硬件实时测试

调制器的输出信号为数字信号,经D/A转换后可以通过示波器进行测试,也可以直接采用QuartusⅡ软件中的嵌入式逻辑分析仪SignalTapⅡ进行测试。

采用SignalTapⅡ进行芯片测试,用户无需外接专用仪器,就可以对FPGA器件内部所有信号和节点进行捕获分析,而又不影响原硬件系统的正常工作[6]。经测试得到的实时波形如图5所示。

测试结果表明,基于FPGA和CORDIC算法的2FSK调制器设计方案是正确可行的,且波形流畅,在转换处能快速进行切换。

图5 2FSK调制器实时波形

5 结 语

用FPGA和CORDIC算法实现信号调制,既克服了传统方法耗费资源、运行速度低等缺点,还具有静态可重复编程和动态在系统重构的特性,极大地提高了电子系统设计的灵活性和通用性,大大缩短了系统的开发周期。

参考文献

[1]郑瑾,葛临东.基于流水线CORDIC算法的数字下变频实现[J].现代雷达,2006,28(10):62-64.

[2]VOLDER J E. The CORDIC trigonometric computing technique [J]. IRE Trans.on Electronic Computers, 1959, 8 (3): 330-334.

[3]MEYER-BAESE Uwe.数字信号处理的FPGA 实现[M].刘凌,译.2版.北京:清华大学出版社,2006.

[4]卢贵主.基于CORDIC算法的DDFS实现研究[J].厦门大学学报:自然科学版,2004,43(5):636-639.

[5]雷能芳.基于DDS技术的数字移相正弦信号发生器的CPLD设计与仿真[J].科学技术与工程,2009,9(4):1009-1011.

[6]潘松,黄继业.EDA技术与VHDL[M].北京:清华大学出版社,2005.

[7]王玉泰,李念强.基于DSP的直接数字频率合成的算法研究及实现[J].仪器仪表学报,2004,25(4):66-68.

[8]姚亚峰,付东兵,杨晓非.基于CORDIC 改进算法的高速DDS电路设计[J].华中科技大学学报:自然科学版,2009,37(2):25-27.

[9]张晓彤,辛茹,王沁,等.基于改进混合式CORDIC算法的直接数字频率合成器设计[J].电子学报,2008,36(6):1144-1147.

[10]姜宇柏,黄志强.通信收发机的Verilog实现与仿真[M].北京:机械工业出版社,2004.

[11]张健,杨万麟.利用Virtex器件实现子空间法雷达目标一维像识别[J].现代电子技术,2007,30(19):77-79.

[12]关进辉,石春和,何远辉.基于PC104总线的2FSK调制器的设计与实现[J].现代电子技术,2010,33(1):87-89.

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

猜你喜欢
调制器
基于锁相环技术的振荡器稳频调制器仿真研究
一种基于前馈网络的素数Sigma-Delta调制器优化设计*
一种用数字集成电路FPGA实现的伪速率调制器
D类功放中数字调制器的研究与实现
IDT针对下一代无线通信推出低功耗IQ调制器
基于金属表面等离子体激元的光调制器研究