数字调制解调技术的MATLAB与FPGA实现-设计语言及环境介绍 【2.0】

2.4 MATLAB 软件

2.4.1 MATLAB 软件简介

1.MATLAB 软件介绍
        20世纪70年代,美国新墨西哥大学计算机科学系主任CleveMoler 为了减轻学生编程的负担,用FORTRAN编写了最早的MATLAB。1984年由Litle、Moler、Steve Bangert 合作成立了的 MathWorks 公司正式把 MATLAB 推向市场。到20世纪90年代,MATLAB 已成为国际控制界的标准计算软件。为便于程序的通用性,本书使用MATLAB7.0版本软件进行设计及讲解。
        MATLAB 是由美国MathWorks公司发布的主要面对科学计算、可视化,以及交互式程序设计的高科技计算环境,它将数值分析、矩阵计算、科学数据可视化,以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计,以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平,它在数学类科技应用软件中的数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通信、图像处理、信号检测、金融建模设计与分析等领域。
        MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用 MATLAB 来解算问题要比用C、FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中还加入了对C、FORTRAN、C++、Java的支持。用户可以直接调用,也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接下载使用。
2.MATLAB 工作界面
        MATLAB的工作界面简单、明了,易于操作。正确安装好软件后,依次单击“开始一所有程序→MATLAB7.0”即可打开 MATLAB7.0软件,工作界面如图 2-15 所示。

        命令窗口是 MATLAB的主窗口。在命令窗口中可以直接输入命令,系统将自动显示命令执行后的信息。如果一条命令语句过长,需要两行或多行才能输入完毕,则要使用“…”作连接符号,按 Enter 键转入下一行继续输入。另外,在命令窗口输入命令时,可利用快捷键十分方便地调用或修改以前输入的命令。如通过向上键1可重复调用上一个命令行,对它加以修改后直接按 Enter 键执行,在执行命令时不需要将光标移至行尾。命令窗口只能执行单条命令,用户可通过创建M 文件(后缀名为“m”的文件)来编辑多条命令语句,在命令窗口中输入M 文件的名称,即可依次执行M文件中所有命令语句。
        命令历史窗口用于显示用户在命令窗口中执行过的命令,用户也可直接双击历史窗口中的命令来执行该命令,也可以在选中某条或多条命令后,执行复制、剪切等操作;工作空间窗口用于显示当前工作环境中所有创建的变量信息:单击工作空间窗口下的“CurrentDirectory”标签可打开当前工作路径窗口,该窗口用于显示当前工作在什么路径下,包括M文件的打开路径等。
3.MATLAB 的特点及优势
        MATLAB的主要特点及优势体现在以下几个方面。

        (1)友好的工作平台和编程环境。MATLAB由一系列工具组成。这些工具方便用户使用 MATLAB 的函数和文件,其中许多工具采用的是图形用户界面,包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。随着MATLAB的商业化,以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近 Windows 的标准界面,人机交互性更强,操作更简单。而且新版本的 MATLAB 提供了完整的联机查询、帮助系统,极大地方便了用户的使用。简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时报告出现的错误并分析出错原因。
        (2)简单易用的程序语言。MATLAB使用高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入/输出和面向对象的编程语言。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好较为复杂的应用程序(M文件)后再运行。MATLAB的底层语言为C++语言,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式,因而更利于非计算机专业的科技人员使用。这种语言可移植性好、可拓展性极强,这也是 MATLAB 能够深入到科学研究及工程计算各个领域的重要原因。

        (3)强大的科学计算机数据处理能力。MATLAB是一个包含大量计算算法的集合,拥有600多个工程中要用到的数学运算函数,可以方便地实现用户所需的各种计算功能。函数中所使用的算法都是科研和工程计算中的最新研究成果,且经过了各种优化和容错处理。在通常情况下,可以用它来代替底层编程语言,如C和C++语言。在计算要求相同的情况下,使用 MATLAB 的编程工作量会大大减少。MATLAB的这些函数集包括最简单最基本的函数,以及诸如矩阵、特征向量、快速傅里叶变换的复杂函数。函数所能解决的问题大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程组的求解、符号运算、傅里叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作,以及建模动态仿真等。
        (4)出色的图形处理功能。MATLAB自产生之日起就具有方便的数据可视化功能,可将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。高层次的作图包括二维和三维的可视化、图像处理、动画和表达式作图,可用于科学计算和工程绘图。MATLAB的图形处理功能十分强大,它不仅具有一般数据可视化软件都具有的功能(如二维曲线和三维曲面的绘制和处理等),而在一些其他软件所没有的功能(如图形的光照处理、色度处理,以及四维数据的表现等)方面同样表现出色。同时对一些特殊的可视化要求,如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。

        (5)应用广泛的模块集合工具箱。MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱(Toolbox)。一般来说,它们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。目前,MATLAB 已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、数据库接口、概率统计优化算法、偏微分方程求解、神经网络、小波分析、信号处理、图像处理、系统辨识、控制系统设计、鲁棒控制、模型预测、模糊逻辑、金融分析、地图工具、非线性控制设计、实时快速原型及半物理仿真、嵌入式系统开发、定点仿真、电力系统仿真等,都在工具箱家族中有了自己的一席之地。
        (6)实用的程序接口和发布平台。MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的 MATLAB程序自动转换为独立于MATLAB运行的C和C++代码。允许用户编写可以和MATLAB进行交互的C或C++语言程序。另外,MATLAB网页服务程序还容许在 Web应用中使用自己的MATLAB 数学和图形程序。MATLAB的一个重要特色就是具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,主要包括信号处理、控制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。
        (7)包括用户界面的应用软件开发。在开发环境中,用户可方便地控制多个文件和图形窗口:在编程方面支持函数嵌套,有条件中断等;在图形化方面具备强大的图形标注和处理功能;在输入输出方面,可以直接与Excel等文件格式进行连接。

