
本书以Xilinx公司的FPGA为开发平台,采用MATLAB及VHDL语言为开发工具,详细阐述数字通信调制解调技术的FPGA实现原理、结构、方法以及仿真测试过程,并通过大量工程实例分析FPGA实现过程中的具体技术细节。主要包括设计语言及环境介绍、FPGA实现数字信号处理基础、滤波器的FPGA实现、ASK调制解调技术的FPGA实现、FSK调制解调技术的FPGA实现、PSK调制解调技术的FPGA实现、QAM调制解调技术的FPGA实现以及DSSS信号调制解调技术的FPGA实现等内容。
为什么要写这本书 为什么要写这本书?或者说,为什么要写数字通信的MATLAB与FPGA实现技术相关内容的书?记得几年前电子工业出版社首次出版《数字滤波器的MATLAB与FPGA实现》一书时,我在前言中提到写作的原因主要有三条:其一,是FPGA技术在电子通信领域得到了越来越广泛的应用,并已逐渐成为电子产品实现的首选方案;其二,是国内市场上专门讨论如何采用FPGA实现数字通信技术的书籍相对欠缺;其三,是数字通信技术本身十分复杂,关键技术较多,在一本书中全面介绍数字通信技术的FPGA实现难免有所遗漏,且内容难以翔实。因此,根据作者的从业经验,将数字通信技术的关键技术大致分为滤波器技术、同步技术和解调技术三种,并尝试着先写滤波器技术,再逐渐完成其他两项关键技术的写作。在广大读者的支持和鼓励下,总算完成了《数字通信同步技术的MATLAB与FPGA实现》、《数字调制解调技术的MATLAB与FPGA实现》两本书。后来又根据读者的反馈要求,先后出版了数字滤波器、数字通信同步技术、数字调制解调技术几本书的Altera/Verilog版,以及专门讨论锁相环技术的《锁相环技术原理及FPGA实现》。 数字通信的MATLAB与FPGA实现的系列著作出版后,陆续通过邮件或博客的方式收到广大读者的反馈意见。一些读者直接通过邮件告知书中的内容对工作中提供的直接或间接的帮助;一些读者提出了很多中肯的有建设性的意见和建议;更多的读者通过邮件交流书中的相关设计问题;还有一些读者直接指出了书中一些描述不准确的地方,以及部分文字上的错误(这些勘误都已在我的技术博客中发布)。 由于最初用Xilinx /VHDL平台(相对于Altera/Verilog,我更早熟悉Xilinx /VHDL平台)写数字通信的MATLAB与FPGA实现的系列著作时,并没有规划要写这个系列的Altera/Verilog版本,因此并没有在书名上增加“Xilinx/VHDL版”的字样,后来写Altera/Verilog版本时,为以示区别,在书名上增加了“Altera/Verilog版”的字样。时间过得很快,五年多的时间过去了,应读者需求,为进一步提高广大读者学习的效率,作者精心设计了与Xilinx/VHDL版本系列图书配套使用的FPGA信号处理板CXD301,并利用这次改版的时机增加了书中实例的板载测试内容,同时将书名增加了“Xilinx/VHDL版”的字样。 与《数字调制解调技术的MATLAB与FPGA实现》前一版相比,此次改版主要涉及以下几个方面: (1)对有FPGA工程实例的章节,增加了主要工程实例的CXD301板载测试内容。 (2)FPGA工具更换为ISE 14.7,仿真工具更换为ModelsimSE 10.1,MATLAB软件更换为Matlab_R2014a版本。 (3)为便于在CXD301处理板上进行板载测试验证,对部分工程实例参数进行了适当调整。 (4)在编写板载测试内容时,发现原书中的部分程序还有需要完善的地方,改版过程中对配套开发资源包中的程序文件进行了补充及优化。 (5)改写了第6章MSK调制信号的FPGA实现方法。 (6)更正了书中一些叙述不当的地方,大多是读者反馈回来的问题。 (7)对读者提问较多的地方叙述得更加详细。 通常来讲,一名电子通信专业的技术人员,在从业之初都会遇到类似的困惑:如何将从教材中学到的理论与实际中的工程设计结合起来?如何能够将这些教材中的理论转换成实际的电路?绝大多数数字通信类教材对通信的原理讲解十分透彻,但理论与实践之间显然需要有一座可以顺利通过的桥梁。一个常用的方法是通过采用MATLAB等工具进行软件仿真的方法来加深对理论的理解,但更好的方法显然是直接参与工程的设计与实现。 然而,刚毕业的工科院校学生极少有机会参加实际工程设计,工作中往往感到学校所学的理论知识很难与实际工程产品的实现联系起来。教科书上多是讲解通信原理性的内容,即使可以很好地解答教材后面的习题,或者说能够熟练地对书中的基本公式进行推导,在实际进行产品设计时,如何将这些理论及公式用具体的电路或硬件平台实现出来,仍然是摆在广大工程师面前的一道难关。尤其对于数字通信专业来讲,由于涉及的理论知识比较复杂,真正进行工程设计时才发现根本无从下手。采用MATLAB、System View等软件对通信理论进行仿真,虽然可以直观地验证算法的正确性,并查看仿真结果,但这类软件的仿真毕竟只停留在算法或模型的仿真上,与真正的工程设计及实现完全是两个不同的概念。FPGA技术很好地解决了这一问题。FPGA技术本来就是基于工程应用的技术,其仿真技术可以很好地仿真产品实际的工作情况,尤其是时序仿真技术,在计算机上通过了时序仿真的程序设计,几乎不再需要修改就可以直接应用到工程中。这种设计、验证、仿真的一体化方式可以极好地将理论与工程应用结合起来,从而提高学习的兴趣。 FPGA技术因其快速的并行运算能力,以及独特的组成结构,在电子通信领域已成为必不可少的实现平台之一。本书的目的正是架起一座教科书理论与工程设计实践之间的桥梁,通过具体的设计实例,详细讲解从理论到工程实现的方法、步骤和过程,以便于工程技术人员尽快掌握利用FPGA平台实现数字通信技术的方法。 目前,市场上已有很多介绍ISE、QuartusⅡ等FPGA开发环境,以及VHDL、Verilog HDL等硬件编程语言的书籍。当然,我们仅仅使用FPGA来实现一些数字逻辑电路,或者理论性不强的控制电路设计,掌握FPGA开发工具及VHDL语法就可以开始工作了。但是数字通信技术的理论性要强得多,采用FPGA平台实现数字通信技术的前提条件是对理论知识首先要有深刻的理解。在理解理论知识的基础上,关键的问题是根据这些通信理论或公式,利用FPGA的特点,找到合适的算法实现结构,理清工程实现的思路,并采用VHDL等硬件编程语言对其进行正确的实现。因此,要顺利地读懂本书,掌握用FPGA实现数字通信技术的知识和技能,读者还需要对FPGA的开发环境和设计语言有一定的了解。 作者在写作本书的过程中,兼顾数字通信技术的基础理论,以及工程设计过程的完整性,重点突出FPGA设计方法、结构、实现细节和仿真测试方法。在讲解理论知识的时候,重点从工程应用的角度进行介绍,主要介绍工程设计时必须掌握和理解的知识点,并且结合FPGA的特点进行讨论,便于读者尽快地找到理论与工程实现之间的结合点。在讲解实例的FPGA实现时,不仅绝大多数实例给出了完整的VHDL程序代码,并且从思路和结构上对每段代码均进行了详细的分析和说明。根据作者的理解,针对一些似是而非的概念,结合工程实例的仿真测试加以阐述,希望能够对读者提供更多有用的参考。相信读者按照书中讲解的步骤完成一个个工程实例时,会逐步感觉到理论与工程实现之间完美结合的畅快。随着读者掌握的工程实现技能的提高,对数字通信技术理论知识的理解也必将越来越深刻,重新阅读以前学过的数字通信原理时,头脑里就更容易构建起理论与工程实现之间的桥梁。 本书的内容安排 第1章首先对数字通信技术的概念及FPGA基础知识进行了简要介绍。本章耗费一些笔墨来讲述一些最基本的概念,一则是为了使全书所讲述的内容更成体系,二则想重申一个老掉牙的理由—基本的概念永远是最重要的。在介绍这些基本概念时,尽量避免使用一些复杂的公式及理论推导,更多地从直观角度来讨论。根据作者自身的经历和对数字通信的理解,对频谱、带宽、采样、信噪比等最基本的定义做了较为全面的阐述,希望能够对读者加深数字通信系统原理的理解有所帮助。大概是由于职业的原因,长期以来都对那些伟大的技术创新者备感敬意,因此在写FPGA发展历程时,更多地从人物的角度去描述那些科技创新的故事,这些故事确实非常有趣,那些伟大的科学家和技术创新者从来都不缺乏鲜明的个性。 采用MATLAB及FPGA来实现数字通信的相关技术,设计工程师首先需要熟练掌握一整套设计工具。设计语言及开发环境就是工程师手中的装备,要设计出完美的产品需要很多因素之间的相互配合,而掌握好手中的开发工具无疑是最基本的因素之一。第2章主要对本书所使用的设计语言和开发环境进行简要介绍。之所以说是简要介绍,因为这一整套的开发工具本身的功能十分强大,每一种工具都有种类繁多的专门著述进行详细阐述。随着工程师设计经验的积累,设计水平的提高,越能更全面地掌握设计工具的特点,从而更好地发挥设计工具的性能,以最小的代价设计出理想的产品。好比一把宝剑,只有握在高手的手中才能发挥出最大的威力。 第3章介绍FPGA中数的表示方法、数的运算、有限字长效应及常用的数字信号处理模块。数字信号在FPGA等硬件系统中实现时,因受寄存器长度的限制,不可避免地产生了有效字长效应。设计工程师必须了解字长效应对数字系统可能带来的影响,并在实际设计中通过仿真来确定最终的量化位数、寄存器长度等内容。本章最后对几种常用的运算模块IP核进行介绍,详细阐述了各IP核控制参数的设置方法,并给出了几个简单的模块应用实例。IP核的应用在FPGA设计中十分普遍,尤其在数字信号处理领域,采用设计工具提供的IP核进行设计,不仅可以提高设计效率,而且可以保证设计的性能。在进行FPGA工程设计时,工程师可以先浏览一下选定目标器件所能提供的IP核,便于通过使用IP核来减少设计工作量并提高系统性能。当然,工程师也可以根据设计需要,根据是否具有相应的IP核来选择目标器件。这一章讨论的都是一些非常基础的知识,但正因为是基础,所以显得尤其重要。其中讨论的有效数据位运算,以及字长效应等内容在后续的工程实例讲解中都会多次涉及,因此建议读者不要急于阅读后续章节的工程实例讲解,先切实练好基本功,才可以达到事半功倍的效果。 对于从事电子通信行业的技术人员来说,滤波器是一个再普通不过的概念了。数字滤波器本身已成为一个专业性很强的研究方向,第4章所要讲述的仅仅是最常用的FIR(Finite Impulse Response,有限脉冲响应)滤波器和IIR(Infinite Impulse Response,无限脉冲响应)滤波器。不过这不并不影响读者对数字通信调制解调技术内容的理解,因为后续章节所讨论的工程实例中,只使用到这两种类型的数字滤波器。读者如果有兴趣了解更多与滤波器的FPGA实现相关的内容,可以参考《数字滤波器的MATLAB与FPGA实现—Xilinx/VHDL版》一书。 第5章正式开始讨论各种通信体制的调制解调技术。众所周知,无论是数字通信还是模拟通信,幅度调制解调都被认为是最简单的一种通信技术。事实也确实如此,因此这种调制体制也几乎成为了学习掌握通信原理的基础。在讨论ASK解调技术时采用了非相干方法,又进一步降低了FPGA实现的难度。虽然看似简单,但并非不重要,因为本章介绍了一个非常完整的数字通信传输系统。我们在介绍通信原理方面的教材中可以很容易找到讲解ASK调制解调方面的内容,但如何将这个看似简单的系统真正应用到工程中,用FPGA实现出来,清楚了解输入数据到输出数据之间各种信号的变化过程,这并不是一件容易的事。读者根据本章所介绍的步骤及方法,完成整个系统的仿真测试之后,相信对ASK调制解调技术会有一个更深入的理解。 经过前面对ASK调制解调技术的讨论,相信大家对数字调制解调技术的整个设计流程有了一个初步认识,甚至觉得工程设计并不是多么困难的事。建立信心是很重要的,但也要有一定的思想准备,并非所有数字调制解调技术都如前面一章所讲的那么简单。第6章前半部分讨论了常规FSK信号的调制解调技术,无论是理论知识还是工程实现的难度都不大;后半部分详细讨论了MSK信号的调制解调技术,其实现原理及工程实现都已有一定规模了,无论是从原理还是工程实现方面来讲,要完全掌握其设计流程和方法,都需要花一番工夫才行。不过也不用过于担心,所谓“难者不会,会者不难”,相信大家跟着书中讨论的步骤,一步步完成整个MSK解调的FPGA工程实现,并在ModelSim仿真波形中看到一条条光滑的收敛曲线时,一定会产生一种成就感,设计的信心也会随之增加。 第7章讨论三种典型的相位调制系统:BPSK、QPSK及 QPSK。Costas环是一种非常经典的锁相环路,是解调BPSK信号的常用电路,相信绝大多数电子通信专业毕业的读者对此都不会陌生。在设计完成Costas环后,用ModelSim仿真环路的收敛性能时,在波形界面看到完美的收敛曲线时,相信读者会感觉到工程设计成功的喜悦,一些原本只存在于教科书中的理论,经过这个设计过程,已经演变成了现实的工程设计。本章进一步探讨了QPSK及 QPSK调制解调制过程。为了给读者更多的参考,分别采用了相干及非相干方法对解调进行了实现。 第8章讨论了一个比较完整的QAM调制解调系统,从原理到MATLAB仿真,再到FPGA实现过程都进行了比较详细的介绍。QAM是一种应用十分广泛的多进制调制体制,相比前面章节讨论的调制系统来讲,无论是工作原理还是FPGA实现过程,都显得更为复杂些。从整个调制解调系统的实现过程来看,关键问题仍然还是载波同步及位同步的问题。其中,载波同步的相关内容与前面章节所讨论的载波锁相环有很强的关联性,因此,如果读者通过前面章节已经对载波锁相环有较深刻的认识,则理解本章中的QAM载波同步原理及实现方法也就比较容易了。与二进制调制解调系统不同,多进制QAM系统通常使用插值算法位同步技术实现解调后基带信号的同步判决,本章给出了算法基本原理及实现方法,最后讨论了插值法位同步电路的板载测试。 本书最后一章讨论的是扩频通信系统,伪码同步是其中最核心的技术,扩频通信的抗干扰性能也体现在伪码同步后的解扩上。本章首先对直接序列扩频通信系统的一般原理做了介绍,然后较详细地讨论了直接序列扩频通信系统中的同步原理及方法,并重点分析了本系统所采用的基于滑动相关的捕获方法,以及基于延迟锁相环的跟踪方法。利用FPGA实现伪码同步电路的关键问题在于合理划分功能模块,以及准确掌握各功能模块之间的控制与被控制关系和整个系统的时序关系。如果没有Costas载波环的FPGA设计基础,直接学习这一章的内容是比较困难的,不仅是因为直扩解调系统本身需要将载波同步环与伪码同步环有机结合在一起,同时还因为本章在介绍整个环路的Verilog HDL设计时有意略去了载波环相关参数的详细设计方法。学习的过程总是需要循序渐进的,好比共产主义是一个美好的理想,从社会主义初级阶段一步跨入共产主义,从理论和实践上都证明是行不通的。学习过程中的艰难曲折不可避免,但要相信,当彻底掌握到所学的知识后,并熟练应用知识成功解决产品设计中的问题后,再回忆那些冥思苦想废寝忘食的片段,才可以真正体会到学习的快乐。 关于FPGA开发环境的说明 众所周知,目前两大厂商Xilinx和Altera的产品约占据全球90%的FPGA市场。可以说,在一定程度上正是由于两家FPGA公司的相互竞争态势,有力地推动了FPGA技术的不断发展。虽然HDL的编译及综合环境可以采用第三方公司所开发的产品,如ModelSim、Synplify等,但FPGA器件的物理实现必须采用各自公司开发的软件平台,无法通用。Xilinx公司推出的开发平台是Vivado和ISE系列套件,Altera公司目前的主流开发平台是Quartus Ⅱ系列套件。与FPGA开发平台类似,HDL也存两种难以取舍的选择:VHDL和Verilog HDL。 学习FPGA开发技术的难点之一即在于掌握开发工具,无论是Xilinx还是Altera公司,为了适应不断更新的开发需求,主要是适应不断推出的新型器件,开发工具的版本更新速度很快。 Xilinx自最初推出ISE 3.x版以来,历经十余年,已形成强大的用户群。虽然Xilinx公司自2013年10月2日发布最新的ISE 14.7版本后,宣布不再对ISE进行更新,由于ISE 14.7仍然支持Xilinx公司的Spartan-6、Virtex-6、Artix-7、Kintex-7、Virtex-7等中高端主流器件,因此仍然是广大FPGA工程师的首选设计工具。Vivado是Xilinx公司于2012年开始推出的平台,与ISE相比在架构及界面方面都有很大的变化,版本的更新主要是为了解决设计套件本身的功能性问题,Vivado设计套件自2012年首次推出后,几乎每年都会推出3~4个版本,截至目前已陆续推出20个版本之多!过多的软件版本不可避免地增加了FPGA工程师适应开发工具的难度。 如何选择开发平台以及HDL语言呢?其实,对于有志于从事FPGA开发的技术人员,选择哪种平台及HDL语言并不重要,因为两种平台具有很多相似的地方,精通一种HDL语言后,再学习另一种HDL语言也不是一件困难的事。通常来讲,可以根据周围同事、朋友、同学或公司的主要使用情况进行选择,这样在学习的过程中,可以很方便地找到能够给你指点迷津的专业人士,从而加快学习进度。 本书采用的是Xilinx公司的FPGA器件作为开发平台,采用ISE 14.7作为开发环境,采用VHDL语言作为实现语言,同时采用XST和Synplify_fpga2013两种综合工具,使用ModelsimSE 10.1进行仿真测试。由于VHDL语言并不依赖于某家公司的FPGA产品,因此本书的VHDL程序文件可以很方便地移植到Altera公司的FPGA产品上。如果程序中应用了IP核资源,由于两家公司的IP核不能通用,这就需要根据IP核的功能参数,在另一个平台上重新生成IP核,或编写VHDL代码来实现。 有人曾经说过,“技术只是一个工具,关键在于思想”。将这句话套用过来,对于本书来讲,具体的开发平台和HDL语言只是实现通信同步技术的工具,关键在于设计的思路和方法。读者完全不必要过于在意开发平台的差别,相信只要掌握本书所讲述的设计思路和方法,加上读者已经具备的FPGA开发经验,采用任何一种FPGA平台都可以很快地设计出满足用户需求的产品。 如何使用本书 本书讨论的是数字调制解调技术的MATLAB与FPGA实现。相信大部分工科院校的学生和电子通信的从业人员对MATLAB软件都会有一个基本的了解。由于它的易用性及强大的功能,已经成为数学分析、信号仿真、数字处理必不可少的工具。由于MATLAB具有大量专门针对数字信号处理的常用函数,如滤波器函数、傅里叶分析函数等,十分有利于对一些通信的概念及信号进行功能性仿真,因此,在具体讲解某个实例时,通常会采用MATLAB作为仿真验证工具。虽然书中的MATLAB程序相对比较简单,主要应用一些数字信号处理函数进行仿真验证,但如果读者没有MATLAB的编程基础,建议最好还是先简单学习一下MATLAB的编程概念及基本语法。考虑到程序及函数的兼容性,书中所有MATLAB程序的开发验证平台均为Matlab_R2014a版软件。 在讲解具体的FPGA工程应用实例时,通常会先采用MATLAB对所需设计的工程进行仿真,一方面仿真算法过程及结果,另一方面生成FPGA仿真所需要的测试数据;然后在ISE平台上编写VHDL程序对实例进行设计实现。为便于讲述,通常会先讨论程序的设计思路,或者先给出程序清单,再对程序代码进行分析说明。完成程序编写后,需要编写TestBench测试激励文件,根据所需产生输入信号的种类,可以直接在TestBench文件中编写代码来产生输入信号,也可以通过读取外部文本文件的方式来产生输入信号。接下来就可以采用ModelSim工具对VHDL程序进行时序或行为仿真,查看ModelSim仿真波形结果,并根据需要将仿真数据写入外部文本文件中,通常还会对仿真波形进行讨论,分析仿真结果是否满足要求。如果ModelSim波形不便于精确地分析测试结果,则需要再次编写MATLAB程序,对ModelSim仿真结果数据进行分析处理。 本书主要以工程应用实例的方式讲解各种调制解调技术的原理及FPGA实现方法和步骤。大部分实例均给出了完整的程序清单,限于篇幅,不同工程实例中的一些重复或相似的代码没有完全列出,随书配套的开发资源包上收录了本书所有实例的源程序及工程设计资源,并按章节序号置于开发资源包根目录下。本书在编写工程实例时,程序文件均放置在“D:ModemPrograms”的文件夹下,读者可以先在本地硬盘下建立“D:ModemPrograms”文件夹,而后将配套开发资源包中的程序压缩包解压至该文件夹下,大部分程序均可直接运行。需要说明的是,在大部分工程实例中,需要由MATLAB产生FPGA测试所需的文本数据文件,或者由MATLAB读取外部文件进行数据分析,同时FPGA仿真的TestBench文件通常也需要从指定的路径下读取外部文件数据,或将仿真结果输出到指定的路径下。文本文件的路径均指定为绝对路径,如“fid=fopen('D:ModemProgramsChapter_7din.txt','w')”。因此,读者运行实例程序时,请将程序文件中指定文件绝对路径的代码进行修改,以确保仿真测试程序在正确的路径下对文件进行读写操作。 完成程序设计、仿真测试后,如果读者选购了与该套图书配套的FPGA信号处理板CXD301,则可以参考本书工程实例的板载测试内容,将板载测试程序下载到CXD301中,直观真实地体验同步技术的工程实现情况。工程实例的板载实验需要用到CXD301信号处理板、Xilinx下载线缆、带宽不小于100 MHz的示波器、BNC线缆等工具,如图1所示。 图1 工程实例板载实验所需工具 致谢 有人说,每个人都有他存在的使命,如果迷失他的使命,就失去了他存在的价值。不只是每个人,每件物品也都有其存在的使命。对于一本书来讲,其存在的使命就是被阅读,并给阅读者带来收获。数字通信的MATLAB与FPGA设计系列的书,能够对读者在工作及学习中有所帮助,是作者莫大的欣慰。 作者在写作本书的过程中查阅了大量的资料,在此对资料的作者及提供者表示衷心的感谢。由于写作本书的缘故,重新阅读一些经典的数字通信理论书籍时,再次深刻感受到前辈们严谨的治学态度和细致的写作作风。 在此,感谢我的妻子刘帝英女士,她不仅是一位尽心尽职的优秀母亲,也是一位严谨细致的科技工作者,正是她的支持和默默付出,我才有充分的时间专心完成系列书籍的写作。时间过得很快,刚开始编写系列图书时,女儿才刚上小学,今年转眼就上初中了,她仍然最爱看书和画画,她始终是我们家的骄傲,希望她能永远快乐。 FPGA技术博大精深,数字通信技术种类繁多且实现难度大。本书虽尽量详细讨论了FPGA实现调制解调技术的相关内容,仍感觉到难以详尽叙述工程实现所有细节。相信读者在实际工程应用中经过不断的实践、思考及总结,一定可以快速掌握调制解调技术的工程设计方法,提高应用FPGA进行工程设计的能力。由于作者水平有限,不足之处在所难免,敬请读者批评指正。欢迎大家就相关技术问题进行交流,或对本书提出改进意见及建议。 技术博客:http://duyongcn.blog.163.com 产品网店:https://shop574143230.taobao.com/ 交流邮箱:duyongcn@sina.cn 杜 勇 2017年9月
第1章 数字通信及FPGA概述 (1) 1.1 数字通信系统概述 (2) 1.1.1 数字通信的一般处理流程 (2) 1.1.2 本书讨论的通信系统模型 (4) 1.1.3 数字通信的特点及优势 (5) 1.1.4 数字通信的发展概述 (7) 1.2 数字通信中的几个基本概念 (9) 1.2.1 与频谱相关的概念 (9) 1.2.2 带宽是如何定义的 (12) 1.2.3 采样与频谱搬移 (15) 1.2.4 噪声与信噪比 (19) 1.3 FPGA的基础知识 (21) 1.3.1 从晶体管到FPGA (21) 1.3.2 FPGA的发展趋势 (24) 1.3.3 FPGA的组成结构 (26) 1.3.4 FPGA的工作原理 (30) 1.4 FPGA与其他处理平台的比较 (31) 1.4.1 ASIC、DSP及ARM的特点 (32) 1.4.2 FPGA的特点及优势 (33) 1.5 Xilinx器件简介 (34) 1.5.1 Xilinx器件概况 (34) 1.5.2 Spartan系列器件 (36) 1.5.3 Virtex系列器件 (37) 1.6 FPGA信号处理板CXD301 (39) 1.7 小结 (40) 参考文献 (40) 第2章 设计语言及环境介绍 (43) 2.1 HDL语言简介 (44) 2.1.1 HDL语言的特点及优势 (44) 2.1.2 选择VHDL还是Verilog (45) 2.2 VHDL语言基础 (46) 2.2.1 程序结构 (47) 2.2.2 数据类型 (49) 2.2.3 数据对象 (52) 2.2.4 运算符 (52) 2.2.5 VHDL语句 (57) 2.3 FPGA开发工具及设计流程 (63) 2.3.1 ISE开发套件 (63) 2.3.2 ModelSim仿真软件 (67) 2.3.3 Synplicity综合软件 (69) 2.3.4 FPGA设计流程 (70) 2.4 MATLAB软件 (72) 2.4.1 MATLAB软件简介 (72) 2.4.2 常用的信号处理函数 (75) 2.5 MATLAB与ISE的数据交换 (81) 2.6 小结 (82) 参考文献 (82) 第3章 FPGA实现数字信号处理基础 (83) 3.1 FPGA中数的表示 (84) 3.1.1 莱布尼兹与二进制 (84) 3.1.2 定点数表示 (85) 3.1.3 浮点数表示 (86) 3.2 FPGA中数的运算 (89) 3.2.1 加/减法运算 (89) 3.2.2 乘法运算 (92) 3.2.3 除法运算 (94) 3.2.4 有效数据位的计算 (95) 3.3 有限字长效应 (97) 3.3.1 字长效应的产生因素 (97) 3.3.2 A/D转换的字长效应 (98) 3.3.3 系统运算中的字长效应 (99) 3.4 FPGA中的常用处理模块 (101) 3.4.1 乘法器模块 (101) 3.4.2 除法器模块 (106) 3.4.3 浮点运算模块 (109) 3.4.4 滤波器模块 (111) 3.4.5 数字频率器模块 (113) 3.5 小结 (115) 参考文献 (116) 第4章 滤波器的MATLAB与FPGA实现 (117) 4.1 滤波器概述 (118) 4.1.1 滤波器的分类 (118) 4.1.2 滤波器的特征参数 (120) 4.2 FIR与IIR滤波器的原理 (120) 4.2.1 FIR滤波器原理 (120) 4.2.2 IIR滤波器原理 (122) 4.2.3 IIR与FIR滤波器的比较 (122) 4.3 FIR滤波器的MATLAB设计 (123) 4.3.1 采用fir1函数设计 (123) 4.3.2 采用kaiserord函数设计 (126) 4.3.3 采用fir2函数设计 (126) 4.3.4 采用firpm函数设计 (128) 4.4 IIR滤波器的MATLAB设计 (130) 4.4.1 采用butter函数设计 (130) 4.4.2 采用cheby1函数设计 (131) 4.4.3 采用cheby2函数设计 (132) 4.4.4 采用ellip函数设计 (132) 4.4.5 采用yulewalk函数设计 (133) 4.4.6 几种设计函数的比较 (133) 4.5 滤波器设计分析工具 (135) 4.6 FIR滤波器的FPGA实现 (136) 4.6.1 量化滤波器系数 (136) 4.6.2 FIR滤波器的实现结构 (138) 4.6.3 采用IP核实现FIR滤波器 (142) 4.6.4 MATLAB仿真测试数据 (148) 4.6.5 测试激励的VHDL设计 (149) 4.6.6 FPGA实现后的仿真测试 (151) 4.7 IIR滤波器的FPGA实现 (152) 4.7.1 IIR滤波器的结构形式 (152) 4.7.2 量化级联型结构的系数 (155) 4.7.3 级联型结构的FPGA实现 (158) 4.7.4 FPGA实现后的测试仿真 (162) 4.8 滤波器的板载测试 (162) 4.8.1 硬件接口电路 (162) 4.8.2 板载测试程序 (163) 4.8.3 板载测试验证 (169) 4.9 小结 (170) 参考文献 (170) 第5章 ASK调制解调技术的实现 (171) 5.1 ASK信号的调制解调原理 (172) 5.1.1 二进制振幅调制信号的产生 (172) 5.1.2 二进制振幅调制信号的解调 (173) 5.1.3 二进制振幅调制系统的性能 (175) 5.1.4 多进制振幅调制 (175) 5.2 ASK调制信号的MATLAB仿真 (176) 5.3 ASK调制信号的FPGA实现 (179) 5.3.1 FPGA实现模型及参数说明 (179) 5.3.2 ASK调制信号的VHDL设计 (181) 5.3.3 FPGA实现后的仿真测试 (182) 5.4 ASK解调技术的MATLAB仿真 (184) 5.5 ASK解调技术的FPGA实现 (186) 5.5.1 FPGA实现模型及参数说明 (186) 5.5.2 ASK信号解调的VHDL设计 (186) 5.5.3 FPGA实现后的仿真测试 (188) 5.6 符号判决门限的FPGA实现 (190) 5.6.1 确定ASK解调后的判决门限 (190) 5.6.2 判决门限模块的VHDL设计 (191) 5.6.3 FPGA实现后的仿真测试 (193) 5.7 锁相环位同步技术的FPGA实现 (194) 5.7.1 位同步技术的工作原理 (194) 5.7.2 位同步顶层模块的VHDL设计 (196) 5.7.3 双相时钟信号的VHDL设计 (198) 5.7.4 鉴相模块的VHDL设计 (199) 5.7.5 控制模块的VHDL设计 (201) 5.7.6 分频模块的VHDL设计 (203) 5.7.7 FPGA实现后的仿真测试 (204) 5.8 ASK解调系统的FPGA实现及仿真 (204) 5.8.1 完整解调系统的VHDL设计 (204) 5.8.2 完整系统的仿真测试 (207) 5.9 ASK调制解调的板载测试 (209) 5.9.1 硬件接口电路 (209) 5.9.2 板载测试程序 (209) 5.9.3 板载测试验证 (214) 5.10 小结 (215) 参考文献 (215) 第6章 FSK调制解调技术的实现 (217) 6.1 FSK信号的调制解调原理 (218) 6.1.1 FSK信号的时域表示 (218) 6.1.2 相关系数与频谱特性 (219) 6.1.3 非相干解调原理 (221) 6.1.4 相干解调原理 (222) 6.1.5 解调方法的应用条件分析 (224) 6.2 FSK调制解调的MATLAB仿真 (225) 6.2.1 不同调制度的FSK信号仿真 (225) 6.2.2 非相干解调FSK仿真 (226) 6.2.3 相干解调FSK仿真 (231) 6.3 FSK调制信号的FPGA实现 (234) 6.3.1 FSK信号的产生方法 (234) 6.3.2 FSK调制信号的VHDL设计 (235) 6.3.3 FPGA实现后的仿真测试 (237) 6.4 FSK解调的FPGA实现 (238) 6.4.1 解调模型及参数设计 (238) 6.4.2 解调FSK信号的VHDL设计 (239) 6.4.3 FPGA实现后的仿真测试 (243) 6.5 MSK信号产生原理 (246) 6.5.1 MSK信号时域特征 (246) 6.5.2 MSK信号频谱特性 (246) 6.5.3 MSK信号的产生方法 (248) 6.6 MSK调制信号的FPGA实现 (249) 6.6.1 实例参数及模型设计 (249) 6.6.2 MSK调制信号的VHDL设计及仿真 (250) 6.7 MSK解调原理 (255) 6.7.1 延迟差分解调 (255) 6.7.2 平方环相干解调 (257) 6.8 MSK解调的MATLAB仿真 (258) 6.8.1 仿真模型及参数说明 (258) 6.8.2 平方环解调MSK的MATLAB仿真 (258) 6.9 平方环的FPGA实现 (261) 6.9.1 锁相环的工作原理 (261) 6.9.2 平方环的工作原理 (264) 6.9.3 平方环路性能参数设计 (265) 6.9.4 平方环的VHDL设计 (268) 6.9.5 FPGA实现后的仿真测试 (272) 6.10 MSK解调的FPGA实现 (273) 6.10.1 MSK解调环路参数设计 (273) 6.10.2 顶层模块的VHDL设计 (275) 6.10.3 脉冲成形及解调模块的VHDL设计 (279) 6.10.4 FPGA实现后的仿真测试 (281) 6.11 MSK调制解调的板载测试 (283) 6.11.1 硬件接口电路 (283) 6.11.2 板载测试程序 (283) 6.11.3 板载测试验证 (287) 6.12 小结 (288) 参考文献 (289) 第7章 PSK调制解调技术的实现 (291) 7.1 DPSK信号的调制解调原理 (292) 7.1.1 DPSK信号的调制原理 (292) 7.1.2 Costas环解调DPSK信号 (293) 7.1.3 DPSK调制解调的MATLAB仿真 (295) 7.2 DPSK解调的FPGA实现 (298) 7.2.1 环路性能参数设计 (298) 7.2.2 Costas环的VHDL设计 (300) 7.2.3 FPGA实现后的仿真测试 (303) 7.3 DQPSK信号的调制解调原理 (303) 7.3.1 QPSK信号的调制原理 (303) 7.3.2 双比特码元差分编解码原理 (305) 7.3.3 DQPSK信号解调原理 (306) 7.3.4 DQPSK调制解调的MATLAB仿真 (309) 7.4 DQPSK调制信号的FPGA实现 (313) 7.4.1 差分编/解码的VHDL设计 (313) 7.4.2 DQPSK调制信号的VHDL设计 (316) 7.5 DQPSK解调的FPGA实现 (321) 7.5.1 极性Costas环的VHDL设计 (321) 7.5.2 FPGA实现后的仿真测试 (326) 7.5.3 调整跟踪策略获取良好的跟踪性能 (327) 7.5.4 完整的DQPSK解调系统设计 (328) 7.5.5 DQPSK解调系统的仿真测试 (331) 7.6 ?/4 QPSK调制解调原理 (332) 7.6.1 ?/4 QPSK信号的调制原理 (332) 7.6.2 匹配滤波器与成形滤波器 (334) 7.6.3 ?/4 QPSK信号的差分解调原理 (339) 7.6.4 ?/4 QPSK调制解调的MATLAB仿真 (340) 7.7 ?/4 QPSK调制解调的FPGA实现 (344) 7.7.1 基带编码的VHDL设计 (344) 7.7.2 差分解调的VHDL设计 (346) 7.7.3 FPGA实现后的仿真测试 (351) 7.8 PSK调制解调电路的板载测试 (352) 7.8.1 Costas环电路的板载测试 (352) 7.8.2 DQPSK电路的板载测试 (359) 7.8 小结 (360) 参考文献 (361) 第8章 QAM调制解调技术的FPGA实现 (363) 8.1 QAM信号的调制解调原理 (364) 8.1.1 QAM调制解调系统组成 (364) 8.1.2 差分编码与星座映射 (365) 8.1.3 QAM调制解调的MATLAB仿真 (367) 8.2 QAM编/解码的FPGA实现 (371) 8.2.1 编码映射的VHDL设计 (371) 8.2.2 解码模块的VHDL设计 (373) 8.2.3 FPGA实现后的仿真测试 (375) 8.3 QAM载波同步的FPGA实现 (375) 8.3.1 QAM载波同步原理 (375) 8.3.2 极性判决法载波同步的FPGA实现 (378) 8.3.3 DD算法载波同步的FPGA实现 (383) 8.4 插值算法位同步技术原理 (390) 8.4.1 位同步技术分类及组成 (390) 8.4.2 内插滤波器原理及结构 (392) 8.4.3 Gardner误差检测算法 (394) 8.4.4 环路滤波器与数控振荡器 (395) 8.5 插值算法位同步技术的MATLAB仿真 (396) 8.5.1 设计环路滤波器系数 (397) 8.5.2 分析位定时算法MATLAB仿真程序 (397) 8.5.3 完整的QAM位定时算法仿真 (402) 8.6 插值算法位同步技术的FPGA实现 (403) 8.6.1 顶层模块的VHDL设计 (403) 8.6.2 插值滤波模块的VHDL设计 (406) 8.6.3 误差检测及环路滤波器模块的VHDL设计 (408) 8.6.4 数控振荡器模块的VHDL设计 (411) 8.6.5 FPGA实现后的仿真测试 (412) 8.7 插值算法位同步电路的板载测试 (417) 8.7.1 硬件接口电路 (417) 8.7.2 板载测试程序 (418) 8.7.3 板载测试验证 (421) 8.8 小结 (422) 参考文献 (423) 第9章 扩频调制解调技术的FPGA实现 (425) 9.1 扩频通信的基本原理 (426) 9.1.1 扩频通信的概念 (426) 9.1.2 扩频通信的种类 (427) 9.1.3 直扩系统工作原理 (429) 9.2 直扩调制信号MATLAB仿真 (431) 9.2.1 伪码序列的产生原理 (431) 9.2.2 MATLAB仿真直扩调制信号 (432) 9.3 直扩信号调制的FPGA实现 (436) 9.3.1 伪码模块的VHDL设计 (436) 9.3.2 扩频调制模块的VHDL设计 (437) 9.4 伪码同步的一般原理 (440) 9.4.1 滑动相关捕获原理 (441) 9.4.2 延迟锁相环跟踪原理 (442) 9.5 伪码同步算法设计及仿真 (443) 9.5.1 同步算法设计 (443) 9.5.2 捕获及跟踪门限的MATLAB仿真 (445) 9.6 伪码同步的FPGA实现 (447) 9.6.1 顶层模块的VHDL设计 (447) 9.6.2 伪码产生模块的VHDL设计 (451) 9.6.3 相关积分模块的VHDL设计 (453) 9.6.4 伪码相位调整模块的VHDL设计 (454) 9.6.5 FPGA实现后的仿真测试 (456) 9.7 直扩解调系统的FPGA实现 (458) 9.7.1 Costas载波环的VHDL设计 (458) 9.7.2 FPGA实现后的仿真测试 (463) 9.8 直扩调制解调的板载测试 (465) 9.8.1 硬件接口电路 (465) 9.8.2 板载测试程序 (466) 9.8.3 板载测试验证 (472) 9.9 小结 (473) 参考文献 (473)
杜勇,四川省广安市人,高级工程师。1999年于湖南大学获电子工程专业学士学位,2005年于国防科学技术大学获信息与通信工程专业硕士学位。主要从事数字信号处理、无线通信及FPGA应用技术研究。发表学术论文十余篇,出版《数字滤波器的MATLAB与FPGA实现》、《数字通信同步技术的MATLAB与FPGA实现》、《数字调制解调技术的MATLAB与FPGA实现》、《锁相环技术原理及FPGA实现》等多部著作。
http://www.hxedu.com.cn/hxedu/fg/book/bookinfo.html?code=TN326420