第1版前言

为什么要写这本书

为什么要写这本书呢?或者说为什么要写数字通信技术的MATLAB与FPGA实现相关内容的书呢?记得在电子工业出版社出版《数字滤波器的MATLAB与FPGA实现》时,我在前言中提到写作的原因主要有三条:其一是FPGA在电子通信领域得到了越来越广泛的应用,并已逐渐成为电子产品实现的首选方案;其二是国内市场上专门讨论如何采用FPGA实现数字通信技术的书籍相对欠缺;其三是数字通信技术本身十分复杂,关键技术较多,在一本书中全面介绍数字通信技术的FPGA实现时难免有所遗漏,且内容难以翔实。因此,根据自己从业经验,将数字通信的关键技术大致分为滤波器技术、同步技术和调制解调技术三种,并尝试着先写滤波器技术,再逐步完成其他两种技术的写作。在广大读者的支持和鼓励下,先后又出版了《数字通信同步技术的MATLAB与FPGA实现》和《数字调制解调技术的MATLAB与FPGA实现》。这样,关于数字通信技术的MATLAB与FPGA实现的系列著作总算得以完成,多年前的构想总算成为现实!

自数字通信技术的MATLAB与FPGA实现的系列著作出版后,陆续通过邮件或博客的方式收到广大读者的反馈意见。一些读者直接通过邮件告知书中的内容对工作的帮助;一些读者提出了很多中肯的、有建设性的意见和建议;更多的读者通过邮件交流书中的相关设计问题。《数字滤波器的MATLAB与FPGA实现》采用Xilinx公司的FPGA和VHDL作为开发平台(Xilinx/VHDL版),该书出版后,不少读者建议出版采用Verilog HDL作为开发平台的版本。这是个很好的建议。在Xilinx/VHDL版顺利出版之后,终于可以开始Altera/Verilog版的写作了,以满足不同读者的需求。

回顾写作这套图书时的想法,作者显然是受了中学时代阅读的金庸先生的武侠小说的影响,金庸先生的几本经典小说在人物和情节的安排上是一脉相承的,因此,在这套图书的内容安排上也考虑了一定的衔接性。《数字滤波器的MATLAB与FPGA实现》的最后一章讨论的是调制解调方面的内容,一方面涉及了调制解调中的滤波器设计,另一方面简单地介绍了载波同步的知识。《数字通信同步技术的MATLAB与FPGA实现》中介绍的滤波器设计的内容多引自《数字滤波器的MATLAB与FPGA实现》,重点对载波同步、位同步、帧同步等经典的同步技术进行了详细的阐述。滤波器及同步技术又是调制解调技术中的核心功能电路。

李开复先生在他的博客中有下面这段话:

西方有一句名言,“听过的我会忘记,看过的我能记得,做过的我才理解”。在学校学习时,一定要做到融会贯通,不能只死背书本,一定要动手实践。不但要学习知识,还要知道应该如何使用知识。融会贯通意味着高校培养出的学生必须善于将学习到的知识应用于实践。在IT领域,许多公司都希望加入公司的毕业生拥有10万行代码以上的编程经验(例如,在Google,很多应聘者都因为实际动手能力不足而没能通过面试),但不少计算机相关专业的中国学生告诉我说,他们在学校的四年时间里,自己真正动手编写过的程序还不超过1000行。这一方面说明了一些学校在教学时不重视对学生实践能力的培养,另一方面也说明了很多学生只知道学习“死”的知识,而不知道去寻找或创造机会来将学到的知识用在具体的实践中。

上面这段话道出了绝大多数刚毕业的大学生的状态。回想自己刚离开大学校园后,在初次从事具体的电路设计时所感觉到的茫然仍然清晰如昨日!

作为一名电子通信领域的技术人员,在从业之初通常都会遇到类似的困惑:如何将从教材中所学到的理论知识与实际中的工程设计结合起来?如何将这些教材中的理论知识转换成实际的电路?绝大多数的数字通信类教材对通信原理的讲解都十分透彻,但理论与实践之间显然需要有一座可以顺利通过的桥梁。一个常用的方法是通过采用MATLAB等工具进行软件仿真来加深对理论知识的理解,但更好的方法显然是直接参与工程的设计与实现。