2.4常用的信号处理函数

MATLAB具有强大的函数功能,从本质上讲,可将其分为三类。
        (1)MATLAB的内部函数。这类函数由MATLAB自身提供,且用户不能修改,如调试函数、快速傅里叶函数等。
        (2)MATLAB各种工具箱中提供的大量实用函数。这类函数多是针对不同领域,如通信、机械等提供的函数集,用户可以根据自身需要对M类型的函数文件进行修改,以完成特定功能。
        (3)用户自已编写的函数。
        需要说明的是,虽然 MATLAB函数具有几种不同类型,但用户使用的方法是一样的,用户在自己编写的函数文件中可以调用其他种类的函数。在讲解滤波器设计之前,本节先对常用的几种信号处理函数进行介绍。
1.常用信号产生函数

        在进行数字信号处理仿真或设计时,经常需要产生随机信号、方波信号、锯齿波信号、正弦信号,以及带有加性白噪声的某种输入信号。MATLAB提供了很多丰富的信号产生函数,用户直接调用即可。
        (1)随机信号函数。MATLAB 提供了两类随机信号产生函数rand(1,N)和randn(1.N),其中rand 产生长度为N的在[0,1]上均匀分布的随机序列;randn产生均值为0,方差为1的高斯随机序列,也就是功率为1W的白噪声序列。具有其他分布特性的序列可以由这两种随机数变换产生。
        (2)方波信号函数。MATLAB提供了方波信号产生函数square,Square有两种格式,即square(7)和square(T,DUTY),前者相对于时间变量T产生周期为 2π,幅值为±1 的方波:后者产生指定占空比的方波,DUTY指定信号为正值的区域在一个周期内所占的比例,取值为0~100,当DUTY取50时,产生方波信号,即与square(7)函数完全相同。

        (3)锯齿波信号函数。MATLAB 提供的锯齿波函数sawtoot 也有两种格式,即 sawtooth(7)和sawtooth(T,WIDTH),前者对时间变量T产生周期为2,幅值为±1的锯齿波;后者对时间变量T产生三角波,WIDTH 参数指定三角波的尺度值,取值为0~1,当WIDTH取0.5时,产生对称的三角波信号,当 WIDTH 取1时,产生锯齿波信号。
        (4)正弦波信号函数。MATLAB 提供了完整的三角函数,如正弦函数sin、双曲正弦函数 sinh、反正弦函数 asin、反双曲正弦函数 asinh、余弦函数 cos、双曲余弦函数 cosh、反余弦函数 acos、反双曲余弦函数 acosh、正切函数 tan、余切函数 cot等。这几种函数的用法基本相同,如 sin(7)函数相对于时间变量T产生周期为2π,幅值为±1的正弦波信号。
我们以一个具体的实例来演示这几个函数的具体用法。
例 2-1:MATLAB 常用信号产生函数演示实例
        编写一个M文件,依次产生均匀分布的随机序列、高斯白噪声随机序列、方波信号序列、三角波信号序列、正弦波信号序列,以及信噪比SNR为10dB的加性高斯白噪声正弦信号。程序源代码如下。

