基于FPGA技术的抽取器设计与实现_第1页
基于FPGA技术的抽取器设计与实现_第2页
基于FPGA技术的抽取器设计与实现_第3页
基于FPGA技术的抽取器设计与实现_第4页
基于FPGA技术的抽取器设计与实现_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精选优质文档-----倾情为你奉上精选优质文档-----倾情为你奉上专心---专注---专业专心---专注---专业精选优质文档-----倾情为你奉上专心---专注---专业基于FPGA技术的抽取器设计与实现摘要 软件无线电是未来通信的发展方向,而作为其重要组成部分之一的抽取器,将难以实时处理的高速数据流变为低速率信号,使软件无线电的实现成为可能。基于抽取器的基本原理,本文研究和分析了多种数字滤波器及抽取结构,并用MATLAB进行仿真,从而确定了本设计所采用的抽取器结构。在此基础上,采用QuartusII开发系统设计了抽取器各个模块,通过波形仿真验证了其正确性。最后,采用系统硬件平台将程序写入FPGA芯片,利用示波器和频谱分析仪对设计的抽取器进行了频域和时域性能分析。 本文完整地完成了抽取器的设计和实现过程,从理论到实际硬件一步步验证了FPGA技术应用于抽取器的可行性及灵活性。关键词:抽取器,数字滤波器,软件无线电,MATLAB,VHDL,FPGA

THEDESIGNANDIMPLEMENTATIONOFDECIMATORBASEDONFPGAABSTRACTSoftwareradioisregardedasthedevelopingdirectionofcommunicationinfuture,andasonepartofthis,decimatorchangethehighratedataflowtoalowerone,whichmeetstherequireofreal-timeprocessingandmakessoftwareradiocometrue.Basedonthetheoriesofdecimation,thisdissertationanalyseskindsofdigitalfiltersanddecimationstructures.WiththeMATLABsimulation,itdeterminesthefinalstructureofdecimator.Accordingtothis,everymoduleofthisdecimatorisdesignedonQuartusIIdevelopingsystem,whichisprovedcorrectbywavesimulation.Atlast,thisdesignofthedecimatorisimplementedonFPGAhardwareplatform,andtestedbyoscilloscopeandspectrumanalyzer.Thisdissertationcompleteallthestepsofthedesignandimplementofdecimator,andprovethepossibilityandflexibilityofusingFPGAtorealizedecimatorbothintheoryandinpractice.KeyWords:Decimation,DigitalFilter,SoftwareRadio,MATLAB,VHDL,FPGA

