




已阅读5页,还剩71页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于FPGA的16QAM调制解调电路设计毕业论文目录前言1第一章概述3第一节课题研究背景及意义3第二节QAM技术现状与发展3第三节本文内容和结构5第四节本章小结5第二章 QAM调制解调整体设计6第一节 16QAM调制的方法和原理6第二节 16QAM解调方法和原理8第三节本章小结9第三章QAM调制器分模块设计10第一节 FPGA概述10第二节串/并转换模块12第三节 DDS载波和线性加法器模块13第四节差分编码和星座映射模块22第五节时钟分频模块25第六节本章小结27第四章QAM解调器分模块设计28第一节解调器顶层模块设计28第三节DDS载波恢复模块设计33第四节乘法器模块设计37第四节低通滤波器模块设计38第五节采样判决模块设计39第六节电平转换模块设计41第七节本章小结41第五章调制解调系统的仿真42第一节仿真参数设置42第二节仿真结果42一、16QAM调制器的仿真结果42二、16QAM解制器的仿真结果46第三节仿真结果分析49第五节本章小结49结论51致谢52参考文献53附录54一、英文原文54二、英文翻译61三、源程序67四、其他73II前言在许多领域现场可编程门阵列(FPGA)芯片都有广泛的应用,尤其是在数字通信领域当中,FPGA极强的实时性和并行处理能力能够完成对信号的实时处理。传统的观点通常认为在大规模的数字系统开发中应用FPGA功耗过大且过于昂贵,一般用来创建原型比较好。现在,DSP在成本和功耗上都己经被FPGA超越了。例如Xilinx公司的Spartan-3A DSP系列,它移入了高端Virtex 5系列的DSP性能,而卖价最高才20美分。而TI公司的 C64X系列和AD公司的Blackfm系列处理器,其价格一般都在530美分之间。从根本上讲DSP只是适合于串行算法,通常多处理器系统是非常昂贵的,而且也仅仅只适合粗粒度的并行运算;但是FPGA可以在片内实现细粒度从而完成高度并行的运算。DSP和FPGA两者各有所长,实现时,一般都是配合使用,通常是利用FPGA的可重配置和高并行度作FIR、FFT等的协处理器,而用DSP 作主处理器。新的趋势己经表明,再与主流DSP的竞争当中,FPGA已经能够不用受到价格的约束。此外,FPGA拥有比DSP更加强大的计算能力。例如,20美分的Spartan-3 ADSP性能可高达每秒200亿条乘法累加操作(GMACs),同样单价30 美分的600MHz C64x DSP,其每秒的累加操作仅仅是25亿条,前者在性能上比后者高了一个数量级。数字通信系统中有许多关键技术,如软件无线电、CDMA技术、多用户检测等技术都需要依靠髙性能、高速的并行处理器来实现。随着近些年来这些应用的日益多样化,FPGA已经演变成了构件内核,而不再是传统意义上的一块独立芯片。现在,已经可以把FPGA和DSP核集成在一起,FPGA芯片在一些具体方面的应用也随之得到了极大地推动,如用于基带调制解调、实现语音合成、系统控制以及纠错编码等功能;用来实现定时的恢复、基带调制解调功能、频率控制和自动增益、脉冲整形、符号检测和匹配滤波器等。特别是应用在调制解调器中,需要大量的复杂数学运算,同时对调制解调器的重量、功耗和大小都特别关注,这就对FPGA提出了更高的要求,随着FPGA速度的提高调制解调器的速度也不断提高。FPGA在数字通信领域的应用,极大地推动了SOC的发展,同时也让现代通信系统的性能得到了大大的改善。对于当今的数字通信设备,一片FPGA就己经具备了系统级的处理能力。比如,在现在的第三代无线通信中,单片FPGA不仅能完成信道和信源方面的物理层处理操作,同时还能对高层信令进行处理和控制,而对信令的操作则更多是通过FPGA当中内嵌的软核CPU和硬核CPU来完成的。随着无线通信的带宽更多的向CDMA等标准进行转移,以及高速数据传送网络对XDSL的要求越来越高,基于内嵌CPU/DSP的FPGA SOC将有更为广阔的应用发展前途。今后高速DSP应用技术必将是以系统芯片为核心,而且信息处理速度将突破每秒十亿次乘加运算,所以唯有FPGA芯片才能担当此重任。基于FPGA的嵌入式系统不仅具有单片机嵌入式系统和其他微处理器所不具备的技术特性及优点,而且可以通过利用并行算法操作使其具备更高速的数字信号处理能力,从而为系统实时性的实现提供了更为有力的支持。第一章 概述第一节 课题研究背景及意义现代社会移动用户数量的不断增加,传统通信系统的容量越来越不能满足通信的要求而可用频带资源有限,同时不能靠无限增加频道数目来解决系统容量问题。此外语音、图像、音乐等信源直接转换而得到的电信号频谱比较低,其频谱特点是低通频谱,有些包括直流分量也有些可能不包含,其最高频率和最低频率的比值一般都比较大,比如语音信号的频谱范围大概为三百到三千赫兹,这种信号被称为基带信号。为了使基带信号能够在频带信道上进行传输,比如无线信道,同时也为了能够同时传输多路基带信号,就需要采用调制和解调的技术。调制解调研究的主要内容包括:调制的原理、解调的原理、已调信号的产生方法、解调的实现方法等。调制是指为了适应倍道传输的要求,把基带信号的频谱搬移到一定的频带范围。对基带信号进行调制的目的主要有:进行频率分配、减少噪声和干扰的影响、实现多路复用和克服设备的限制等。第二节 QAM技术现状与发展以前的通信系统为模拟通信系统,所以调制技术是由模拟信号的调制与解调技术最初开始发展的。后来数字通信系统得到了迅速的发展,随之而来的是数字调制技术的广泛应用和迅速发展。随着现在日益增多的各种通信系统数量,为了更好的充分利用紧张的频谱资源,广大通信科研工作者致力于研究频谱利用率更高的新型数字调制方式,而且原CCITT (国际电报电话咨询委员会)也一直在促进并鼓励开发新奇的频谱使用技术,为使各种通信系统能够有效的进行通信,原CCITT科学地将频段分别分配给各个通信系统,因而许多科研院所,用户个体和通信公司都在通过开发先进的调制技术用以提高频谱利用率提高频谱利用率是人们设计和规划通信系统的关注焦点之一,同时也是提高通信系统容量的重要措施。频谱利用率越高,就要求已调信号所占的带宽要越窄。在数字调制系统中的频谱利用率主要是指传输的效率问题。如果系统的频带利用率高,就表明通信系统具有较高的传输效率,反之传输效率就低。从上面对频谱利用率的定义可以发现,要使得通信系统的频谱利用率有所提高主要可以两种途径:一是通过提高该调制系统的传信率即信息传输速率,二是降低己调信号所占用的频带宽度。振幅和相位联合调制技术作为本课题的研究对象,就是一种近些年来获得了飞速发展的调制技术,该技术就具有极高的信息传输速。正交幅度调制是一种振幅与相位相结合的高阶调制方式,具有较高的频带利用率和较好的功率利用率,现如今已在中、大容量数字微波通信系统、卫星通信等领域中得到广泛运用。随着第三代移动通信系统的日趋成熟,频谱利用率较高的QPSK及QAM调制解调方式都会得到更多的采用。尤其是多进制QAM(16QAM),由于其频带利用率高,在通信业务日益增多使得频带利用率成为主要矛盾的情况下,正交幅度调制方式是一种比较好的选择。除了要解决提高语音服务质量问题,第三代移动通信系统更要解决如何在有限频带资源中提供多媒体综合业务的问题。所以,在选择调制方案时,第三代移动通信系统考虑的就不能只是抗干扰性能,频带利用率与灵活性应该予以更多考虑。低容量、低速率的语音服务能被传统的调制方案所适用,但高容量、高速率的多媒体业务却难以满足。而正交振幅调制QAM具有高频谱利用率,能根据信号传输环境与信号源的不同自适应地调整调制速率等优点,因此可以有效缓解可用频带紧张的情况及实现多速率的多媒体综合业务传输。传统数字调制方式下,通常单码元携带l bit的信息,但QAM调制信号的幅度和相位均携带信息,随着16QAM中M的增大,调制信号所携带的信息量也相应增加,例如16QAM中一个码元携带4bit的信息,64QAM中一个码元携带6bit的信息,由此可知,16QAM中一个码元携带N bit()的信息,这极大地提高了信道频谱利用率。因此,在通信传输领域,QAM调制方式得到了广泛的应用。而且,QAM得到了广泛应用还有一个重要原因,那即是QAM码间距比MASK,MPSK的要大,所以在提高频带利用率基础上,误码率更小。QAM并不是一种新的调制方式,QAM在有线通信系统中的应用早在10多年前就已经开始了,但直到最近几年,它在无线信道中的应用才开始兴起,在数字电视这样的宽带通信系统中QAM应用较多,但在无线窄带通信系统中的应用还非常少。研究QAM调制的文章很多,可多数是讨论如何应用于数字电视系统的文章,而且这些文章研究的重点集中在解调中的载波提取部分,对QAM调制解调的整个系统进行完整的论述的文章很少。在实现方法及过程中,多数文章内容以软件仿真为主,而且大多文章只实现系统的某个模块,介绍用FPGA硬件实现的文章更是寥寥无几。而如今,无线宽带数字通信的“软件无线电”设计方案越来越受到工程师们的青睐。所谓软件无线电,即在一个开放的、标准化的、模块化的通用硬件平台上,通信功能由软件完成。由于代码具有灵活性,开放性的特点,软件无线电系统的实现也具有高度的灵活性,开放性。调制解调器作为软件无线电技术研究的核心内容之一,如何实现调制解调器的软件化是实现软件无线电通用性、开放性的关键环节。多数传统的数字调制解调是利用专门的调制解调芯片实现的,固化的硬件极大限制了设计的灵活性。本文在FPGA这一软件无线电平台上采用verilog语言的方式实现16QAM调制解调,灵活性好。第三节本文内容和结构近些年,对数字QAM调制解调研究的相关文献比较多。数字QAM调制解调技术自提出至今虽然己经得到长足的发展,但研究的重心往往偏于QAM调制解调的各种模块的算法实现。关于如何运用这些模块搭建一个完整的QAM调制解调系统,并使其满足设计性能的要求,目前相关的研究方法并不是很多。另外无线信道的复杂度对QAM解调也提出了严峻的挑战。所以,研究QAM调制解调技术及其FPGA实现有着及其重要的现实意义。本课题主要将对QAM调制解调技术进行研究,在深入研究理论的基础上完成调制解调系统中关键模块的设计实现。本文主要讨论了16QAM调制解调器中载波恢复、正交相干解调、要求在一片FPGA芯片上实现,工作量较大,具有一定难度。利用Quartus II软件搭建了16QAM调制解调系统,是系统算法的快速实验平台,对整个系统有着举足轻重的作用。载波恢复采用DDS实现,既简单又快速。采样判决采用门限设计来实现。第四节本章小结l 第一章介绍了课题背景、意义、QAM技术发展概要及应用现状和论文内容。l 第二章分析了16QAM调制解调的整体设计,16QAM顶层模块原理和程序实现。l 第三章分析了16QAM调制的原理与设计,16QAM发送端各个模块的程序实现。l 第四章分析了16QAM解调的原理与设计,16QAM接收端各个模块的程序实现。l 第五章给出了各个分模块在Quartus II软件平台上的仿真结果和调制、解调系统整体调试。l 第六章总结了本文的主要内容和创新点,指明了下一步的研究方向。- 7 -第二章 QAM调制解调整体设计引言:正交幅度调制16QAM是一种振幅和相位的联合键控。在多进制联合键控体制中,相位键控的带宽和功率占用方面都具有优势,即带宽占用小和比特信噪比要求低。因此MPSK和MDPSK体制为人们所喜用。但是,在MPSK体制中,随着M的增大,相邻相位的距离逐渐减小,使噪声容限随之减小,误码率难于保证。为了改善在M大时的噪声容限,发展出了QAM体制。在QAM体制中,信号的振幅和相位作为两个独立的参量同时受到调制1。本章介绍了16QAM调制解调的原理,对原理及性能进行了数学分析,揭示了16QAM体制的优势所在,并用SystemView软件对整个系统进行行为级的仿真,为之后的FPGA实现提供了理论依据和可行性验证。第一节 16QAM调制的方法和原理16QAM调制信号可以表示为:,(2.1) 式中和是电平值,这些电平值是通过将2比特序列映射为二进制4电平振幅而获得的,为信号脉冲,是正交载波频率,M为进制数,16QAM调制中M为16。在调制过程中,作为调制信号的输入四路数据两两结合,分别进入两个电平转换器,转换成两路4电平数据,两路4电平数据和分别被载波和调制,然后相减,即可得到16QAM信号。例如一个16位正交幅度调制信号的星座图如图2.1所示,该星座图是通过用16QAM中M4PAM的信号对每个正交载波进行振幅调制再将两路幅值映射到x,y轴得到的,星座点数为。图2.1 M=16的QAM信号星座图同时16QAM调制信号还可以这样表示:- 8 -(2.2)上式中,由此可以看出,QAM调制信号可以看成是幅度和相位的联合调制。如果,那么QAM方法就可以达到以符号速率同时发送个二进制数据。对于16QAM,系统能同时发送4个串行二进制数据。图2.2给出了QAM调制器的框图。平衡调制器相位变换平衡调制器发送滤波器本地振荡发送滤波器串/并转换二进制数据QAM信号图2.2 QAM调制器框图将(2-1)式变形,令 (2.3)其中(2.4)脉冲信号的能量为,由此可得任意两个信号间的欧氏距离是: (2.5)当信号幅值取时,两点间欧氏距离最小,为:。第二节 16QAM解调方法和原理解调实质上是调制的逆过程,在理想情况下,16QAM信号的频带利用率为,目前,对QAM信号的解调方法很多,其主要方法有以下三种:模拟相干解调、数字相干解调、全数字解调。本文采用数字相干解调法对QAM进行解调,原理如图2.1.3所示:图2.3 QAM解调器框图在接收端接收到的调制信号分别和两路相互正交的载波信号相乘,化简之后相同信号的表达式为: (2.6)正交信号表达式为: (2.7)其中,经过,经过解调得到同相与正交两路相互独立的多电平基带信号,然后把多电平基带信号经过低通滤波器滤去高频载波之后得到直流分量为和,再进行采样判决、L-2值电平转换和并/串转换还原出基带信号。此处时为16QAM相干解调。第三节本章小结本章对QAM调制解调相关的基础理论进行了研究,分别给出了调制端和解调端的原理图。在调制端,基带脉冲成形原理是一个及其重要的部分,这里对与模块设计相关的基带成形作了说明。在解调端,对解调理论当中的基本原理作了阐述。本章通过对QAM调制解调相关理论的重点阐述,为后面进一步研究QAM调制解调的仿真和FPGA实现都打下了很好的基础。第三章QAM调制器分模块设计通常,一个电子系统有多个不同的功能模块构成,但总有一个模块将所有模块连接起来,完成整个电子系统的协同工作,这个模块就是顶层模块。由顶层向底层逐层展开设计,各功能模块的内部结构逐级得到深化和细化。第一节 FPGA概述接收端采取这种“自顶向下”(Topdown)的设计方法从系统级设计入手,在顶层进行功能方框图的划分和结构设计;在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述;在功能一级进行验证,然后用逻辑综合优化工具生成具体的门级逻辑电路的网表10。因为硬件描述语言可以比较抽象的层次上描述设计的结构和内部特征,而对系统进行行为描述的目的是在系统设计的初始阶段,通过对系统行为描述的仿真来发现系统设计中存在的问题。逻辑综合功能将高层次的系统行为设计自动翻译成门级逻辑的电路描述,做到了设计与工艺的独立。软件设计工作主要采用Altera公司的Quartus II 9.0软件进行自顶向下的设计和Verilog语言进行行为级描述设计,Quartus II 9.0是美国Altera 公司自行设计的一种CAE软件工具,方便利用EDA方式设计ASIC芯片,支持嵌入式系统的开发、DSP Builder、SOPC开发、Signal Tap逻辑分析仪、LogicLock优化技术等,是一个有力的开发工具。Verilog是一种以文本形式来描述数字系统硬件结构和行为的语言,可以从上层到下层逐层描述设计思想,用一系列分层次的模块表示复杂的数字系统,并逐层进行仿真验证,把具体的模块组合由综合工具转换成门级网表,最后利用布局布线工具把网表转化为具体电路结构11。本次设计中接收端的数字信号处理是建立在有符号数的运算上进行的。有符号数与无符号数的对应关系为:一个8比特数系统可以产生256种不同的组合(0至255),其中前128种组合(0至127)表示正数,而后128种组合(128至255)表示负数。无符号数的0至255对应于有符号数的-1至-128和0至+127。假设0至255按顺时针方向组成一圆周,则正数应从0向顺时针的方向数,而负数应从0向逆时针的方向数。因此,对一个正数的二进制码取反加1则得到相应负数的二进制码。正数的最高位均为0而负数的最高位均为13。如表3-1所示。表3-1 无符号数与有符号数的对应关系无符号数二进制码16进制码有符号数00000 000000010000 000101+120000 001002+21270111 11117F+1271281000 000080-1281291000 000181-1272541111 1110FE-22551111 1111FF-1顶层模块源代码/顶层模块 module top(clk, /系统时钟rst, /复位en, /使能信号data_in, /1bit信号输入data_out, /16QAM信号输出DATA_I, /I路对应的量化值DATA_Q); /Q路对应的量化值 input clk,rst,en; input data_in; output signed17:0 data_out; output signed 3:0 DATA_I,DATA_Q; wire clk_dds; /DDS块的输入时钟 wire clk_100; /100kbs wire clk_400; /25kbs wire 3:0 data1; wire 3:0 data2; clk clkqam( .clk_sys(clk), .rst(rst), .clk_dds(clk_dds), .clk_100(clk_100), .clk_400(clk_400) );shift shiftqam( .clk_in(clk_100), .clk_out(clk_dds), .data_in(data_in), .rst(rst), .en(en), .data_out(data1) );diff diffqam( .clk(clk_dds), .rst(rst), .data_in(data1), .data_out_i(DATA_I), .data_out_q(DATA_Q), .data(data2) );add addqam ( .clk_dds(clk_dds), .rst(rst), .en(en), .data(data2), .dataout(data_out) );Endmodule第二节串/并转换模块1bit的数据送过来后,通过串并变换,将输入的第一个数据同它后面的三个数据同时输出,形成4bit的并行信号。串/并转换模块有五个输入端口和一个输出端口。系统首先将输入的第一个数据同它后面的三个数据同时输出,然后形成4bit的并行信号输出。实际运行中各路信号经串并转换之后,并行输出的每一路码元传输速率降为了原来的四分之一,这也正是实际运应中所要求的。和假设不同的是每一路输出信号前边都多了一个0码元单位,这是由于延迟模块所造成的。当然它们在这里同时被延迟了一个单元,但对后面各种性能的研究是不会造成影响的。串/并转换模块源代码/串/并转换模块module shift (clk_in, /写入信号的时钟clk_out, /输出信号的时钟data_in, /输入信号data_out, / 输出信号rst, en);input clk_in,clk_out,rst,en;input data_in;output reg 3:0 data_out;reg 3:0 dout;always (posedge clk_in or posedge rst) begin if(rst) begin dout=0; end else begin if(en) begin dout=dout2:0,data_in; end else dout=dout; end endalways (posedge clk_out or posedge rst) begin if(rst) data_out=0; else data_outsine.mif 即可生成sine.mif的数据文件,再参照*.mif文件的头尾格式,添加图3.2所示的头和尾。图3.2 mif数据文件头尾格式DDS是现代信号处理中一项关键的的数字化技术,DDS是直接数字频率合成的缩写,相比传统的频率合成器DDS具有低成本,低功耗,高分辨率和转换时间快等特点,广泛应用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。一块DDS一般包括频率控制寄存器,高速相位累加器和正弦计算器三个部分,频率控制寄存器可以串行或并行的方式装载并寄存用户输入的频率控制码;而相位累加器根据dds频率控制码在每个时钟周期内进行相位累加,得到一个相位值;正弦计算器则对该相位值计算数字化正弦波幅度(芯片一般通过查表得到)。DDS芯片输出的一般是数字化的正弦波,因此还需经过高速D/A转换器和低通滤波器才能得到一个可用的模拟频率信号。DDS有如下优点:1、频率分辨率高,输出频点多,可达2的N次方个频点(N为相位累加器位数);2、频率切换速度快,可达us量级;3、频率切换时相位连续;4、可以输出宽带正交信号;5、输出相位噪声低,对参考频率源的相位噪声有改善作用;6、可以产生任意波形;7、全数字化实现,便于集成,体积小,重量轻。在各行各业的测试应用中,信号源扮演着极为重要的作用。但信号源具有许多不同的类型,不同类型的信号源在功能和特性上各不相同,分别适用于许多不同的应用。目前,最常见的信号源类型包括任意波形发生器,函数发生器,RF信号源,以及基本的模拟输出模块。信号源中采用DDS技术在当前的测试测量行业已经逐渐称为一种主流的做法。典型的DDS函数发生器:一个完整周期的函数波形被存储在上面所示的存储器查找表中。相位累加器跟踪输出函数的电流相位。为了输出一个非常低的频率,采样样本之间的差相位()将非常小。例如,一个很慢的正弦波可能将有1度的相位。则波形的0号采样样本采得0度时刻的正弦波的幅度,而波形的1号采样将采得1度时刻的正弦波的幅度,依次类推。经过360次采样后,将输出正弦曲线的全部360度,或者确切地说是一个周期。一个较快的正弦波可能会有10度的相位。于是,36次采样就会输出正弦波的一个周期。如果采样率保持恒定,上述较慢的正弦波的频率将比较快的正弦波慢10倍。进一步说,一个恒定的相位必将导致一个恒定正弦波频率的输出。但是,DDS技术允许通过一个频率表迅速地改变信号的相位。函数发生器能够指定一个频率表,该表包括由波形频率和持续时间信息组成的各个段。函数发生器按顺序产生每个定义的频率段。通过生成一个频率表,可以构建复杂的频率扫描信号和频率跳变信号。DDS允许函数发生器的相位从一级到另一级连续变化。矢量信号发生器提供高灵活度和强大的解决方案,可用于科学研究,通信,消费电子,宇航/国防,半导体测试以及一些新兴领域,如软件无线电,无线电频率识别( RFID),以及无线传感网络等。有些公司还提供许多其他利用DAC来产生模拟信号的模拟输出产品。模拟输出板的基本架构是,将一个小型的FIFO存储器连接到一个DAC上。绝大部分的模拟输出板被用来产生静态电压,而且许多可以被用来产生低频波形。根据FPGA实际情况和DDS原理,我们决定不用额外的芯片来产生载波,而直接利用FPGA本身的资源来实现,从FPGA芯片资料上可以看到,芯片内部有165888bit的ram存储器,如果我们利用这些存储器将dds的数据存到芯片中,在设置好地址,那将可以实现专门dds芯片的功能,同时还能节约成本,而且数据在内部生成,也便于我们对其进行处理,同时FPGA本身有其独特的优势,使得我们产生载波有了比利用芯片更大的自由度和灵活度,这给设计人员带来了极大的方便。由于我们所需要的载波为1M,系统的时钟频率为50M,rom中的数据最多为64位,为了产生1M的载波分析如下:如果将dds的64个数据完全取出使用,则一个周期需要取64此数据,而时钟频率为50M所以这样产生的载波频率为50/60M,不足我们所需要的,这时我们可以通过一些处理如锁相环等等让其变成1M的频率,但是这样无疑是增加了设计的负担而且浪费资源,为了最大程度上的节约成本和设计时间,我们可以采取在rom中只取50个数据的办法,也就是一个周期取五十个数据,这样在工作频率为50M的情况下输出的载波频率正好为50/50=1,正好是我们所需要的波形。为了产生正交的第二个波形将第一个波形的地址稍微做下改动即可实现相位偏移90度。编写DDS主程序,设置两个ROM,一个存放波形,一个存放波形。同时将相位累加器位宽设成16位,即,频率字位宽范围为0到16位,频率字随着CLK累加,即每个系统频率上升沿,频率字都会在相位累加器中累加一次。在DDS模块中,采用系统时钟10Mhz,由公式可知:但取频率字为K=32b11001100110011001100110011001, fc=10MHZ, N=32时,可得到输出的正余弦波的频率为1MHz。对每一次的频率字累加值,即相位累加器累加结果截取高8位输出作为地址以查表的方法输出两路正交正弦波的二进制电平值。由公式可知频率字越大,输出正弦载波频率越高,分辨率越低;频率字越小,输出正弦载波频率越低,分辨率越高。图3.3为正弦内存单元的原理图。图3.3 DDS正弦内存单元对DDS模块进行编译仿真,进行功能仿真得仿真图3.4。图3.4 DDS仿真波形由图3.3.4可以看出DDS模块在系统时钟为10M的情况下很好地输出了频率为1M,相位差为的正交载波。两个PAM信号分别调制同相和正交载波,每一个调制器有4种可能的输出,经线性加法器合并产生16QAM信号。DDS 和加法器模块源代码/DDS 和加法器模块module add(clk_dds, /输入信号时钟rst,en,data, dataout,); /16QAM信号input rst,en,clk_dds;input 3:0 data;output signed17:0 dataout;reg signed16:0 csignal,ssignal;wire signed 15:0 cosine; /cos值wire signed 15:0 sine; /sin值wire 31:0 addra; / DDS频率字assign addra=b11001100110011001100110011001;assign dataout= csignal16,csignal+ ssignal16,ssignal;always (posedge clk_dds or posedge rst)begin if(rst) begin csignal = 0;ssignal = 0; end else begin case(data) 4b0000: begin /-2cos-2sin csignal16:1 = cosine15:0; csignal0 = 0; ssignal16:1 = sine15:0; ssignal0 = 0; end4b0001: begin / -2cos-sin csignal16:1 = cosine15:0; csignal0 = 0; ssignal16 = sine15; ssignal15:0 = sine15:0;end4b0010: begin / -2cos+2sin csignal16:1 = cosine15:0; csignal0 = 0; ssignal16:1 = sine15:0; ssignal0 = 0; end4b0011: begin / -2cos+sin csignal16:1 = cosine15:0; csignal0 = 0; ssignal16 = sine15; ssignal15:0 = sine15:0; end4b0100: begin / -cos-2sin csignal16 = cosine15; csignal15:0 = cosine15:0; ssignal16:1 = sine15:0; ssignal0 = 0; end 4b0101: begin / -cos-sin csignal16 = cosine15; csignal15:0 = cosine15:0; ssignal16 = sine15; ssignal15:0 = sine15:0; end4b0110: begin/ -cos+2sin csignal16 = cosine15; csignal15:0 = cosine15:0; ssignal16:1 = sine15:0; ssignal0 = 0; end4b0111: begin / -cos+sin csignal16 = cosine15; csignal15:0 = cosine15:0; ssignal16 = sine15; ssignal15:0 = sine15:0; end4b1000: begin / 2cos-2sin csignal16:1 = cosine15:0; csignal0 = 0; ssignal16:1 = sine15:0; ssignal0 = 0; end4b1001: begin / 2cos-sin csignal16:1 = cosine15:0; csignal0 = 0; ssignal16:1 = sine15:0; ssignal0 = 0; end4b1010: begin /2cos+2sin csignal16:1 = cosine15:0; csignal0 = 0; ssignal16:1 = sine15:0; ssignal0 = 0; end4b1011: begin / 2cos+sin csignal16:1 = cosine15:0; csignal0 = 0; ssignal16 = sine15; ssignal15:0 = sine15:0; end4b1100: begin / cos-2sin csignal16 = cosine15; csignal15:0 = cosine15:0; ssignal16:1 = sine15:0; ssignal0 = 0; end4b1101: begin / cos-sin csignal16 = cosine15; csignal15:0 = cosine15:0; ssignal16 = sine15; ssignal15:0 = sine15:0; end 4b1110: begin / cos+2sin csignal16 = cosine15; csignal15:0 = cosine15:0; ssignal16:1 = sine15:0; ssignal0 = 0; end 4b1111: begin / cos+sin csignal16 = cosine15; csignal15:0 = cosine15:0; ssignal16 = sine15; ssignal15:0 = sine15:0; end default: begin csignal = 0; ssignal = 0;endendcaseendend dds ddsqam( .data(addra), .en(en), .reset(rst), .clk(clk_dds), .sine(sine), .cose(cosine) );Endmodule/module dds(data, en, clk, reset, sine, cose); / DDS模块input 31 : 0 data; /频率控制字input en; /频率控制字写使能input clk; input reset; output signed15 : 0 sine; /正弦信号输出output signed15 : 0 cose; /余弦信号输出reg 31 : 0 ADD_A; /正弦波产生模块的相位累加器reg 31 : 0 ADD_B; /余弦波产生模块的相位累加器reg signed 15 : 0 cose_DR; /余弦波的查找表地址reg signed 15 : 0 sine_DR; wire 31 : 0 data; /频率控制字wire 9 : 0 ROM_A;wire signed 15 : 0 cose_D;wire signed 15 : 0sine_D;assign cose = cose_DR;assign sine = sine_DR;assign ROM_A = ADD_B31 : 22; begin if(reset) /系统初始化时,默认的频率控制字为0 ADD_A = 0; else if(en) ADD_A = data; else ADD_A = ADD_A ;endalways (posedge clk or posedge reset)begin if(reset) ADD_B = 0; else ADD_B = ADD_B + ADD_A; /ADD_B为累加的结果endalways (posedge clk or posedge reset)begin if(reset) cose_DR = 0; else cose_DR = cose_D;endalways (posedge clk or posedge reset)begin if(reset) sine_DR = 0; else sine_DR = sine_D;end/调用两个ROM,存储着正余弦波形一个周期的数值。rom_cose cose1( .addra(ROM_A), .clka(clk), .douta(cose_D);rom_sine sine1( .addra(ROM_A), .clka(clk), .douta(sine_D);endmodule module rom_sine( /产生sin信号模块addra,clka,douta);inputclka;input9:0addra;output15:0douta;regsigned15:0douta;a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《谏太宗十疏书》课件
- 语文教学研修汇报
- 亲戚关系单词课件
- 《诗经·何草不黄》课件
- 亲子健康调理课件
- 亮丽的城市风光课件
- 事故安全培训感受体会课件
- 事业单位财务
- 气体行业的年度工作总结
- 汽车外饰工程师年终总结
- 人工智能在智能物流领域的应用练习题
- 2025变压器振动监测与故障诊断装置
- 工程对赌协议合同模板
- 盒饭采购合同协议
- 钟祥旅游景点
- YY频道模板文档
- 2024-2025学年人教版八年级上册地理每日默写知识点(背诵版)
- (完整)中小学“学宪法、讲宪法”知识竞赛题库及答案
- 2024年国网辽宁省电力有限公司招聘考试真题
- DBT29-179-2014 天津市玻纤水泥平板复合保温板应用技术规程
- 取保候审后外出申请书
评论
0/150
提交评论