然而,在校学生极少有机会参与实际工程的设计,在工作中往往感到学校所学的理论知识很难与实际的工程联系起来。教科书上讲解的是原理性的内容,即使可以很好地解答教科书中的习题,或者能够熟练地推导书中的公式,但在进行工程设计时,如何用具体的电路或硬件平台来实现这些理论知识及公式,仍然是广大工程师面临的一个巨大难题。对于数字通信专业来讲,由于其涉及的理论知识比较复杂,在真正进行工程设计时会发现根本无从下手。采用MATLAB、System View等软件对通信理论进行仿真,虽然可以直观地验证算法的正确性,并查看仿真结果,但这类软件的仿真仅仅停留在算法或模型上,与真正的工程设计及实现完全是两个不同的概念。FPGA很好地解决了这一问题。FPGA本来就是基于工程应用的,其仿真技术可以很好地仿真实际的工作情况。尤其是时序仿真技术,在计算机上通过了时序仿真的程序,几乎不再需要修改就可以直接应用到工程中。这种设计、验证、仿真的一体化,可以极好地将理论知识与工程实践完美地结合起来,从而提高学习的兴趣。

FPGA具有快速的并行运算能力,以及独特的组成结构,已成为电子通信领域必不可少的实现平台之一。本书的目的正是架起一座理论知识与工程实践之间的桥梁,通过具体的设计实例,详细讲解从理论到工程实现的方法、步骤和过程,以便工程技术人员能够尽快掌握利用FPGA实现数字通信技术的方法。

目前,市场上已有很多介绍ISE、Quartus II等FPGA开发环境,以及VHDL、Verilog HDL等硬件描述语言的图书。如果我们仅仅使用FPGA来实现一些数字逻辑电路,或者理论性不强的控制电路,掌握FPGA开发工具及VHDL的语法就可以开始工作了。数字通信的理论性要强得多,采用FPGA实现数字通信技术的前提条件是要对理论知识有深刻的理解。在理解理论知识之后,关键的问题是根据这些理论知识,利用FPGA的特点,找到合适的算法实现结构,厘清工程实现的思路,并采用VHDL、Verilog HDL等硬件描述语言进行实现。因此,要想顺利地读懂本书,读者除了要掌握数字通信的理论知识,还需要对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调制解调技术的讨论,读者会对数字调制解调技术的整个设计流程有了一个初步的认识,甚至觉得工程设计并不是多么困难的事。建立信心是很重要的,但也要有一定的思想准备,并非所有数字调制解调技术都像第5章介绍的那么简单。第6章前半部分讨论了FSK调制解调技术,无论理论知识还是工程实现的难度都不大;后半部分详细讨论了MSK调制解调技术,其原理及工程实现都已有一定规模了,无论从原理还是从工程实现来讲,要完全掌握其设计流程和方法,都需要花一番工夫才行。不过也不用过于担心,读者跟着书中介绍的步骤,一步步完成整个MSK信号解调的FPGA工程实现,并在ModelSim仿真波形中看到一条条光滑的收敛曲线时,一定会产生一种成就感,设计的信心也会随之增加。

第7章讨论了三种典型的相位调制系统:BPSK、QPSK及π/4 QPSK。Costas环是一种非常经典的锁相环,是BPSK信号解调中常用的电路,绝大多数电子通信领域的读者对此都不会陌生。在设计完成Costas环后,采用ModelSim仿真环路的收敛性能,在波形界面看到完美的收敛曲线时,相信读者会感到工程设计成功的喜悦,一些原本只存在于教科书中的理论,已经演变成现实的工程设计了。本章进一步探讨了QPSK及π/4 QPSK调制解调制的过程,为了给读者更多的参考,在解调时分别采用了相干解调法和非相干解调法。