目录图列TOC\h\z\c"图"表列TOC\h\z\c"表"绪论课题的来源及背景软件无线电思想是20世纪90年代以后逐渐兴起的一种全新的设计思想。它是针对无线通信领域现存的一些问题而提出的,如:多种通信体系并存,频率资源紧张,多种标准竞争等。而无线个人通信系统的发展又使新系统层出不穷,产品生产周期缩短,原有的以硬件为主的无线通信体制难以适应这一局面,软件无线电的概念应运而生。软件无线电最初起源于军事研究。其电台一般只能完成单一的功能,各种电台之间结构差异大,限制了互相之间的通信。为了保证不同设备之间的互通性,使军种间更高效可靠的协同通信,美国军方展开了对三军通用无线电台的研制,并制定了发展计划和目标。而在民用市场,当前多种通信体制并存,新体制不断涌现。模拟体制与数字体制共存,TDMA体制和CDMA体制并存。由于各体制硬件平台不同,使得他们之间的互相通信比较困难,随着无线通信的发展,使得人们对各通信体制之间互通的要求日趋强烈[2]。软件无线电的完整概念和结构体系是由MITRE公司的美国科学家JosephMitola于1992年5月在NTC(NationalTelesysemsConference,美国电信系统会议)上明确提出[1]其核心思想是:构造一个具有开放性、标准化、模块化的通用硬件平台,将各种功能,如工作频段、调制解调类型、数据格式、加密模式、通信协议等用软件来完成,并使宽带A/D和D/A转换器尽可能的靠近天线,以研制出具有高灵活性和开放性的新一代无线通信系统。根据其思想,软件无线电直接在信号射频进行采样,将模拟信号转换成数字信号,射频以下其它的所有处理功能全部采用软件模块来实现。而AD之后的数据速率往往过高,无法满足后续实时处理的需求,这就要求我们提出一种降低数据速率而又不损失有用信息的解决方案。为了达到这一目的,抽取器应运而生。研究的目的与意义上文已经提到,当前通信标准繁多,各电台工作频率从几十KHz到几十GHz不一。在软件无线电的实现时,如果按照Nyquist采样定律,ADC的抽取频率要大于被采样信号的最高频率的两倍以上,所得到的离散采样值才能准确的确定原信号。这样势必导致ADC后的数据速率很高,带来的问题就是后续DSP、FPGA等器件的处理速度跟不上,特别是对有些同步解调算法,如果其数据吞吐率太高是很难满足实时性要求,所以有必要对数据流进行降速处理[3]。目前使用的通信信号多数都是带通信号,其带宽一般不会超过几MHz,对于带通信号如按照带通采样定理,采样速率不需要大于信号最高频率的两倍,用较低的采样速率也可反映带通信号的特点,当带通信号的采样频率和中心频率满足时(取能满足的最大整数,为频带宽度),由采样信号可以准确地恢复原信号。如此,减少了抽样点数,大大减少了后续DSP对信号进行处理的负担。对采样后的数据进行处理就可以得到基带信号,这也就是数字下变频,抽取技术和采样后数字下变频技术是软件无线电实现的基础,对其进行研究并在硬件上加以实现有着十分重要的意义[23,30]。国内外在该领域的研究现状及分析软件无线电被称为是继模拟通信到数字通信,固定通信到移动通信之后的第三次技术革命,使从硬件无线通信到软件无线通信的革命。而且其不仅在民用、军用无线通信领域获得应用,在电子战、雷达、信息化家电等领域也得到推广,世界各国都在对其进行深入研究[33]。1990年8月,美国国防部与Hazeltine公司签订合约,开始研制Speakeasy软件无线电系统第一期工程[4],1994年8月SpeakeasyI型样机研制成功并进行了技术演示。在1995年,启动了Speakeasy二期工程,1999年更名为为冗贴(联合战术无线电系统)系统继续进行开发研究。在民用方面[2],美国800/900MHz的专用移动无线电(SMR)系统采用了软件无线电技术。1996年11月,美韩合资的AIRCOM公司在北京召开的国际通信展览会上展出了它的软件无线电基站。2000年6月,Motorola公司公布它己着手研制用于蜂窝通信的软件无线电终端。在亚洲方面,日本的ARIB于1996年就开始了软件无线电接收机的研究,并己制作出样机。电子情报通信学会也成立了软件无线电研究会。NTT开发了可以双向和实时处理的软件基站和终端。韩国的KEES(KoreaElecbomagleticEngZneellngSocjety)成立了软件无线电工作室。ETIR(EIecbonicsTelecommMnicationsResearchlnstjtute)正在研究可能实现IMT-2000功能的软件无线电设备。而我国在1996年10月将软件无线电正式列入了国家863高技术计划通信主题的研究项目。“九五”期间,该技术己成功地在军用单兵短波数字通信系统中得到应用。1998年7月,我国向ITU提交的第三代移动通信提案TD-SCDMA中就采用了软件无线电技术。我国研究开发的第二代同步轨道航天测控设备的方案中,其核心就是引入了软件无线电技术[2]。在软件无线电的标准化方面,1996年3月设立的SDR协会(软件定义的无线电协会,原MMITS协会)目前的活动仍很活跃。它是唯一的一个国际性标准化组织,任务是促进软件无线电的普及和制定故障标准,目前已有100个以上的团体加入了该组织,进行有关方面的研究。2000年3月,美国FCC(美联邦通信委员会)听取了关于建立软件无线电法规方面的意见。同年,ITU-T的WP8F小组也开始了有关软件无线电的讨论。论文主要研究内容本论文所研究的抽取器,是软件无线电系统的重要组成部分。论文所要完成的主要设计工作是实现一个基于FPGA技术的抽取器,实现的主要功能是对输入的高速率数据在保留所需频段的前提下,进行降低速率的操作(即抽取),输出较低码率的数据,便于后续的数字信号处理。本论文主要工作内容如下:在广泛收集相关资料的基础上,熟悉和研究抽取器的实现理论和各种实现结构,特别是其中各类抽取滤波器的结构、优缺点、实现方式等。然后运用MATLAB设计抽取器结构,如图1-1所示,并计算其中各滤波器参数,然后进行仿真,以验证理论,并为指导后续的VHDL设计做好准备。在理论和仿真的基础上,在QuartusII开发平台上,运用VHDL语言进行设计,实现基于FPGA技术的抽取器,其中所使用的FPGA芯片为ACEX1K:EP1K30TC144-3。在QuartusII上进行功能仿真和时序模拟后,将在FPGA硬件平台上调试,最后通过示波器和频谱分析仪来检验最终成果。 32倍抽取器32倍抽取器输出序列输入序列4级8倍抽取CIC滤波器HB滤波器ISOP补偿滤波器FIR滤波器HB滤波器图STYLEREF1\s1SEQ图\*ARABIC\s11设计结构图论文的第1章介绍了软件无线电的发展现状以及抽取器设计的目的与意义,并给出了本文的内容安排。第2章对抽取器的基本理论和各种实现结构进行了介绍,并分析和设计了多种抽取滤波器,最后得到了本论文所要采用的抽取器结构。同时使用MATLAB对所提出的抽取器结构进行了具体的设计,使用滤波器设计分析工具箱(FDATOOL)进行了抽取滤波器设计。然后通过程序模拟了整个抽取器结构,得到信号通过抽取器前后的波形以及频谱的仿真。第3章在前面的基础上,在QuartusII开放平台上,使用VHDL语言进行抽取器的实现。讨论了各模块的具体实现细节,以及其中各种出现的问题和解决方案。在各模块经过测试后,将它们综合成最终的系统,进行了功能仿真和波形模拟,初步分析了所设计的抽取器的性能。第4章进行了最终的硬件调试,使用示波器与频谱分析仪,检验了本论文所设计的抽取器的性能,证明了FPGA技术应用于抽取器的可行性和灵活性。最后一章是对论文工作的一些总结。本章小结本章介绍了课题的来源与背景,并在目前发展状况的基础上,给出了本设计的目标,最后介绍了全文的内容结构。抽取器理论研究及MATLAB仿真实现前一章已经总体上给出了我们对整个设计的规划,在这一章我们将从基础理论开始一步步讨论、研究并仿真整个抽取系统。抽取的基本原理将抽样序列的速率降低D倍的过程称为抽取,在抽取过程中,为了避免产生频谱混叠,需要对原序列进行低通滤波。设滤波后的序列为,序列中的每D个样点保留一个样点得到一个新的样点序列,就是经过D倍抽取后的样点序列,这一过程[29,32]如图2-1所示。低通滤波抽样速率降低D倍图STYLEREF1\s2SEQ图\*ARABIC\s11抽取器整数倍抽取在信号的采样数据中每D个抽取一个,当D为整数时,称为整数倍抽取,其中D为抽取因子。即若原信号序列为,其中为采样时间,则经过D倍抽取后,得到抽样序列的采样时间,则 (2-1)依次组成一个新的序列,即 (2-2)通过MATLAB可以很容易地实现其抽取,只需要将输入序列的第D、2D、3D……nD个元素取出,组成新的序列,即完成了D倍抽取。具体程序可用一个循环来实现:Fori=1:length(BeforeD)/DAfterD(i)=BeforeD(i*D);End其中BeforeD为输入信号序列,AfterD为抽取后信号序列,D为抽取因子。经过抽取后,时域上的信号变化如图2-2所示。图STYLEREF1\s2SEQ图\*ARABIC\s12信号抽取示意图而抽样信号的频谱与原来信号的频谱关系[21]为, (2-3)可见,信号的抽取会带来频谱的混叠。抽取序列的频谱信号为抽取前原始序列的频谱经平移和D倍展宽后的D个频谱的叠加和,如图2-3所示。为了避免混叠,必须首先降低序列的带宽,即,然后再按D倍进行抽取。这样,就必须先对信号进行低通滤波。其过程如图2-4所示。图STYLEREF1\s2SEQ图\*ARABIC\s13抽取前后的频谱结构(混叠)图STYLEREF1\s2SEQ图\*ARABIC\s14抽取前后的频谱结构(无混叠) 在实际实现时,先用一组数字滤波器(带宽为)对进行滤波,使中含有小于的频率分量,再进行D倍抽取,而抽取后的频谱就不会发生混叠。这样,中的频谱成分与中的频谱成分(即中小于的频率分量)是一一对应的。所以,对进行处理等同于对进行处理,但前者的数据速率只有后者的,大大降低了对后续处理的速度要求。分数倍抽取实际中往往会碰到分数倍抽取的情况。对于抽取因子为有理数因子的情况,可以采用先进行I被内插再进行D倍抽取来实现[34,35]。需要注意的是,必须是内插在前,抽取在后,以确保其中间序列的基带频谱宽度不小于原输入序列谱或输出序列谱的基带频谱宽度,否则将会产生频谱混叠,即发生信号失真。鉴于其实现结构基于整数倍抽取,为了简化问题,以及更好专注于抽取器的FPGA实现,本论文将主要关注于整数倍抽取的研究。数字滤波器通过以上对抽取原理和结构进行的讨论可以看到,抽取器的核心部分是滤波器,滤波器设计的优劣直接影响着抽取器的性能,选择合适的前级低通滤波器是软件无线电系统设计中实现抽取处理的首要问题。在这一节,我们将介绍并讨论几种常见的数字滤波器[14,15]。FIR低通滤波器数字信号处理中最为常见的低通滤波器主要分为两种:有限冲激响应(FIR)滤波器和无限脉冲响应(IIR)滤波器。这两种滤波器之间最大的区别是IIR滤波器的内部结构中包含反馈回路,而FIR滤波器中只有前向支路,没有反馈回路。虽然IIR滤波器实现滤波时所需要的阶数比较少,但由于FIR滤波器设计时可以得到线形相位的频率响应,又因为抽取以后信号的采样频率已经降低,所以设计较高阶的FIR滤波器来进行滤波是完全可能的。如上所述,FIR滤波器的冲激响应函数为有限个值,即满足: (2-4)式中,为有限值,即只在有限范围不为零,实际中通常取,所以对FIR滤波器有: (2-5)FIR滤波器的频率响应可表示为: (2-6)而所谓的滤波器设计,实际上就是在给定或其某些特征参数的条件下,求出冲激响应。FIR滤波器相对于IIR滤波器有许多独特的优点:线形相位、稳定性等。而且其设计已经有了许多成熟的算法,如最佳等波纹逼近法、窗函数法以及频率采样法等。本论文将采用的方法是较为简单的窗函数法,即用一个已知的窗函数去截取一个理想滤波器的冲激函数,得到一个实际可用的FIR滤波器的冲激函数。而对于各种窗口的特性在这里就不再重复累赘地介绍了,本设计选用的窗口为凯塞-贝塞尔窗(Kaiser-BaselWindow)[5,6,7]: (2-7)式中 (2-8)为零阶第一类修正贝塞尔函数,可用下面级数计算: (2-9)一般取15-25项,便可以满足精度要求。参数可以控制窗的大小。一般加大,主瓣加宽,旁瓣幅度减小,典型数据为。凯塞窗的幅度函数为: (2-10)这里我们所需要的FIR滤波器是低通滤波器,我们要选择合适的参数和滤波器阶数N。调整参数,可以调整FIR滤波器的通带与阻带的波纹最大值。在设计低通滤波器时,设(dB)。可以得到选择与的关系[7,8,9]: (2-11)考虑以及时,当给出归一化过渡带带宽与衰减的大小时,可用下式决定N值: (2-12)由于式2-12是利用实验结果求得的近似公式,所以当时,可用下式求得N的值: (2-13)由于通常从式2-12和式2-13得到的N值不是整数,所以将N上取整作为最小的N值。假设归一化通带截止频率为,阻带截止频率为,则可得。当时由式2-11和式2-12可以得到,N=20。然后可以使用MATLAB自带的信号处理工具箱来方便快捷地计算,亦即FIR滤波器的系数。在MATLAB命令窗口键入FDATOOL调出滤波器设计和分析工具箱(FilterDesign&AnalysisTool),然后选择我们需要设计的滤波器类型:低通(Lowpass)、FIR,为了简便起见,选择窗函数设计方法,具体窗口选择恺塞窗(Kaiser),参数设置,滤波器阶数N=20。频率特性选项上,通带截止频率(归一化单位)。在设定好所需参数后,按下DesignFilter按钮,就可以得到我们所需的低通FIR滤波器的频响以及参数,如图2-5所示。图STYLEREF1\s2SEQ图\*ARABIC\s15FIR滤波器设计在完成FIR滤波器的设计之后,我们关心的是其具体的实现结构。由于FIR滤波器中只有前向支路,其实现结构较为简单,只需要级联乘累加结构即可实现。具体如图2-6所示。其中输入序列,而为最近的输入值,表示滤波器的抽头系数。每个输入延迟后乘以响应的抽头系数再相加,可到到输出序列的表达式如下:(2-14)TTTTTT图STYLEREF1\s2SEQ图\*ARABIC\s16FIR滤波器的基本结构当抽样在延时线上时,所有的计算都必须在一个抽样周期内完成,即滤波器所需的处理速度就是输入数据的采样频率与滤波器阶数的乘积。到下一个抽样周期,所有的样本向右移一位,新的输入数值代替原来的样本值,根据同样的表达式计算当前时刻FIR滤波器的输出数值。在MATLAB中有滤波器函数FILTER()可以直接用来仿真FIR滤波器,其基本格式为:Y=FILTER(B,A,X)。进行FIR滤波器仿真时,X为输入序列,Y为输出序列,B为FIR滤波器系数,A=1。半带滤波器半带(HB)滤波器是一种特殊的FIR滤波器,它在多速率信号处理中有着特别重要的位置。这种滤波器非常适合2倍抽取或内插,而且计算效率高,实时性强。它可使运算的每秒次数比一般线性相位FIR滤波器差不多减少一倍。因此,在高速抽取时,大都采用多个半带滤波器级联的方式。半带滤波器的冲激响应为实数,且为偶对称,即,长度为奇数,其冲激响应满足下式: (2-15)从上式可以看出,半带滤波器的冲激响应除了零点不为0以外,在其他偶数点处全为0,所以采用半带滤波器来实现抽取时,只需要一半的计算量,有很高的计算率,特别适合进行实时处理。半带滤波器的频率响应满足以下关系式: (2-16)即半带滤波器的阻带宽度()与通带宽度是相等的,且通带和阻带的误差容限也是相等的。且如图2-7a所示,半带滤波器在频域具有如下性质: (2-17)b)b)a)00000000图STYLEREF1\s2SEQ图\*ARABIC\s17半带滤波器频谱特性及2倍抽取时的混叠情况可见,半带滤波器在区间(过渡带)内不为零,不满足无混叠抽取的条件。但是在抽取后,信号虽然在过渡带内有混叠,但在通带()内是没有混叠的,如图2-7b所示,其内部的信号是可以恢复的。所以就其带通信号而言,完全可以采取半带滤波器进行2倍抽取。半带滤波器的设计和FIR滤波器极为相似,我们仍旧借助MATLAB的滤波器设计和分析工具箱来进行设计。与图2-5所示稍有不同的是,将响应类型(ResponseType)改为半带低通(HalfbandLowpass)即可,其他参数选取和FIR完全类似。只是最后在确定半带滤波器的阶数时N要满足N=3+4K[1]。假设我们要设计的滤波器其,,仍使用凯塞窗进行设计,根据式2-16可得,,然后通过式2-11和2-12计算得到和最小阶数N=30。根据这些参数进行,我们可以设计一个31阶半带滤波器,其频率响应如图2-8所示。对其仿真实现的方式与FIR滤波器相类似,也使用FILTER()函数来进行计算。图STYLEREF1\s2SEQ图\*ARABIC\s1831阶半带滤波器频率响应积分梳状滤波器积分梳状(CascadeIntegratorComb,CIC)滤波器又称为简单整系数梳状滤波器,在进行高速抽取时具有很高的效率。它结构简单,处理速度高,其最大的优点是其系数都为1,即不需要进行乘法运算,并且可以对高速数据流进行低通滤波和任意整数倍抽取因子的抽取。由于它的高速性,它通常被用在多级抽取的第一级[24,26]。当抽取因子为D时,单级CIC滤波器的冲激响应具有如下形式: (2-18)式中,D为CIC滤波器的阶数(等同于滤波器的抽取因子)。其传递函数为 (2-19)由上式看出,CIC滤波器由两部分组成,即积分器和微分器的级联。其实现示意图如图2-9所示,其中图a为CIC滤波器的原理结构,图b是其实际的等效结构。---DDa)b)图STYLEREF1\s2SEQ图\*ARABIC\s19单级CIC滤波器的实现 CIC滤波器的基础是完美的零极点抵消,要将其实现,要使用精确的积分算法。二进制补码就具有支持无误差算法的能力,系统中的运算是采用二进制补码的形式进行的。虽然累加器会有溢出的情况发生,但二进制补码系统的精确算法会自动地对积分器的溢出进行补偿,依然可以得到正确的输出结果[1]。单级CIC滤波器的旁瓣电平比较大,只比主瓣低13.46dB,这就意味着此低通滤波器的阻带衰减很差。为了降低旁瓣电平,可以采用多级CIC滤波器级联的办法来解决。Q个单级CIC滤波器级联的传递函数为: (2-20)图2-10所示为采用多级CIC滤波器级联实现D倍抽取的等效结构。--D-图STYLEREF1\s2SEQ图\*ARABIC\s110多级CIC滤波器的实现 多级级联能够增大阻带衰减,减小混叠影响,但同时也会造成带内平坦度变差。所以CIC滤波器的级联数是有限的,一般以5级为限。CIC滤波器由于其特殊的结构,实现极为容易。在用MATLAB进行仿真时,既可以根据其基本结构做移位加法,也可以把积分器和微分器分别看作参数A=[1,-1]、B=1和A=1、B=[1,-1]的滤波器,通过FILTER()函数来简单实现,再将其按图2-10级联就可以实现多级CIC滤波器。一个8倍抽取四级CIC滤波器的频率响应如图2-11所示。图STYLEREF1\s2SEQ图\*ARABIC\s111CIC滤波器的频率响应ISOP补偿滤波器从图2-11中可以看到,4级CIC滤波器的带内容差较大,,可见其带内波纹太大。所以一般选用内插二阶多项式滤波器ISOP与之级联进行补偿[10,25]。ISOP滤波器的系统传递函数如下: (2-21)其中,I是正整数,c是实数。它是二阶多项式 (2-22)内插后的变化形式。有对滤波器整形很有用的性质:当时,的频率响应为: (2-23)其在上具有单调性。它的直流增益总是1,并且频响变化的斜率取决于参数c。ISOP滤波器的整形特性也就是利用了这一性质。由频响的性质可知,的频响为 (2-24)其在区间是单调递增的,并且以为周期,其中I是插值率。可见在区间内,能够补偿CIC抽取滤波器的带内衰减。为了补偿级联CIC滤波器带内的衰减,在区间单调递增的宽度应该与输入带宽保持一致,因此可以得到。在设计ISOP滤波器时,只需要充分考虑I满足。如果设,其中k是正整数,则ISOP滤波器的频响在处有最小值。这样ISOP滤波器的每一个最小值的位置就与CIC滤波器的零点位置相同了。当,对于给定的抽取因子D,有。因此频响的斜率随着k值的增大和值的减小而变大,它的最大值和最小值分别为和1。ISOP滤波器的参数可用传统的滤波器设计方法来设计。对于每一个满足的k值,按照下列方法求出c:(1)给定最小的;(2)将它代入,,其中是给定的级联CIC抽取滤波器的系统传递函数,是待求的ISOP滤波器传输函数;(3)求出c值。由此,对应每个k按照以上步骤可得到使最小的对,也就得到了优化的ISOP滤波器。因为ISOP滤波器只需要一次乘法和两次加法运算,可见运算量是很小的,且对减小带通衰减非常有效,因此,它是补偿滤波器设计很好的选择。通过MATLAB可以很方便的编程找出最佳的对(具体程序见附录),可得其滤波器系数B=[1zeros(1,k*D-1)czeros(1,k*D-1)1]。由于我们在这里要设计的是抽取器,即前面的CIC滤波器已经做了抽取,所以我们这里选用的ISOP参数也应经过抽取,所以B=[1c1],然后用FILTER()函数进行对ISOP滤波器的仿真。对于上一小节所设计的8倍抽取器4级CIC滤波器,设对应的,补偿ISOP滤波器的为(1,-7.74),补偿后的效果如图2-12所示。图STYLEREF1\s2SEQ图\*ARABIC\s112ISOP补偿滤波器前后通带内波纹抽取器实现结构前一节介绍了本文将设计的数字滤波器,在此基础上,我们将进一步讨论,如何将滤波器和抽取单元有效的结合起来。并介绍两种最为常见且有用的抽取器结构。多相结构在第1节中介绍的抽取过程在实际的实现过程中并不科学,其抽取处理在低通滤波器的后面,也就是说对低通滤波器的处理速度有较高的要求,这不利于软件无线电中的实时处理。除了用直接法实现抽取外,还可以采用多相分解的方法来实现。多相分解是指将滤波器的转移函数分解成若干个不同相位的组,使用它可以在实现整数倍抽取时提高计算效率,适合实时处理。设抽取滤波器长度为N,并设N为抽取因子D的整数倍,即。则滤波器的转移函数为: (2-25)将冲激响应分为D组进行处理[1],最后可得: (2-26)其中 (2-27)式2-26即为数字滤波器的多项结构。可见,数字滤波器位于抽取器之后,即滤波在降速之后进行,同时每一支路滤波器系数由N个减少为N/D个,可以减小滤波运算的累积误差,提高运算精度。在这里,是的多相分量,式2-26表明,一个滤波器可以用几个支路的和来实现,每个支路的长度为原型滤波器长度的1/D,且各支路的系数是由原型滤波器系数隔D路抽取而成的。采用多相分解以后,一个带有抗混叠滤波器的抽取系统可由图2-13所示结构实现。DDDD图STYLEREF1\s2SEQ图\*ARABIC\s113抽取的多项分解用MATLAB对该结构进行仿真,我们可以直接选用在2.2.1节中设计的FIR滤波器作为原型滤波器,抽取因子根据其选为5。根据式2-27将所得到的滤波器参数分为5组,然后在输入数据数组前填入4个0来模拟延时的效果,再依次以第1至5个元素开始以5为间隔抽取数据,组成5个数组。最后运用FILTER()函数仿真支路滤波器,将5个输入数组通过对应的滤波器再相加,这样就完成了对单级多相结构的仿真。(具体程序见附录)仿真时,为了更清楚的看出抗混叠滤波器的效果,我们在输入信号的高频部分增加一部分频谱。其频域的效果如图2-14所示。图STYLEREF1\s2SEQ图\*ARABIC\s114多相抽取前后频谱对比多级抽取上一节的抽取原理比较简单,但在实际应用中,当A/D采样速率很高,且所需选择的基带信号的带宽很窄时,所要求的抽取因子D会很大。为了降低计算量,当抽取因子很大时,一般采用多级抽取来实现高倍数抽取[28],而不是将抽取一次完成。用多级抽取构成高倍数的抽取系统,一般有两种方案[1]:一种是基于最优化设计的方法,以每秒的乘法次数或存储量为准则,找出最佳的各级抽取因子,然后计算各级的滤波器系数;另一种方法是立足于使用抽取因子为2的抽取器,当抽取因子为2时,可利用半带滤波器实现。对于整数倍的抽取,设总的抽取因子为,故可以分成m级实现,第一级实现M倍抽取,一般采用简单的整系数梳状滤波器实现,因为梳状滤波器实现结构简单,适合采样速率比较大的情况。后面m-2级可采用半带滤波器分级实现,每一级实现2倍抽取。虽然梳状滤波器和半带滤波器实现起来比较简单,但他们的频谱特性比较差,因此一般会在最后用FIR滤波器来进行补偿。如果M值比较大,也可以把M分解为两个整数相乘(),其中由CIC滤波器抽取,由FIR滤波器抽取实现。本论文的设计主要依据多级结构来进行,具体的设计和仿真将在下一节详细讨论。整体系统设计及仿真在本章前面部分研究的基础上,将各模块按多级级联的结构综合起来,我们提出了本设计将采用并将其硬件实现的抽取器模型。如图2-15所示。输出输出序列输入序列4级8倍抽取CIC滤波器HB滤波器ISOP补偿滤波器FIR滤波器HB滤波器图STYLEREF1\s2SEQ图\*ARABIC\s11532倍抽取滤波器组总体设计要求在这里为了参数计算以及和后续硬件实现的无缝过渡,我们首先要确定输入信号的类型。由于后面使用到的硬件平台所得提供的晶振最高频率为32.768MHz,我们规定输入信号的采样频率,基带信号为随机序列的2FSK调制,其中,,码元周期。由我们规定的输入信号序列可得,其第一零点带宽约为[11]: (2-28)可计算得,为了尽量使原始信号的频谱特征得以保留,我们要保证通带带宽内的频谱尽量不失真。并且规定整体系统设计指标:带内波动小于0.6dB,带外抑制大于60dB。可初步拟定CIC滤波器的通带波纹为0.5dB,两个半带滤波器的通带波纹均为0.05dB,他们的阻带衰减均为60dB。滤波器设计第一级CIC滤波器为4级16倍抽取,与我们在2.2.3节中仿真的结构相同,故可以在这里直接使用该程序。因而后续跟随的ISOP补偿滤波器也可直接选用2.2.4节中设计的参数。经过前两个模块后,序列采样频率降为原来的1/8为4.096MHz,因此第一级半带滤波器的归一化通带截止频率,根据式2-16可以计算得归一化阻带起始频率,则可得到第一级半带滤波器的过渡带宽。然后使用凯塞窗设计,根据式2-11,由可得系数,然后通过式2-12可计算出所需最小滤波器阶数N=13。选择N=15,使用FDATOOL进行设计,可得到滤波器的系数和频率响应,如图2-16所示。图STYLEREF1\s2SEQ图\*ARABIC\s116第一级HB滤波器频率响应下面设计第二级半带滤波器,此时序列的采样频率为2.048MHz,所以其归一化通带截止频率,同样通过式2-16来计算,归一化阻带起始频率,可得。同样使用凯塞窗设计,并参考式2-11,可得最小阶数为30。选取N=31进行设计,可以直接使用我们在2.2.2节已经设计的HB滤波器,其频率响应见图2-8。两个半带滤波器的具体系数见表2-1。在最后,我们需要一个FIR滤波器来完成滤波整形的功能。在通过第二级HB滤波器后,采样率1.024MHz,我们关心的通带截止为192KHz,这里设阻带起始频率为384KHz。我们仍然使用FDATOOL来进行设计,不过这次我们确定滤波器阶数时,交给FDATOOL来完成,输入采样率、通带截止频率、阻带起始频率后,选择最小化阶数,然后可以得到所需的FIR滤波器的系数。具体系数见表2-2表STYLEREF1\s2SEQ表\*ARABIC\s11两级半带滤波器系数第一级HB滤波器系数第二级HB滤波器系数1-0.1-0.170.31514202018030.30.19-0.40402005-0.5-0.210.606022070.3057770.014723-0.80.58024090.305779-0.250.014710010026011-0.110.27-0.120120280130.13-0.2900.150.3151431-0.160.5表STYLEREF1\s2SEQ表\*ARABIC\s12FIR滤波器系数1-0.20.30.4-0.5-0.60.7-0.8-0.90.100.110.120.13-0.14-0.150.16-0.17-0.180.190.20-0.仿真实现根据确定的结构和系数,我们可以在MATLAB中用FILTER()函数来实现各滤波器,让代表数据流的数组依次通过各模块进行运算,便可得到32倍抽取的结果(具体程序见附录)。为了更好地测试该系统的性能,我们在输入信号的高频部分加上了一些干扰分量。具体实现的方法是:用两个更高的频率载波调制相同数字序列,然后再与基带信号相加即可。同时模拟实际情况,附加了一个高斯随机白噪声。所以最终输入的测试信号比较复杂,其时域波形及频谱[22]见图2-17所示。基带信号和输出信号的时域对比如图2-18所示,在图2-19中显示了基带信号和输出信号的频谱比较。图STYLEREF1\s2SEQ图\*ARABIC\s117测试信号的时域波形及频谱图STYLEREF1\s2SEQ图\*ARABIC\s118基带信号和输出信号的时域波形图STYLEREF1\s2SEQ图\*ARABIC\s119基带信号和输出信号的频谱图STYLEREF1\s2SEQ图\*ARABIC\s120通过CIC滤波器后的时域波形和频谱观察输出信号与基带信号的时域对比,可以发现输出信号有一个的相位变化,这是ISOP补偿滤波器所带来的影响。但是,输出信号和基带信号解调后的数字信号是相同的。通过对图2-17和2-19中测试信号和输出信号的频谱对比,可以发现,高频部分的干扰分量被滤出了,未对我们所关心的通带部分造成影响。图2-20显示的是CIC抽取滤波器后经ISOP滤波器补偿的时域和频域,可以看出在这里最高频率的干扰分量已经基本被滤除,而另一干扰分量在后续的HB滤波器中将被滤除。通过以上对比,可以看出该抽取器表现良好。本章小结本章对抽取器以及所设计的数字滤波器进行了分析和讨论[31],并用MATLAB分别对其进行实现和仿真[27],最后选用所需的滤波器和结构,提出了本设计将采用的最终抽取器结构,并使用MATLAB对其进行仿真。抽取器VHDL语言实现在前一章,我们已经给出了基本原理的介绍,提出了我们将采用的具体抽取器结构,并且MATLAB对其进行了仿真。我们将在此基础上,运用VHDL语言将其实现[17,19]。在具体模块的划分上,我们参考图2-15所示的结构,由于需要一个输入信号,我们将在最前端增加一个信号发生模块。所以在这一章,我们所要做的工作是运用原理图顶层设计方式[13],分别设计信号发生模块、CIC滤波器模块、ISOP滤波器模块、第一和第二级HB滤波器模块和最后的FIR滤波器模块,然后再将各模块连接后测试整体的表现。在这里,我们所选用的芯片为Altera公司ACEX1K系列的EP1K30TC144-3,所用的晶振频率为32.768MHz,即最高的时钟频率为32.768MHz,DA芯片为DAC0832。信号发生模块我们这里要产生的信号是2FSK调制的伪随机序列,其中,,码元周期。这里,我们用一个10阶M序列来产生伪随机序列,根据M序列的算法,我们可以较容易的实现伪随机序列的产生,核心程序如下:mout<=a(0);b<=a(0)xora(9);c<=not(a(1)ora(2)ora(3)ora(4)ora(5)ora(6)ora(7)ora(8)ora(9));a(8downto0)<=a(9downto1);a(9)<=bxorc;其中mout为输出的M序列,a,b,c为中间运算使用的寄存器。为了使码元周期,我们要对总时钟32.768MHz进行512分频来控制该M序列模块输出。分频器的设计较为简单,计数到256将输出取反即可[18]。使用2FSK对伪随机序列进行调制,可以使用FSK的基本概念来实现,当码元为0时,选择的正弦波输出,码元为1时,选择正弦波输出。而使用FPGA来产生正弦波的方法是,用N个点对一个周期正弦波进行采样,将采样点存储在ROM中,然后按时钟依次循环输出各点。这里时钟频率为32.768MHz,所以、分别为256个点和512个点每周期。将这些采样值存入ROM,按M序列选择所需要的正弦波,即可完成信号发生的功能。具体设计框图见图3-1。图STYLEREF1\s3SEQ图\*ARABIC\s11信号发生模块设计框图 其中clkdiv512模块用来512分频;mxl模块用于产生M序列;encode模块根据mxl模块产生的0或1选择对应频率的正弦波,即输出对应的地址控制后面ROM模块的输出;lpm_rom11模块是QuartusII自带的标准库可以直接调用[16],这里用来存储正弦波的采样值,高512位地址放128KHz正弦波的采样值,低512位地址存放64KHz正弦波的采样值,其配置文件为sin.mif,为了与日后的A/D模块连用,这里存储的数据格式为无符号数。(具体数据计算见附录)图STYLEREF1\s3SEQ图\*ARABIC\s12信号发生模块仿真图输入端Clk为总时钟的输入,即32.768MHz;Reset为复位信号输入,这里设置为低电平复位;Din[7..0]为低频2FSK的调制信号序列,宽度为8位,采样频率为32.768MHz,也即我们要对其进行抽取的信号。仿真图见图3-2所示。CIC滤波器模块CIC滤波器的设计可以按其原理来分模块解决,如图2-10所示。它由工作在频率32.768MHz的4个积分器和工作在4.096MHz的4个微分器的流水线组成,积分器采用累加器实现,微分器采用全减器实现。他们中间以一个16倍的抽取结构相连接。积分器在运算过程中发生数据溢出是不可避免的,但当设计CIC滤波器时满足下面两个条件时数据的溢出并不会影响滤波的正确性[12]:(1)所采用的数据编码具有如下特点:当从高端溢出时返回到低端,从低端溢出时返回到高端,其实质是对数据求模。(2)寄存器所存数值的大于、等于整个滤波器最后输出的数值范围。第一个条件采用二进制补码形式实现,前面已经介绍过。下面分析如何才能满足第二个条件。而N级CIC抽取器的最大幅度增益为: (3-1)由于DM的值很大,自然N级CIC滤波器级联的的值也很大,所以在设计过程中为了防止数据溢出,必须相应的扩大数据的位数,以减少误差。如果为输入的位数,那么最大内部总位宽: (3-2)其中为最大动态范围。为防止数据溢出,设计中应该把积分部分和梳状部分的寄存器位宽都扩展到位。在本设计中D=8,M=1,N=4,可得所需的,故各模块的处理的数据宽度都必须扩展到20位才行。积分器设计原理如下:设置一个寄存器用于寄存输出的和,每次时钟触发时,将该寄存器内的值与输入的值相加输出,并将该值存入寄存器用于下次时钟触发时的计算。关键程序如下:temp:=temp+cin;cout<=temp;其中temp为中间寄存器,cin为输入数据,cout为输出数据。微分器的原理与积分器类似:设置一个寄存器用于寄存上次时钟触发时的输入,每次时钟触发时,将当前输入值减去寄存器中的值后输出,并将当前输入值存入寄存器用于下次时钟触发时使用。核心程序如下:cout<=cin-temp;temp:=cin;其中temp为中间寄存器,cin为输入数据,cout为输出数据。而抽取单元的实现也比较容易,用一个3位的计数器计数,每到8将输入数据输出到输出序列中,计数器自动清零。其关键程序如下:ifcount="000"thencout<=cin;endif;count:=count+1;其中count为4位寄存器,用于计数,cin为输入数据,cout为输出数据。因为积分器与微分器工作在不同的频率下,所以这里还需要一个8倍分频器,其具体实现方法和前面的512倍分频类似,只是计数值更改为4即可。由于之前信号发生模块产生的序列是无符号数,这样就还需要将其转换为有符号数,以便于后面进行二进制补码运算,同时还需要将8位的数据扩展成宽度为24位的数据。其具体实现方法只需要将输入数据的最高位取反即可,相当于将原采样值减去128。具体程序为:cout(19downto7)<=(others=>notcin(7));cout(6downto0)<=cin(6downto0);其中cin为输入数据,cout为输出数据。而由于在积分器和微分器运算过程中一直使用20位数据宽度,而在后续的模块中不需要这么高的数据宽度,所以在整个模块的最后我们将20位数据转换为12位数据宽度。具体的方法是,直接保留20位数据的高12位,舍去低8位,相当于是对输出数据除以了256。最终将各模块按图2-10连接后,其设计框图如图3-3所示:图STYLEREF1\s3SEQ图\*ARABIC\s13CIC滤波器模块设计理框图图中,code模块负责将7位数据扩展到20位,integratior模块是积分器,differentor模块是微分器,decimatior模块用来实现8倍数据抽取,clkdiv模块将32.768MHz时钟8分频输出4.096MHz的时钟,输出时直接取20位数据Data的高12位从而将数据宽度截短为12位。当前一节所产生的信号,通过该模块之后,其仿真波形显示在图3-4中。可以看到输出信号因为是时序仿真,在序列值变化时,由于器件速度问题,会有极短时间的不稳定的状态,这就导致了图中所示的毛刺。后面为了提高仿真速度,以及先从功能上把握各模块,将使用功能仿真。图STYLEREF1\s3SEQ图\*ARABIC\s14CIC滤波器模块仿真图ISOP补偿滤波器模块ISOP模块紧接着CIC滤波器模块,用于补偿CIC滤波器通带波纹过大,根据ISOP的系统传递函数(式2-21)可以看出其实现也比较简单。根据在上一章求得参数(1,-7.74),先做一个寄存3个12位数据的寄存器,然后将第2个数据的输出与乘法器相连,乘以系数c,然后所得结果与寄存器第1个和第3个数据输出相加。这里有几点要注意的地方:首先系数c带小数位,要转化为二进制表示,这里由于我们使用12位数据宽度,所以小数点定在第8位,即最高位为符号位,10至8位为整数位,7至0位为小数位,经过换算-7.74转换为-1981。其次,乘积结果和另两个数相加时,他们的数据宽度不同,要先把12位的两个数扩展成24位,然后与乘积结果相加。之后,由于后面HB滤波器将使用8位的数据宽度,要再把24位的加法和截短为8位。最后,整个系统工作在抽取以后的频率上,即4.096MHz,所选用的时钟是经过8倍分频的时钟。图STYLEREF1\s3SEQ图\*ARABIC\s15ISOP补偿滤波器模块设计框图其具体的设计框图如3-5所示。其中,reg3为bits的寄存器,lpm_mult1为QuartusII标准元件库中所带的乘法器,addthree模块将输入的三个数相加,输出时将24位的和截短为8位。第一级HB滤波器模块半带滤波器的实现结构与前一小节ISOP滤波器有一点相似,由于其一半系数为0,为了减少寄存器个数,这里我们采用多相结构来设计HB滤波器。图STYLEREF1\s3SEQ图\*ARABIC\s16第一级HB滤波器设计框图根据2.3.1节讨论可知,HB滤波器可以分解为两条支路,由于其系数的特性,一条支路只有一个系数0.5,这样可以大大减少计算量并且节约逻辑门的消耗。由于系数的对称性,也就是说一个长度为N的滤波器,第1个系数和第N个系数是相同的,我们可以进一步减少乘法次数,先把第1个输入数据与第N个数据相加,然后再乘以第1个系数,这样能够减少一半的乘法运算。而乘累加单元可以按照上一节ISOP滤波器的实现方式来完成。由于滤波器系数小于等于0.5,所以小数点设在第6位,最高位为符号位。且根据表2-1,系数-0.转换后为0,则可以再省去一个乘法器。另三个系数转化后,用有符号数表示分别为:3、-9、39,而0.5转化为64。最后按MATLAB对多相结构的仿真,我们可以用把输入信号序列,轮流输入到两路来完成标准结构中两个2倍抽取器和一个延时器的效果。具体实现的设计框图如图3-6所示。在图中,decimation2是2倍抽取模块,同时把数据分为两条支路,clkdiv2是两倍分频模块,将4.096MHz时钟分为2.048MHz,premult模块负责将乘以相同系数的两个序列值先相加再输出,reg4是bits的寄存器,lpm_mult为乘法器,最后由addall负责将所得到的4个乘积相加,并截短为8位数据输出。将信号发生模块产生的信号通过该模块进行测试,仿真后的波形图在如图3-7所示。图STYLEREF1\s3SEQ图\*ARABIC\s17第一级HB滤波器的仿真图第二级HB滤波器模块虽然第二级滤波器也可以按前一节介绍的方法设计,但是由于系数较多,所需要的乘法器也就更多,结构也将更加复杂。所以,在这里我们介绍另一种实现结构,不仅能够完全避免使用乘法器,而且还能充分利用器件所带的资源。首先简单介绍一下这一种新的结构:分布算数式结构(DA结构)。分布算数式滤波器[1]的设计完全通过Slice资源中的查找表和触发器等来实现,没有使用硬件乘法器和布莱克曼资源,所以对于Slice资源占用相对较多。这种设计方法是一项重要的FPGA技术,广泛应用在计算乘积和(SumofProduct,SOP)之中。简单来说,因为滤波器的系数是固定的,所以可以预先将一个系数与所有可能值的乘积,因为输入数据是8位二进制数据,所以每一个系数有256个可能乘积值。将它按输入数据作为地址,存入ROM中,这样输入数据乘以该系数的乘法就变成了查表操作。 图STYLEREF1\s3SEQ图\*ARABIC\s18第二级HB滤波器设计框图但是这里我们所选用的FPGA芯片ROM容量和ROM控制器数量都有限。在产生输入信号的时候我们已经使用了8192bits的ROM,该FPGA芯片总ROM数为24576bits,还剩余16384bits可用。按每个系数需要bits,还可以用于8个系数,除去0.5的话,我们设计的第二级HB滤波器非零系数刚好为8个。但是该FPGA的ROM控制器数只有6个,我们已经使用了一个,所以剩下的8个系数,我们要每两个放在一片ROM里。这样一来,我们必须一个滤波周期内查找两次ROM,所以我们要在ROM前增加一个模块,分别在前半周期和后半周期查询ROM,然后完成相加输出。因此,该模块工作在2倍分频之前的频率下,即1.024MHz。使用C++编程(详见附录),我们可以很容易的将8个系数的表格运算出,并按.mif文件的格式输出到文件。最后只需要要将.mif文件载入lpm_rom标准库就可使用了。从总体上,看它和第一级HB滤波器很相似,都使用了多相结构,而且系数0.5的那个分支与上一节的实现方式完全相同。具体实现的设计框图见图3-8所示。和第一级HB滤波器很相似,图中decimation2是2倍抽取模块,同时把数据分为两条支路。reg8是bits的寄存器,lpm_mult为乘法器。这里有所区别的首先是premult4模块,它主要负责将乘以相同系数的两个序列值先相加再输出,值得注意的是,该模块所接的时钟是分频以前的,即工作在2.048MHz。所以它还有另一个功能,就是在分频后时钟的前半周期和后半周,分别输出两个值。为了达到这个目的,该模块须对时钟进行2倍计数,这样它又有了第三个功能,即2倍分频,tout输出的就是两倍分频后的时钟1.024MHz。而且每个lpm_rom模块可查询范围为512bits,储存了两个系数的DA表。因此,addall4需要做的工作也有所变化,它也工作在1.024MHz下,在一个分频后的时钟周期里,它必须从每个rom里读取两次数据,最后将读取的8个数据相加输出。如用信号发生模块产生的信号来测试该模块,经过仿真可得到其输出波形图,如图3-9所示。图STYLEREF1\s3SEQ图\*ARABIC\s19第二级HB滤波器的仿真图FIR滤波器模块由于半带滤波器可以说是FIR滤波器的特例,而在设计第二级HB滤波器时芯片所带的ROM已经基本被用完,所以我们在实现FIR滤波器时,将按照第一级HB滤波器的结构进行设计。具体设计原理框图见图3-10所示。由于很多系数很小,转换为二进制表示时为0,所以在设计时可以将其省略以节省器件的消耗。当然,这样也会一定程度的误差。图STYLEREF1\s3SEQ图\*ARABIC\s110FIR滤波器设计框图 由图中可见,用两片之前设计过的bits的寄存器来寄存数据序列,然后再将相同系数的采样值相加以节约乘法器。由于其中两个系数值为-1,直接用减法器来代替乘法器。最后再把所有数据相加,再截短输出即可。总体设计在上面已经将个模块设计完成的基础上,我们只需要按照先前确定的结构(图2-15),按顺序连接个模块即可。对每一个模块生成一个符号框图,然后在顶层的设计框图中,将其连接,这样就能完成最后的总体设计,如图3-10所示。图STYLEREF1\s3SEQ图\*ARABIC\s111顶层框图 这样的设计方法简单明了,同时具有面向对象的性质。这里,可以看到本设计较为复杂,模块较多,但选用的FPGA芯片逻辑单元有限,而QuartusII提供了强大分析和综合能力,如果将图3-10中各模块的具体实现,即各模块的具体原理框图直接在同一层进行连接作为顶层文件(详见附录),所消耗的逻辑单元数将会被优化,其实现所需数量将会大大减少。在将各模块连接的时候,需要注意的一点是:由于在HB滤波器模块中作了将两个输入值相加的操作,所以输入HB滤波器的数据不能超过的范围,所以在必要时,HB滤波器前须加一个衰减器,即简单的将数据右移一位,相当于将数据除以2。而数据在经过多个模块后,其功率势必下降,所以在有些模块之后需要增加一个增益的模块,即简单的将数据左移一位,相当于乘以2。而由于硬件调试所使用的D/A芯片接受的数据格式是无符号数,为了观察波形,我们在整个模块的输出处还需要将有符号数转为无符号数,即只需将输出数据减去128或者首位取反均可。对连接后的整体系统进行测试仿真,可以得到图3-11所示结果,Dout_line为线性显示的结果,Dout_Step为阶梯显示的结果。可以清楚看到32倍抽取器抽取后在时域的效果。图STYLEREF1\s3SEQ图\*ARABIC\s112基带信号输入时仿真图这里,为了和MATLAB中的测试信号相对应,我们将信号发生模块所用ROM中的.mif文件内容修改为图2-18所示信号的抽样点,以便更好的测试这里设计的抽取器的实际性能和表现。所得到的仿真结果如图3-13所示。图STYLEREF1\s3SEQ图\*ARABIC\s113测试信号输入时仿真图可以清楚地看到,尽管输入信号含有了高频的分量作为干扰,但抽取器的滤波器成功的保证了其通带信号未被混叠。所关心的信号被成功地得到,并且采样点数有效的下降为原来的1/32。而且,对比图3-12和图3-13,可以发现它们十分相似,这证明抽取器表现良好,其结果也是符合上一章的MATLAB仿真的。这里使用的仿真方式是功能仿真,速度较快,能直观的看出整个系统的功能作用,但是与实际情况有一定差别。如果使用较符合实际的时序仿真,会发现在有些相邻数据之间会有尖锐的毛刺,即有竞争与冒险发生,但对整体的功能没有太大影响。而整个系统的实际性能还要等到下一章硬件调试时才能得到最终结果。经过各模块调试仿真,然后再到整体的调试仿真,验证无误,该抽取器的VHDL设计就完成了。本章小结本章延续上一章的设计,根据MATLAB仿真结果和确定的抽取器结构,使用VHDL语言将其具体实现。采用了模块化的设计方式,对每一模块进行了测试仿真。在最后,将各模块组合后,对整体系统也进行了仿真测试,效果良好,与MATLAB仿真结果吻合。另外,整个系统共消耗逻辑单元1663个,占芯片总数的96%,共消耗22528bits的存储器容量,占芯片总数的92%,共使用了10个引脚,占总数的10%。可见,本设计充分利用了所给芯片的资源,尽可能地使设计趋于完美。抽取器硬件调试完成了MATLAB调试和VHDL语言编写,最后一步就是在硬件上实现本文所设计的抽取器。由于FPGA的实现的灵活性,使得从VHDL程序到硬件实现的过程十分简单快捷。硬件平台介绍进行硬件调试所使用的实验箱是:浙江工业大学通信与信息系统研究所和杭州天箭信息技术开发有限公司合作开发的可编程通信系统教学实验箱TJ-FPGA-01,如图4-1所示。其主芯片为ALTERAEP1K30TC144-3,A/D模块为MAXIM公司的MX7821,D/A模块为DAC0832,它带有下载口可再现编程配置FPGA芯片数据,8个LED指示灯,2组16个拨码开关,4个按键以及32个可编程输入输出引脚。图STYLEREF1\s4SEQ图\*ARABIC\s11实验箱除了实验箱以外,还需要使用的仪器有:可编程数字电源(MOTEHLPS-305),用于给实验箱提供电源。示波器(TektronixTDS3032),可以直接观测信号发生模块产生的2FSK调制的信号波形,以及最后经过抽取器之后的信号波形,以供对比。频谱分析仪(AgilentE4404B),可以查看输入输出信号的频谱,从频域对本文设计的抽取器进行评价。调试过程为了将程序写入FPGA中,我们要进行管脚锁定。首先要根据信号箱说明书,将系统时钟和复位键锁定到正确的管脚,即引脚55和46。然后把需观察波形的信号输出到A/D转换器所在的引脚,即引脚68、67、65、64、63、62、60、59,在这里要注意高低位的对应。完成引脚锁定后,即可以把程序烧入FPGA中。按照实验箱使用说明,用并行数据线将信号箱与计算机的LPT1接口相连接,接通信号箱的电源,Power灯亮起后,然后就可以通过QuartusII软件将编译好的工程写入FPGA芯片了。点击QuartusII软件Programmer按钮,然后在硬件设置(HardwareSetup)中选择ByteBlaster[LPT1],模式(Mode)选择为被动连续(PassiveSerial),可以看到本工程的.sof文件已经准备好写入了。按下Start进行写入,等待完成信息后,我们就可以开始在信号箱上进行测试了。首先用信号发生模块产生的我们关心的低频2FSK调制信号输出到D/A转换器所在引脚,通过示波器可以看到其波形。但这里有一点需要注意:信号箱所采用的D/A芯片为DAC0832,其电流建立时间为,即它所能够接受的最高数据速率为1MHz。所以,为了完整地显示输入信号,我们只有把时钟信号32分频后再输入信号发生模块。也就是说,我们在示波器上看到的信号的频率是真实频率的1/32。其波形如图4-2所示。通过频谱仪,可以测得其频谱,但由于频谱仪可测量的频率下限为9KHz,所以这里我们将真实信号序列直接输入到D/A模块,用此输出信号来进行测量,即此频谱其实是已经被直接32倍抽取后信号的频谱,如图4-3所示,该图可用来与后面整体系统的输出进行对比。在加上高频的分量之后,所得到的测试信号波形如图4-4所示。其频谱显示在图4-5中。当然,这两张图的频率也是真实系统频率的1/32。图STYLEREF1\s4SEQ图\*ARABIC\s12基带信号(低频2FSK调制)图STYLEREF1\s4SEQ图\*ARABIC\s13基带信号频谱图(线性幅度)图STYLEREF1\s4SEQ图\*ARABIC\s14测试信号波形图STYLEREF1\s4SEQ图\*ARABIC\s15测试信号频谱(线性幅度)由于频谱分析仪的频率测量范围是9KHz至6.7GHz,所以基带信号的频谱在频谱分析仪上未显示出来。但可以看到,高频的两个干扰频率的中心在51.2KHz和64KHz左右,即实际频率在1.6384MHz和2.048MHz左右。将整个抽取器系统写入FPGA芯片后,可以得到最终的输出结果,即可以看到测试信号(图4-4)通过抽取器后的输出波形,见图4-6,其频谱显示在图4-7中。为了更好的看出各模块具体工作的如何,在这里又测量了32倍抽取后未通过FIR滤波器时的波形和频谱(如图4-8和4-9所示),以及ISOP补偿滤波器之后的信号波形和频谱(如图4-10和4-11所示)。分别在设计模块中,将所要观测的数据输出到D/A芯片的输入引脚,即可依次测量要观测的信号波形和频谱。这里需要注意的是,由于中间运算时使用的数据格式是有符号数,而D/A芯片接受的是无符号数,所以输出之前要先接一个格式转换的模块,否则得到的信号将无法辨认。图STYLEREF1\s4SEQ图\*ARABIC\s16输出结果的波形图STYLEREF1\s4SEQ图\*ARABIC\s17输出结果的频谱(线性幅度)图STYLEREF1\s4SEQ图\*ARABIC\s18未通过FIR滤波器时信号的波形图STYLEREF1\s4SEQ图\*ARABIC\s19未通过FIR滤波器时信号的频谱(线性幅度)图STYLEREF1\s4SEQ图\*ARABIC\s110ISOP滤波器后信号的波形图STYLEREF1\s4SEQ图\*ARABIC\s111ISOP滤波器后信号的频谱(线性幅度)结果分析可以看到,图4-4显示的测试信号波形与前两章设计的测试信号是相同的,而最后的输出信号的波形也与MATLAB仿真和QuartusII波形仿真结果基本吻合。可以初步确定,整个系统设计是成功的。再将图4-2与图4-6进行对比,可以看到输出信号的波形基本与我们要得到的信号波形相同,但采样点数已经大大下降了。虽然输出信号还有些不平滑,但考虑到一个正弦周期最少只有8个采样点数,结果已经十分令人满意了。根据图4-3和图4-7显示的频谱来看,除了功率上的衰减以外,输出信号与我们想要得到的信号的频谱也基本相同。对比输入的测试信号的频谱(图4-5)和输出信号的频谱(图4-7),可以清楚地看到,高频的干扰分量已经基本被滤除了。通过后面测量的四张图片,可以更好的看到抽取器系统中的各个模块在抽取滤波的过程中起到了什么作用。先来看未通过最后一级,即FIR滤波器时的信号波形(图4-8),可以明显地看到波形有高频的波动。其频谱(图4-9)也证实了这一点,高频部分还有一部分干扰分量残留。相比之下,输出信号的高频部分的干扰就大大减弱了。可以看出,最后一级的FIR滤波器在滤波整形上发挥了作用。图4-10和图4-11显示的是通过CIC滤波器和ISOP补偿滤波器后的波形及其频谱。可以看到信号的高频波动已经不如输入的测试信号那么剧烈了,而且采样率也已经下降了8倍。但可以看到,高频的分量虽然减弱,但依然还存在着,与两级HB滤波器后输出的信号对比可以证明,两级HB滤波器在抽取的过程中,还滤除了剩余的高频干扰分量。最后测试的实际结果与MATLAB以及QuartusII仿真的结果相近似,说明了理论研究以及仿真测试对实际操作的指导意义。而在硬件测试中,该抽取器系统表现良好。本章小结在前两章的基础上,本章介绍了在硬件上具体实现和调试的过程。得到了系统实际测试的结果,并对这些结果作出了分析和评价。总结与展望全文对抽取器作了系统而全面的分析,并基于FPGA技术加以实现。在这个过程中可以看出,要综合考虑信号以及CIC、HB和FIR三种滤波器,才能设计出最优数字信道。这里有几点需要注意:一是由于硬件制约,各滤波器运算速率是一定的,且随着抽取因子和滤波器阶数而变化,所以各滤波器的输入数据速率是有限制的;二是FPGA芯片的选择对具体系统的实现有着制约作用,各滤波器的器件消耗也随着抽取因子和滤波器阶数而变化,需要寻找性能和消耗的最佳平衡点;三是由于各滤波器特性不同也势必对抽取因子产生一定的制约。本文针对抽取滤波器的特点,用多种结构(多相和级联)、多种实现方式(乘累加和DA方式)实现了CIC、HB、FIR滤波器,并将其结合组成了最终的抽取器系统。在硬件测试中,各模块工作正常,该系统表现出了良好的性能。其已不仅仅有着研究价值,而且具备了一定的实用性。设计过程中使用的VHDL语言是标准化硬件描述语言,其自上而下、模块化的设计方法,有利于系统的分工合作以提高工作效率。同时,已编辑的模块可以被另一模块引用,达到了资源共享的目的,简化了设计步骤。也就是说,本文设计的抽取器,也可以作为一个大模块,应用于日后的软件无线电设计。可见,FPGA的特性很好的满足了软件无线电对灵活性的要求,运用其来实现抽取器是一个很好的选择。这是一次将FPGA技术应用于软件无线电的成功尝试,必定为FPGA技术与其他概念相结合,或其他技术应用于软件无线电带来启示。本文所做的工作,具有巨大的现实意义的同时,也为日后的进一步研究打下了基础。文中所涉及的一系列从理论到实际的过程与步骤,又有着较大的参考价值与指导意义。希望本文能抛砖引玉,为日后的更多研究架设桥梁。参考文献[1] 姜宇柏,游思晴等.软件无线电原理与工程应用[M].北京:机械工业出版社,2006.[2] 陈建英.软件无线电系统的研究与实现[D].哈尔滨工程大学,2004.[3] 相文松.基于FPGA的窄带抽取滤波器的设计和实现[D]哈尔滨工业大学,2004.[4] 李惠光.抽取问题的初步研究[J].北京重型机械学院学报,1997,21(4):308-313.[5] 丁玉美,高西全.数字信号处理[M].第二版.西安:西安电子科技大学出版社.2000.[6] S.K.Mitra,J.F.Kaiser.HandbookforDigitalSignalProcessing[M].Wiley.1993.[7] 谷萩隆嗣.数字滤波器与信号处理[M].北京:科学出版社.2003.[8] R.W.Hamming.DigitalFilters[M].Prenice-Hall.1977.[9] D.F.Elliot.HandbookofDigitalSignalProcessing:EngineeringApplications[M].AcademicPress.1987.[10] 李翔,万栋义.数字下变频中抽取技术研究[J].电子科技大学学报.2006,35(4):471-473.[11]樊昌信,张甫翊,徐炳祥,吴成柯.通信原理[M].第五版.北京:国防工业出版社.2001.[12]朱国军,张浩,张志军.基于FPGA的CIC滤波器实现.电子科技,2006,11:9-12.[13]潘松,黄继业.EDA技术实用教程[M].第二版.北京:科学出版社.2005.[14]黄大卫.数字滤波器[M].北京:上海铁道学院.1991.[15]MiroslavD.Lutovac,DejanV.Tosic

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论