程序运行后的结果如图 2-16所示。在这个实例中,为了使图形显示更为美观,使用了较多的坐标轴设置函数。在以后的实例中,为节约篇幅,源文件中类似坐标轴操作函数将不再列出,只列出程序的核心部分代码,读者可在随书配套的光盘中查寻完整的程序源文件代码。

2.常用信号分析及处理函数
(1)滤波函数。flter 是利用递归滤波器或非递归滤波器对数据进行滤波处理的函数。任何一个离散系统均可以看做一个滤波器,系统的输出就是输入信号经过滤波器滤波后的结果。
由于filter 函数的参数涉及离散系统的系统函数,因此先简单介绍一下离散系统的一般表示方法。一个N阶的离散系统函数可表示为

        将式(2-1)的分子项系数依次从小到大排列成一个行矩阵6,分母项依次从小到大排列成一个行矩阵a(其中ao=1),则依据b、a可唯一确定离散系统。flter 函数有三个参数:filter(b,a,x),其中b、a分别为系统函数的分子、分母项组成的行矩阵,x为输入信号序列。函数返回值为输入序列x经滤波器滤波后的输出结果。

        (2)单位抽样响应函数。MATLAB 提供了一个可以直接求取系统单位抽样响应的函数impz。impz函数有两种用法:impz(b,a,p)及h=impz(b,a,p)。其中 b、a分别为系统函
(2-2)数向量,p为计算的数据点数,如不设置p值,则函数取默认点数进行计算,h为单位抽样响应结果数据;函数的前一种用法直接在MATLAB绘图界面上画出系统的单位响应杆图(Stem)图形,后一种用法则将单位抽样响应结果存入变量h中,且不绘图。

        (3)频率响应函数。频率响应指系统的幅频(幅度-频率)响应及相频(相位-频率)响应。频率响应是系统最基本最重要的特征,用户在设计系统时,通常以达到系统所需的频率响应为目标。对于一个给定的离散系统来说,MATLAB提供了freqz函数来获取系统的频率响应。与impz函数类似,fregz函数也有两种用法:freqz及h,fl-fregz(b.an.Fs)。其中 ba分别为系统函数向量;Fs为采样频率:n为在[0,Fs/2]范围内计算的频率点数量,并将频率值存放在f中:h存放频率响应计算结果。函数的第一种用法可直接绘出系统的幅频响应
及相频响应曲线,第二种用法将频率响应结果存放在h及f变量中,且不绘图。(4)零极点增益函数。对于一个离散系统来说,系统的零极点及增益参数可以明确地反映系统的因果特性、稳定性等重要特性,进行系统分析及设计时也常常会计算其零极点和增益参数。用户可以使用MATLAB提供的root函数来计算系统的零极点,也可以直接使用zplane函数来画出系统的零极点图。
例 2-2:MATLAB 常用信号分析处理函数演示实例
编写一个M 文件,分别用 filter 及 impz函数获取指定离散系统(b=[0 0.5 0.3 0.2],a=[10.20.4-0.8])的单位抽样响应;用fregz函数获取系统的频率响应;分别用root及zplane函数获取系统的零极点图及增益。程序源代码如下:

程序运行后的结果如图 2-17和图2-18所示。同时,在 MATLAB 的命令窗口中显示系统的零极点及增益值。

由图 2-17可知,filter()函数和impzO)函数获取的系统单位抽样响应序列完全相同。freqz()函数两种用法的频率响应完全相同,其中函数自动绘制的幅频响应横坐标为归一化的数值。

(5)快速傅里叶变换函数。离散傅里叶变换(Discrete Fourier Transform,DFT)是数字信号处理最重要的基石之一,也是对信号进行分析和处理时最常用的工具之一。200多年前,法国数学家、物理学家傅里叶提出以他名字命名的傅里叶级数之后,用 DFT这个工具来分析信号就已经为人们所知。但在很长时间内,这种分析方法并没有引起更多的重视,最主要的原因在于这种方法运算量比较大。
快速傅里叶变换[1](FastFourier Transform,FFT)是1965年由库利和图基共同提出的一种快速计算DFT的方法。这种方法充分利用了DFT运算中的对称性和周期性,从而将DFT运算量从N(N为计算的数据点数)减少到MogN。当N比较小时,FFT优势并不明显。但当N大于32时,点数越大,FFT对运算量的改善越明显。比如当N为1024时,FFT的运算效率比DFT提高了100倍。