第8章讨论了一个比较完整的QAM调制解调系统,比较详细地介绍了从原理到MATLAB仿真,再到FPGA实现的过程。QAM是一种应用十分广泛的调制方式,相比前面讨论的调制方式,无论工作原理还是实现过程,都显得更为复杂。从整个QAM调制解调的实现过程来看,关键问题仍然是载波同步及位同步。其中,载波同步的相关内容与前面所讨论的锁相环有很强的关联性,如果读者通过前面章节已经对锁相环有了深刻的认识,则理解QAM载波同步原理及实现方法就相对比较容易了。插值算法位同步技术是本章的重点和难点,为了给读者更多的参考,本章还对插值算法的工作原理及仿真的过程进行了介绍。之所以介绍这些内容,是想说明,作为一名工程技术人员,掌握一项技术时首先要从原理上准确把握这项技术的工作机理,能够对仿真结果做出合理的解释。在遇到困难时,可以采用各种方式学习借鉴,如查阅资料或论坛求助等,但前提是需要花费大量精力对已有的基本知识进行消化。掌握的知识越多,积累的工程经验越丰富,学习的速度就越快,对相关领域知识的理解就越深刻,这是一个正反馈不断增强的过程。

本书最后一章讨论的是扩频调制解调技术,伪码同步是其中的核心技术,扩频通信的抗干扰性能也体现在伪码同步后的解扩上。本章首先介绍了直扩系统的原理,然后比较详细地讨论了直扩系统的同步原理及方法,并重点分析了本书所采用的滑动相关捕获法和延迟锁相环的原理。利用FPGA实现伪码同步环的关键在于合理划分功能模块,以及准确掌握各功能模块之间的控制与被控制关系以及整个系统的时序关系。如果没有Costas环的FPGA设计基础,直接学习本章内容是比较困难的,不仅是因为直扩系统解调系统本身需要将载波同步环与伪码同步环有机结合在一起,还因为本章在介绍整个环路的Verilog HDL设计时有意略去了载波同步环相关参数的设计方法。

关于FPGA开发环境的说明

众所周知,目前Xilinx公司和Altera公司的产品占据全球约90%的FPGA市场。可以说,在一定程度上正是由于这两大厂商的相互竞争态势,才有力地推动了FPGA的不断发展。虽然硬件描述语言的编译及综合环境可以采用第三方公司所开发的产品,如ModelSim、Synplify等,但FPGA的实现必须采用各自公司开发的软件平台,无法通用。目前,Xilinx公司的主流开发平台是ISE系列套件,Altera公司的主流开发平台是Quartus II系列套件。与FPGA开发平台类似,硬件描述语言也存在两种难以取舍的选择:VHDL和Verilog HDL。

如何选择开发平台以及硬件描述语言呢?其实,对于有志于从事FPGA开发的技术人员来说,选择哪种平台及硬件描述语言并不重要,因为两种平台具有很多相似的地方,精通一种硬件描述语言后,再学习另一种也不是一件困难的事。通常可以根据周围同事、朋友、同学或公司的主要使用情况来选择,这样在学习的过程中可以方便地找到能够给你指点迷津的专业人士,从而加快学习的进度。

本书采用Altera公司的FPGA作为开发平台,采用Quartus II作为开发环境,采用Verilog HDL作为实现手段。由于Verilog HDL并不依赖于具体的FPGA,因此本书的Verilog HDL程序可以很方便地移植到其他FPGA上。如果程序中应用了IP核,不同公司的IP核通常是不能通用的,这就需要根据IP核的功能参数,在另外一个平台上重新生成IP核,或编写Verilog HDL代码来实现IP核。

有人曾经说过,技术只是一个工具,关键在于思想。将这句话套用过来,对于本书来讲,具体的开发平台和硬件描述语言只是实现数字通信技术的工具,关键在于设计的思路和方法。因此,读者完全不必要过于在意开发平台的差别,只要掌握本书所讲述的设计思路和方法,加上读者已经具备的FPGA开发经验,采用任何一种开发平台和硬件描述语言都可以很快地设计出满足用户需求的产品。

如何使用本书

本书讨论的是数字调制解调技术的MATLAB与FPGA实现。相信大部分工科院校的学生和电子通信的从业人员对MATLAB都有一个基本的了解。由于MATLAB的易用性及强大的功能,已经成为数学分析、信号仿真、数字处理必不可少的工具。另外,MATLAB具有大量专门针对数字信号处理的常用函数,如滤波器函数、傅里叶分析函数等,十分有利于对一些通信的概念及信号进行功能性仿真,因此,本书在讲解具体的工程实例时,通常会采用MATLAB作为仿真验证工具。虽然本书中的MATLAB程序相对比较简单,主要应用一些数字信号处理函数进行仿真验证,但如果读者没有MATLAB的基础知识,还是建议先简单地学习MATLAB的编程概念及基本语法。考虑到程序及函数的兼容性,书中所有MATLAB程序的开发验证平台均为MATLAB 7.0。

