
本书以Altera公司的FPGA器件为开发平台,采用MATLAB及Verilog HDL语言为开发工具,详细阐述数字调制解调技术的FPGA实现原理、结构、方法和仿真测试过程,并通过大量工程实例分析FPGA实现过程中的具体技术细节。主要包括FPGA实现数字信号处理基础、ASK调制解调、PSK调制解调、FSK调制解调、QAM调制解调,以及扩频通信的设计与实现等内容。本书思路清晰、语言流畅、分析透彻,在简明阐述设计原理的基础上,追求对工程实践的指导性,力求使读者在较短的时间内掌握数字调制解调技术的FPGA设计知识和技能。本书的配套光盘收录了完整的MATLAB及Verilog HDL实例工程代码,有利于工程技术人员参考学习。
前 言 为什么要写这本书 为什么要写这本书?或者说,为什么要写数字通信的MATLAB与FPGA实现技术相关内容的书?记得在电子工业出版社首次出版《数字滤波器的MATLAB与FPGA实现》这本书时,我在前言中提到写作的原因主要有三条:其一是FPGA技术在电子通信领域得到了越来越广泛的应用,并已逐渐成为电子产品实现的首选方案;其二是国内市场上专门讨论如何采用FPGA实现数字通信技术的书籍相对欠缺;其三是数字通信技术本身十分复杂,关键技术较多,在一本书中全面介绍数字通信技术的FPGA实现难免有所遗漏,且内容难以翔实。因此,根据作者从业经验,将数字通信技术的关键技术大致分为滤波器技术、同步技术和解调技术三种,并尝试着先写滤波器技术,再逐渐完成其他两种关键技术的写作。在广大读者的支持和鼓励下,先后又出版了《数字通信同步技术的MATLAB与FPGA实现》和《数字调制解调技术的MATLAB与FPGA实现》两本书。这样,关于数字通信的MATLAB与FPGA实现的系列著作总算完成,多年前的构想总算得以成为现实! 数字通信的MATLAB与FPGA实现的系列著作出版后,陆续通过邮件或博客的方式收到广大读者的反馈意见。一些读者直接通过邮件告知书中的内容对工作中提供的直接或间接的帮助;一些读者提出了很多中肯的有建设性的意见和建议;更多的读者通过邮件交流书中的相关设计问题。在《数字滤波器的MATLAB与FPGA实现》一书出版后,不少读者就建议出版采用Verilog HDL语言作为设计平台的版本。这是很好的建议。其实,虽然在初次写数字滤波器一书时已规划过要完成这一系列的著作,但还没有想到要编写Altera/Verilog HDL版本,否则就会在前面三本书的书名中都加上“Xilinx/VHDL版本”的字样了。时间过得很快,几年时间过去了,在用Xilinx/VHDL平台写完这个系列著作之后,终于可以开始用Altera/Verilog HDL平台将这三本著作重新写一遍,以满足不同读者的需求。 回顾开始策划写作这个系列著作时的想法,显然是受了中学时代阅读的金庸武侠小说的影响,几本经典的小说在人物和情节的安排上很有一脉相承的意味,因此,在这三本著作的内容安排上也考虑了一定的衔接。数字滤波器一书的最后一章讨论解调电路的设计内容,一方面涉及解调电路中的滤波器设计,一方面简单介绍了载波同步的知识;同步技术一书中介绍的滤波器设计内容多引用自滤波器一书,同时重点对载波同步、位同步、帧同步等经典同步技术进行了详细阐述;而滤波器及同步技术又是调制解调技术中的核心功能电路。 著名的计算机科学研究学者李开复先生在他的博客中有下面这样一段话: 西方有一句名言,“听过的我会忘记,看过的我能记得,做过的我才理解”。在学校学习,一定要融会贯通,不能只是死背书本,一定要动手实践。不但要学习知识,还要知道知识应该如何使用。融会贯通意味着高校培养出的学生必须善于将学习到的知识应用于实践中去。在IT领域,许多成功的公司都希望加入公司的毕业生拥有十万行以上的编程经验(例如在Google,很多应聘者都是因为实际动手能力不足而没能通过面试),但不少计算机相关专业的中国学生告诉我说,他们在学校的四年时间里,真正自己动手编写过的程序还不超过一千行。这一方面说明一些学校在教学时不重视对学生实践能力的培养,另一方面也说明许多学生只知道学习“死”的知识,而不知道去寻找或创造机会,以便将学到的知识用在具体的实践当中。 上面这段话道出了绝大多数刚毕业的大学生的状态。回想自己刚离开大学校园后,在初次从事具体的电路设计时所感觉到的茫然仍然清晰如昨日! 通常来讲,一名电子通信专业的技术人员,在从业之初都会遇到类似的困惑:如何将从教材中所学的理论与实际中的工程设计结合起来?如何能够将这些教材中的理论转换成实际的电路?绝大多数数字通信类教材对通信的原理讲解十分透彻,但理论与实践之间显然需要有一座可以顺利通过的桥梁。一个常用的方法是通过采用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实现时,不仅绝大多数实例给出了完整的程序代码,并且从思路和结构上对每段代码均进行详细的分析和说明。根据作者的理解,针对一些似是而非的概念,结合工程实例的仿真测试加以阐述,希望能够对读者提供更多有用的参考。相信读者按照书中讲解的步骤完成一个个工程实例时,会逐步感觉到理论与工程实现之间完美结合的畅快。随着读者掌握的工程实现技能的提高,对通信理论知识的理解也必将越来越深刻,重新阅读以前学过的通信原理时,头脑里就更容易构建起理论知识与工程实践之间的桥梁。 本书的内容安排 第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实现》一书。 第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载波同步原理及实现方法也就比较容易了。插值算法的位同步技术是本章的重点和难点。为了给读者更多的参考,本章还花费了一定的笔墨对作者理解其工作原理及仿真的过程进行了介绍。之所以写这些,是想说明,作为一名工程技术人员,掌握一项技术,首先需要从原理上准确把握其工作机理,对仿真出的各种结果需要做出合理的解释。在遇到理解上的困难时,可以采用各种方式学习借鉴,如查阅资料或论坛求助等,但前提是需要首先花费大量精力对已有的一些基本知识进行消化。掌握的知识越多,积累的工程经验越丰富,学习的速度就越快,对相关领域知识的理解能力就越强,这一定是一个正反馈不断增强的过程。 本书最后一章讨论的是扩频通信系统,伪码同步是其中最核心的技术,扩频通信的抗干扰性能也体现在伪码同步后的解扩上。本章首先对直接序列扩频通信系统的一般原理做了介绍,而后较详细地讨论了直接序列扩频通信系统中的同步原理及方法,并重点分析了本系统所采用的基于滑动相关的捕获方法及基于延迟锁相环的跟踪方法。利用FPGA实现伪码同步电路的关键问题在于合理划分功能模块及准确掌握各功能模块之间的控制与被控制关系和整个系统的时序关系。如果没有Costas载波环的FPGA设计基础,直接学习这一章的内容是比较困难的,不仅是因为直扩解调系统本身需要将载波同步环与伪码同步环有机结合在一起,同时还因为本章在介绍整个环路的Verilog HDL设计时有意略去了载波环相关参数的详细设计方法。学习的过程总是需要循序渐进的,好比共产主义是一个美好的理想,从社会主义初级阶段一步跨入共产主义,从理论和实践上都证明是行不通的。学习过程中的艰难曲折不可避免,但要相信,当彻底掌握到所学的知识后,并熟练应用知识成功解决产品设计中的问题后,再回忆那些冥思苦想、废寝忘食的片段,才可以真正体会到学习的快乐。 关于FPGA开发环境的说明 众所周知,目前两大厂商Xilinx和Altera的产品占据全球90%的FPGA市场。可以说,在一定程度上正是由于两家FPGA公司的相互竞争态势,有力地推动了FPGA技术的不断发展。虽然HDL的编译及综合环境可以采用第三方公司所开发的产品,如ModelSim、Synplify等,但FPGA器件的物理实现必须采用各自公司开发的软件平台,无法通用。Xilinx公司目前的主流开发平台是ISE系列套件,Altera公司目前的主流开发平台是Quartus II系列套件。与FPGA开发平台类似,HDL也存两种难以取舍的选择:VHDL和Verilog HDL。 如何选择开发平台以及HDL语言呢?其实,对于有志于从事FPGA技术开发的技术人员,选择哪种平台及HDL语言并不重要,因为两种平台具有很多相似的地方,精通一种HDL语言后,再学习另一种HDL语言也不是一件困难的事。通常来讲,可以根据周围同事、朋友、同学或公司的主要使用情况进行选择,这样在学习的过程中,可以很方便地找到能够给你指点迷津的专业人士,从而加快学习进度。 本书采用的是Altera公司的FPGA器件作为开发平台,采用Quartus II 12.1作为开发环境,采用Verilog HDL语言作为实现手段。由于Verilog HDL语言并不依赖于某家公司的FPGA产品,因此本书的Verilog HDL程序文件可以很方便地移植到Xilinx公司的FPGA产品上。如果程序中应用了IP核资源,两家公司的IP核通常是不能通用的,这就需要根据IP核的功能参数,在另外一个平台上重新生成IP核,或编写Verilog HDL代码来实现。 有人曾经说过,“技术只是一个工具,关键在于思想。”将这句话套用过来,对于本书来讲,具体的开发平台以及HDL语言只是实现数字通信技术的工具,关键在于设计的思路和方法。因此,读者完全不必要过于在意开发平台的差别,相信只要掌握本书所讲述的设计思路和方法,加上读者已经具备的FPGA开发经验,采用任何一种FPGA平台都可以很快地设计出满足用户需求的产品。 如何使用本书 本书讨论的是数字调制解调技术的MATLAB与FPGA实现。相信大部分工科院校的学生和电子通信的从业人员对MATLAB软件都会有一个基本的了解。由于它的易用性及强大的功能,已经成为数学分析、信号仿真、数字处理必不可少的工具。由于MATLAB具有大量专门针对数字信号处理的常用函数,如滤波器函数、傅里叶分析函数等,十分有利于对一些通信的概念及信号进行功能性仿真,因此,在具体讲解某个实例时,通常会采用MATLAB作为仿真验证工具。虽然书中的MATLAB程序相对比较简单,主要应用一些数字信号处理函数进行仿真验证,如果读者没有MATLAB的知识基础,建议最好还是先简单学习一下MATLAB的编程概念及基本语法。考虑到程序及函数的兼容性,书中所有MATLAB程序的开发验证平台均为MATLAB 7.0版软件。 在讲解具体的FPGA工程应用实例时,通常会先采用MATLAB对所需设计的工程进行仿真,一方面仿真算法过程及结果,另一方面生成FPGA仿真所需要的测试数据;然后在Quartus II平台上编写Verilog HDL程序对实例进行设计实现,为便于讲述,通常会先讨论程序的设计思路,或者先给出程序清单,再对程序代码进行分析说明;编写完程序后,需要编写TestBench测试激励文件,根据所需产生输入信号的种类,可以直接在TestBench文件中编写代码来产生输入信号,也可以通过读取外部文本文件的方式来产生输入信号;接下来就可以采用ModelSim工具对Verilog HDL程序进行仿真,查看ModelSim仿真波形结果,并根据需要将仿真数据写入外部文本文件中,通常还会对仿真波形进行讨论,分析仿真结果是否满足要求;如果ModelSim波形不便于精确分析测试结果,则需要再次编写MATLAB程序,对ModelSim仿真结果数据进行分析处理,最终验证FPGA设计的正确性。 本书主要以工程应用实例的方式讲解各种数字调制解调技术的原理及FPGA实现方法和步骤。大部分实例均给出了完整的程序清单,限于篇幅,不同工程实例中的一些重复或相似的代码没有完全列出,随书配套的光盘上收录了本书所有实例的源程序及工程设计资源,并按章节序号置于光盘根目录下。本书在编写工程实例时,程序文件均放置在“D:ModemPrograms”的文件夹下,读者可以先在本地硬盘下建立“D:ModemPrograms”文件夹,而后将配套光盘中的程序压缩包解压至该文件夹下,大部分程序均可直接运行。需要说明的是,在大部分工程实例中,需要由MATLAB产生FPGA测试所需的文本数据文件,或者由MATLAB读取外部文件进行数据分析,同时FPGA仿真的TestBench文件通常也需要从指定的路径下读取外部文件数据,或将仿真结果输出到指定的路径下。文本文件的路径均指定为绝对路径,如“fid=fopen('D: ModemPrograms Chapter_4din.txt','w')”。因此,读者运行实例程序时,请将程序文件中指定文件绝对路径的代码进行修改,以确保仿真测试程序在正确的路径下对文件进行读/写操作。 致谢 有人说,每个人都有他存在的使命,如果迷失他的使命,就失去了他存在的价值。不只是每个人,每件物品也都有其存在的使命。对于一本书来讲,其存在的使命就是被阅读,并给阅读者带来收获。数字通信的MATLAB与FPGA设计系列的书,能够对读者在工作及学习中有所帮助,是作者莫大的欣慰。 作者在写作本书的过程中查阅了大量的资料,在此对资料的作者及提供者表示衷心的感谢。由于写作本书的缘故,重新阅读一些经典的数字通信理论书籍时,再次深刻感受到前辈们严谨的治学态度和细致的写作作风。 在此,感谢父母,几年来一直陪伴在我的身边,由于他们的默默支持,使得我能够在家里专心致志地写作;感谢我的妻子刘帝英女士,她不仅是一位尽心尽职的优秀母亲,也是一位严谨细致的科技工作者,同时也是本书的第一位读者,在工作之余对本书进行了详尽而细致的校对;时间过得很快,女儿已经上小学四年级了,她最爱看书和画画,最近迷上了《西游记》,以前的儿童简化版已满足不了她的要求,周末陪她去书店买了一本原著,她常常自个儿被书中的情节逗得哈哈大笑,还常常要推荐给我看一些精彩的章节。 FPGA技术博大精深,数字通信技术种类繁多且实现难度大。本书虽尽量详细讨论了FPGA实现数字调制解调技术的相关内容,仍感觉到难以详尽叙述工程实现所有细节。相信读者在实际工程应用中经过不断的实践、思考及总结,一定可以快速掌握数字调制解调技术的工程设计方法,提高应用FPGA进行工程设计的能力。由于作者水平有限,不足之处在所难免,敬请读者批评指正。欢迎大家就相关技术问题进行交流,或对本书提出改进意见及建议。请读者访问网址http://duyongcn.blog.163.com以获得与该书相关的资料及信息,也可以发邮件至duyongcn@sina.cn与我进行交流。 杜 勇 2015年3月
第1章 数字通信及FPGA概述 1 1.1 数字通信系统概述 2 1.1.1 数字通信的一般处理流程 2 1.1.2 本书讨论的通信系统模型 4 1.1.3 数字通信的特点及优势 5 1.1.4 数字通信的发展概述 8 1.2 数字通信中的几个基本概念 10 1.2.1 与频谱相关的概念 10 1.2.2 带宽是如何定义的 13 1.2.3 采样与频谱搬移 16 1.2.4 噪声与信噪比 19 1.3 FPGA的基础知识 21 1.3.1 从晶体管到FPGA 21 1.3.2 FPGA的发展趋势 25 1.3.3 FPGA的组成结构 26 1.3.4 FPGA的工作原理 31 1.4 FPGA与其他处理平台的比较 33 1.4.1 ASIC、DSP及ARM的特点 33 1.4.2 FPGA的特点及优势 34 1.5 Altera器件简介 35 1.6 小结 37 参考文献 37 第2章 设计语言及环境介绍 39 2.1 HDL语言简介 40 2.1.1 HDL语言的特点及优势 40 2.1.2 选择VHDL还是Verilog 41 2.2 Verilog HDL语言基础 42 2.2.1 Verilog HDL语言特点 42 2.2.2 Verilog HDL程序结构 44 2.3 FPGA开发工具及设计流程 45 2.3.1 Quartus II开发套件 45 2.3.2 ModelSim仿真软件 49 2.3.3 FPGA设计流程 50 2.4 MATLAB软件 53 2.4.1 MATLAB软件简介 53 2.4.2 常用的信号处理函数 55 2.5 MATLAB与Quartus的数据交换 62 2.6 小结 63 参考文献 63 第3章 FPGA实现数字信号处理基础 65 3.1 FPGA中数的表示 66 3.1.1 莱布尼兹与二进制 66 3.1.2 定点数表示 67 3.1.3 浮点数表示 68 3.2 FPGA中数的运算 71 3.2.1 加/减法运算 71 3.2.2 乘法运算 74 3.2.3 除法运算 75 3.2.4 有效数据位的计算 75 3.3 有限字长效应 78 3.3.1 字长效应的产生因素 78 3.3.2 A/D转换的字长效应 79 3.3.3 系统运算中的字长效应 80 3.4 FPGA中的常用处理模块 82 3.4.1 加法器模块 82 3.4.2 乘法器模块 84 3.4.3 除法器模块 87 3.4.4 浮点运算模块 88 3.5 小结 89 参考文献 90 第4章 滤波器的MATLAB与FPGA实现 91 4.1 滤波器概述 92 4.1.1 滤波器的分类 92 4.1.2 滤波器的特征参数 94 4.2 FIR与IIR滤波器的原理 94 4.2.1 FIR滤波器原理 94 4.2.2 IIR滤波器原理 96 4.2.3 IIR与FIR滤波器的比较 96 4.3 FIR滤波器的MATLAB设计 97 4.3.1 采用fir1函数设计 97 4.3.2 采用kaiserord函数设计 100 4.3.3 采用fir2函数设计 100 4.3.4 采用firpm函数设计 102 4.4 IIR滤波器的MATLAB设计 104 4.4.1 采用butter函数设计 104 4.4.2 采用cheby1函数设计 105 4.4.3 采用cheby2函数设计 106 4.4.4 采用ellip函数设计 106 4.4.5 采用yulewalk函数设计 107 4.4.6 几种设计函数的比较 107 4.5 FIR滤波器的FPGA实现 109 4.5.1 FIR滤波器的实现结构 109 4.5.2 采用IP核实现FIR滤波器 113 4.5.3 MATLAB仿真测试数据 118 4.5.4 测试激励的Verilog HDL设计 120 4.5.5 FPGA实现后的仿真测试 123 4.6 IIR滤波器的FPGA实现 125 4.6.1 IIR滤波器的结构形式 125 4.6.2 量化级联型结构的系数 127 4.6.3 级联型结构的FPGA实现 130 4.6.4 FPGA实现后的测试仿真 134 4.7 小结 135 参考文献 135 第5章 ASK调制解调技术的实现 137 5.1 ASK信号的调制解调原理 138 5.1.1 二进制振幅调制信号的产生 138 5.1.2 二进制振幅调制信号的解调 139 5.1.3 二进制振幅调制系统的性能 141 5.1.4 多进制振幅调制 142 5.2 ASK调制信号的MATLAB仿真 142 5.3 ASK调制信号的FPGA实现 145 5.3.1 FPGA实现模型及参数说明 145 5.3.2 ASK调制信号的Verilog HDL设计 147 5.3.3 FPGA实现后的仿真测试 149 5.4 ASK解调技术的MATLAB仿真 150 5.5 ASK解调技术的FPGA实现 152 5.5.1 FPGA实现模型及参数说明 152 5.5.2 ASK信号解调的Verilog HDL设计 153 5.5.3 FPGA实现后的仿真测试 154 5.6 符号判决门限的FPGA实现 156 5.6.1 确定ASK解调后的判决门限 156 5.6.2 判决门限模块的Verilog HDL设计 157 5.6.3 FPGA实现后的仿真测试 158 5.7 锁相环位同步技术的FPGA实现 159 5.7.1 位同步技术的工作原理 159 5.7.2 位同步顶层模块的Verilog HDL设计 162 5.7.3 双相时钟信号的Verilog HDL实现 164 5.7.4 微分鉴相模块的Verilog HDL实现 166 5.7.5 单稳触发器的Verilog HDL实现 168 5.7.6 控制及分频模块的Verilog HDL实现 169 5.7.7 FPGA实现及仿真测试 171 5.8 ASK解调系统的FPGA实现及仿真 173 5.8.1 完整解调系统的Verilog HDL设计 173 5.8.2 完整系统的仿真测试 175 5.9 小结 177 参考文献 177 第6章 FSK调制解调技术的实现 179 6.1 FSK信号的调制解调原理 180 6.1.1 FSK信号的时域表示 180 6.1.2 相关系数与频谱特性 181 6.1.3 非相干解调原理 183 6.1.4 相干解调原理 184 6.1.5 解调方法的应用条件分析 186 6.2 FSK调制解调的MATLAB仿真 186 6.2.1 不同调制度的FSK信号仿真 186 6.2.2 非相干解调FSK仿真 188 6.2.3 相干解调FSK仿真 193 6.3 FSK调制信号的FPGA实现 196 6.3.1 FSK信号的产生方法 196 6.3.2 FSK调制信号的Verilog HDL设计 197 6.3.3 FPGA实现后的仿真测试 198 6.4 FSK解调的FPGA实现 199 6.4.1 解调模型及参数设计 199 6.4.2 解调FSK信号的Verilog HDL设计 200 6.4.3 FPGA实现后的仿真测试 206 6.5 MSK信号产生原理 208 6.5.1 MSK信号时域特征 208 6.5.2 MSK信号频谱特性 209 6.5.3 MSK信号的产生方法 210 6.6 MSK调制信号的FPGA实现 212 6.6.1 实例参数及模型设计 212 6.6.2 MSK调制信号的Verilog HDL设计及仿真 213 6.7 MSK解调原理 214 6.7.1 延迟差分解调 214 6.7.2 平方环相干解调 216 6.8 MSK解调的MATLAB仿真 217 6.8.1 仿真模型及参数说明 217 6.8.2 平方环解调MSK的MATLAB仿真 217 6.9 平方环的FPGA实现 220 6.9.1 锁相环的工作原理 220 6.9.2 平方环的工作原理 223 6.9.3 平方环路性能参数设计 224 6.9.4 平方环的Verilog HDL设计 227 6.9.5 FPGA实现后的仿真测试 231 6.10 MSK解调的FPGA实现 232 6.10.1 MSK解调环路参数设计 232 6.10.2 顶层模块的Verilog HDL设计 234 6.10.3 脉冲成形及解调模块的Verilog HDL设计 239 6.10.4 FPGA实现后的仿真测试 242 6.11 小结 243 参考文献 244 第7章 PSK调制解调技术的实现 245 7.1 DPSK信号的调制解调原理 246 7.1.1 DPSK信号的调制原理 246 7.1.2 Costas环解调DPSK信号 247 7.1.3 DPSK调制解调的MATLAB仿真 249 7.2 DPSK解调的FPGA实现 252 7.2.1 环路性能参数设计 252 7.2.2 Costas环的Verilog HDL设计 254 7.2.3 FPGA实现后的仿真测试 258 7.3 DQPSK信号的调制解调原理 258 7.3.1 QPSK信号的调制原理 258 7.3.2 双比特码元差分编解码原理 260 7.3.3 DQPSK信号解调原理 261 7.3.4 DQPSK调制解调的MATLAB仿真 264 7.4 DQPSK调制信号的FPGA实现 268 7.4.1 差分编/解码的Verilog HDL设计 268 7.4.2 DQPSK调制信号的Verilog HDL设计 271 7.5 DQPSK解调的FPGA实现 277 7.5.1 极性Costas环的Verilog HDL设计 277 7.5.2 FPGA实现后的仿真测试 282 7.5.3 调整跟踪策略获取良好的跟踪性能 283 7.5.4 完整的DQPSK解调系统设计 285 7.5.5 DQPSK解调系统的仿真测试 289 7.6 /4 QPSK调制解调原理 289 7.6.1 /4 QPSK信号的调制原理 289 7.6.2 匹配滤波器与成形滤波器 291 7.6.3 /4 QPSK信号的差分解调原理 297 7.6.4 /4 QPSK调制解调的MATLAB仿真 297 7.7 /4 QPSK调制解调的FPGA实现 301 7.7.1 基带编码的Verilog HDL设计 301 7.7.2 差分解调的Verilog HDL设计 305 7.7.3 FPGA实现后的仿真测试 311 7.8 小结 312 参考文献 312 第8章 QAM调制解调技术的FPGA实现 315 8.1 QAM信号的调制解调原理 316 8.1.1 QAM调制解调系统组成 316 8.1.2 差分编码与星座映射 317 8.1.3 QAM调制解调的MATLAB仿真 319 8.2 QAM编/解码的FPGA实现 323 8.2.1 编码映射的Verilog HDL设计 323 8.2.2 解码模块的Verilog HDL设计 326 8.2.3 FPGA实现后的仿真测试 328 8.3 QAM载波同步的FPGA实现 328 8.3.1 QAM载波同步原理 329 8.3.2 极性判决法载波同步的FPGA实现 332 8.3.3 DD算法载波同步的FPGA实现 336 8.4 插值算法位同步技术原理 344 8.4.1 位同步技术分类及组成 344 8.4.2 内插滤波器原理及结构 346 8.4.3 Gardner误差检测算法 348 8.4.4 环路滤波器与数控振荡器 349 8.5 插值算法位同步技术的MATLAB仿真 350 8.5.1 设计环路滤波器系数 351 8.5.2 分析位定时算法MATLAB仿真程序 351 8.5.3 完整的QAM位定时算法仿真 356 8.6 插值算法位同步技术的FPGA实现 358 8.6.1 顶层模块的Verilog HDL设计 358 8.6.2 插值滤波模块的Verilog HDL设计 361 8.6.3 误差检测及环路滤波器模块的Verilog HDL设计 363 8.6.4 数控振荡器模块的Verilog HDL设计 366 8.6.5 FPGA实现后的仿真测试 367 8.7 小结 371 参考文献 372 第9章 扩频调制解调技术的FPGA实现 375 9.1 扩频通信的基本原理 376 9.1.1 扩频通信的概念 376 9.1.2 扩频通信的种类 377 9.1.3 直扩系统工作原理 380 9.2 直扩调制信号MATLAB仿真 381 9.2.1 伪码序列的产生原理 381 9.2.2 MATLAB仿真直扩调制信号 382 9.3 直扩信号调制的FPGA实现 386 9.3.1 伪码模块的Verilog HDL设计 386 9.3.2 扩频调制模块的Verilog HDL设计 388 9.4 伪码同步的一般原理 391 9.4.1 滑动相关捕获原理 392 9.4.2 延迟锁相环跟踪原理 393 9.5 伪码同步算法设计及仿真 394 9.5.1 同步算法设计 394 9.5.2 捕获及跟踪门限的MATLAB仿真 396 9.6 伪码同步的FPGA实现 398 9.6.1 顶层模块的Verilog HDL设计 398 9.6.2 伪码产生模块的Verilog HDL设计 401 9.6.3 相关积分模块的Verilog HDL设计 404 9.6.4 伪码相位调整模块的Verilog HDL设计 405 9.6.5 FPGA实现后的仿真测试 407 9.7 直扩解调系统的FPGA实现 409 9.7.1 Costas载波环的Verilog HDL设计 409 9.7.2 FPGA实现后的仿真测试 415 9.8 小结 416 参考文献 417