快速傅里叶变换在信号分析及处理中使用十分广泛,MATLAB提供了及i两个函数分别用于快速傅里叶正/反变换。函数最常用的用法是y-f(x,n),其中x是输入信号序列,n为参与计算的数据点数,y存放函数运算结果。当n大于输入序列的长度,函数在x的尾部补零构成n点数据;当n小于输入序列的长度,函数对序列x进行截尾。为提高运算速度,n通常取2的整数幂次方。
例 2-3:快速傅里叶函数演示实例
编写一个M 文件,产生频率为100Hz和105Hz正弦信号叠加后的信号,用函数对信号进行频率分析,要求在频率上能分辨出两种频率的正弦信号,分别绘出信号的时域及频域波形。实例源代码文件名为E23.m,程序源代码如下。

程序运行后的结果如图2-19所示,从图中可以看出,在时域上难于分辨的两个正弦波信号,在频域上可以很容易分辨出来。

2.5 MATLAB 与I5E 的数据交换

        在FPGA 设计过程中,目前的仿真调试工具,如ModelSim,只能提供仿真测试数据的时域波形,无法显示数据的频谱等特性,且对数据进行分析、处理时不够方便。例如,在设计数字滤波器时,只在FPGA开发环境中很难直观、准确地判断滤波器的频率响应特性在编写仿真测试激励文件时,依靠VHDL语言也很难产生用户所需要的具有任意信噪比的输入信号。这些问题给数字信号处理技术的FPGA设计与实现带来了不小的困难。虽然如此,FPGA 开发环境中无法解决的复杂信号产生、处理、分析的问题在MATLAB软件环境中却很容易实现。因此,只要能在FPGA开发环境与 MATLAB 软件之间搭建起可以相互交换数据的通道,即可有效解决FPGA设计中所遇到的难题。
        使用MATLAB辅助FPGA设计有三种方式:第一种是由MATLAB软件仿真、设计出来的系统参数直接在FPGA设计中实现,如在FIR数字滤波器设计过程中,由MATLAB软件设计出用户所需性能的滤波器系统参数,在FPGA设计中直接使用,作为滤波器参数即可:第二种方法用于仿真测试过程中,即由MATLAB仿真产生出所需特性的测试数据并存放在数据文件中,由ISE等开发软件读取测试数据作为输入数据源,由ISE仿真出的结果数据存放在另一数据文件中,MATLAB再读取由ISE仿真后的数据,并对数据进行分析,以此判断FPGA程序是否满足设计需求:第三种是由MATLAB软件设计出相应的数字信号处理系统,并在MATLAB软件中直接将MATLAB代码转换成VHDL或Verilog语言代码在ISE或OUARTUSI等开发环境中直接嵌入这些代码即可。第一、二种方式最为常用,也是本书将会采用的设计方式:第三种方式近年来应用也较为广泛,这种方式可以在用户完全不熟悉FPGA硬件编程的情况下完成FPGA设计,但这种方式在一些系统时钟较为复杂或对时序要求较为严格的场合不易满足设计者的要求。
        众所周知,MATLAB 软件对文件数据的处理能力是很强的,关键在于FPGA开发环境中对外部文件读取及存储功能是否能满足要求。在FPGA设计过程中,需对程序进行仿真测试时,ISE提供了波形测试文件类型Test Bench Waveform和 HDL代码文件类型 Test BenchWaveform 两种。其中,Test Bench Waveform是在波形界面上通过直观修改波形数据产生所需的测试数据,简单直观但不够灵活,无法生成复杂的测试数据,也不能将仿真后的结果数据单独存储;VHDLTestBench是根据所测试的程序文件自动生成测试文件框架,用户在测试文件中修改或添加代码,可灵活地产生所需的测试数据,且可方便地将测试数据存入指定的文本文件中,或从指定的外部文件中读取数据作为仿真测试的输入数据。也就是说,MATLAB与ISE等FPGA开发环境之间可以通过文本文件进行数据交互,具体的应用方法将在后续章节讲解FPGA设计实例时详细讨论。

2.6 小结

        本章首先介绍了硬件描述语言的基本概念及优势,并对VHDL语言进行了简要介绍。对本书需要使用到的软件开发仿真环境:ISE开发套件、Modelsim仿真软件、Synplicity综合软件,以及 MATLAB 软件也进行了简要介绍。熟练掌握设计工具是一名电子工程师必备的技能之一。限于篇幅的原因,本章对各种设计环境的介绍比较简略,读者还需要通过大量的设计验证及工程应用来不断提高自己对设计环境及HDL语言的熟练程度。所谓熟能生巧,在具体进行工程设计时,设计灵感的进发也多是以深刻理解和掌握手中的工具为前提条件。

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值