在讲解具体的FPGA工程实例时,通常会先采用MATLAB对所需设计的工程进行仿真,一方面可以仿真算法过程及结果,另一方面可以生成FPGA仿真所需要的测试数据。在Quartus II平台上编写Verilog HDL程序时,为了便于讲述,通常会先讨论程序的设计思路,或者先给出程序清单,然后对程序代码进行分析说明。在编写完程序后,还需要编写TestBench文件,根据所需产生输入信号的种类,可以直接在TestBench文件中编写代码来产生输入信号,也可以通过读取外部TXT文件的方式来产生输入信号;接下来就可以采用ModelSim对Verilog HDL程序进行仿真了,查看ModelSim仿真波形,并根据需要将仿真数据写入外部TXT文件,通常还会对仿真波形进行分析,查看仿真结果是否满足要求。如果ModelSim波形不便于精确地分析测试结果,则需要再次编写MATLAB程序来对ModelSim仿真结果进行分析处理,最终验证FPGA设计的正确性。

本书主要以工程实例的方式讲解各种数字调制解调技术的原理以及FPGA实现方法和步骤。大部分工程实例均给出了完整的程序清单,但限于篇幅,不同工程实例中的一些重复或相似的代码并没有完全列出,本书的配套资料收录了所有工程实例的源程序及工程设计资源,并按章节序号存放在配套资料的根目录下。本书在编写工程实例时,程序文件均放置在“D:\ModemPrograms”的文件夹下,读者可以先在本地硬盘下建立“D:\ModemPrograms”文件夹,然后将配套资料中的程序压缩包解压至该文件夹下,大部分程序均可直接运行。需要说明的是,在大部分工程实例中,需要由MATLAB产生FPGA测试所需的数据,或者由MATLAB读取外部TXT文件的数据,同时FPGA仿真用的TestBench文件通常也需要从指定的路径下读取外部TXT文件的数据,或将仿真结果输出到指定的路径下。文件的路径均为绝对路径,如“fid=fopen('D:\ModemPrograms\Chapter_4\din.txt','w');”,读者运行程序时,请修改用于指定文件路径的代码,以确保仿真测试程序在正确的路径下对文件进行操作。

致谢

有人说,每个人都有他存在的使命,如果迷失他的使命,就失去了他存在的价值。不只是每个人,每件物品也都有其存在的使命。对于一本书来讲,其存在的使命就是被阅读,并给阅读者带来收获。数字通信的MATLAB与FPGA设计系列图书,能够对读者的工作和学习有所帮助,是作者莫大的欣慰。

在写作本书的过程中,作者查阅了大量的资料,在此对资料的作者及提供者表示衷心的感谢。由于写作的缘故,作者重新阅读一些经典的数字通信书籍时,再次深刻感受到了前辈们严谨的治学态度和细致的写作作风。

在此,感谢我的父母,几年来一直陪伴在我的身边,正是他们的默默支持,才让我能够在家里专心致志地写作。感谢我的妻子刘帝英女士,她不仅是一位尽心尽职的母亲,也是一位严谨细致的科技工作者,同时也是本书的第一位读者,在工作之余对本书进行了细致的校对。时间过得很快,女儿已经上小学四年级了,她最爱看书和画画,最近迷上了《西游记》,以前的儿童简化版已满足不了她的要求,周末陪她去书店买了一本原著,她自己常常被书中的情节逗得哈哈大笑,还常常推荐一些精彩的章节给我看。

FPGA技术博大精深,数字通信技术繁多且实现难度大。本书虽尽量详细讨论了FPGA实现数字调制解调技术的相关内容,仍感觉到难以详尽叙述工程实现的所有细节。相信读者在实际工程应用中经过不断实践、思考及总结,一定可以快速掌握数字调制解调技术的工程设计方法,提高应用FPGA进行工程设计的能力。由于作者水平有限,不足之处在所难免,敬请广大读者批评指正。欢迎大家就相关技术问题与我进行交流,或对本书提出改进意见及建议。请读者访问网址http://duyongcn.blog.163.com以获得与该书相关的资料及信息,也可以发邮件至duyongcn@sina.cn与我进行交流。

杜 勇

2015年3月