购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.5 MATLAB的常用信号处理函数

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

2.5.1 常用的信号产生函数

在进行数字信号处理仿真或设计时,经常需要产生随机信号、方波信号、锯齿波信号、正弦波信号,以及带有加性白噪声的某种输入信号。MATLAB提供了很多丰富的信号产生函数,用户直接调用即可。

1)随机信号产生函数

MATLAB提供了两类随机信号产生函数——rand(1, N )和randn(1, N ),其中rand将产生长度为 N 的在[0,1]上均匀分布的随机序列;randn将产生均值为0、方差为1的高斯随机序列,也就是功率为1W的高斯白噪声信号序列。具有其他分布特性的序列可以由这两种随机信号产生函数变换产生。

2)方波信号产生函数

MATLAB提供了方波信号产生函数square。square有square( T )和square( T ,DUTY)两种格式,前者对时间变量 T 产生周期为2 π 、幅值为±1的方波;后者产生指定占空比的方波,DUTY指定信号为正值的区域在一个周期内所占的比例,取值为0~100,当DUTY取50时,产生方波信号,即与square( T )函数完全相同。

3)锯齿波信号产生函数

MATLAB提供了锯齿波信号产生函数sawtooth。sawtooth有sawtooth( T )和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( T )函数将对时间变量 T 产生周期为2 π 、幅值为±1的正弦波信号。

下面以一个具体的实例来演示这几种函数的具体用法。

例2-2:MATLAB常用信号产生函数演示实例。

编写一个m文件,依次产生均匀分布随机信号序列、高斯白噪声信号序列、方波信号序列、三角波信号序列、正弦波信号序列,以及SNR=10dB的正弦波信号序列,程序源代码如下。

程序运行结果如图2-9所示,在这个实例中,为了使图形显示更为美观,使用了较多的坐标轴设置函数,读者可以在随书配套的程序资料中查阅完整的程序源文件代码。

图2-9 程序运行结果

2.5.2 常用的信号分析函数

1)滤波函数

filter()是利用递归滤波器或非递归滤波器对数据进行滤波处理的函数,任何一个离散系统均可以看作一个滤波器,系统的输出就是输入信号经过滤波器滤波后的结果。

由于filter()函数的参数涉及离散系统的系统函数,因此先简单介绍一下离散系统的一般表示方法。一个 N 阶的离散系统函数可表示为

其差分方程可表示为

将式(2-1)的分子项系数依次从小到大排列成一个行矩阵(向量) b ,分母项依次从小到大排列成一个行矩阵 a (其中 a 0 =1),则依据 b a 可唯一确定离散系统。

filter()函数有三个参数,即filter(b,a,x),其中b、a分别为滤波器离散系统函数的分子项、分母项组成的行矩阵,x为输入信号序列,函数返回输入信号序列x经滤波器滤波后的输出结果。

2)单位抽样响应函数

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

3)频率响应函数

频率响应指系统的幅频(幅度-频率)响应及相频(相位-幅度)响应。频率响应是系统最基本、最重要的特征,用户在设计系统时,通常以达到系统所需的频率响应为目标。对于一个给定的离散系统来说,MATLAB提供了freqz()函数来获取系统的频率响应。与impz()函数类似,freqz()函数也有两种用法:freqz(b,a,n,F s )及[h,f]=freqz(b,a,n,F s ),其中b、a分别为系统函数向量;F s 为抽样频率;n为在[0,F s /2]范围内计算的频率点数量,并将频率值存放在f中;h存放频率响应计算结果。函数的第一种用法可直接绘出系统的幅频响应及相频响应曲线,第二种用法将频率响应结果存放在h及f变量中,但不绘图。

4)零/极点及增益函数

对于一个离散系统来说,系统的零/极点及增益函数可以明确地反映系统的因果性、稳定性等重要特性,进行系统分析及设计时也常常会计算其零/极点及增益函数。用户可以使用MATLAB提供的root()函数来计算系统的零/极点,也可以直接使用zplane()函数来画出系统的零/极点图。

例2-3:MATLAB常用信号分析处理函数演示实例。

编写一个M文件,分别用filter和impz()函数获取指定离散系统(b=[0.8 0.5 0.6],a=[1 0.2 0.4-0.8])的单位抽样响应;用freqz()函数获取系统的频率响应;分别用root()及zplane()函数获取系统的零/极点图及增益。程序源代码如下。

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

图2-10 系统单位抽样响应及频率响应图

图2-10 系统单位抽样响应及频率响应图(续)

图2-11 freqz()及zplane()自动绘制的频率响应及零/极点图

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

5)快速傅里叶变换函数

离散傅里叶变换(Discrete Fourier Transform,DFT)是数字信号处理最重要的基石之一,也是对信号进行分析和处理时最常用的工具之一。它是在200多年前由法国数学家、物理学家傅里叶提出的,后来以他名字命名的傅里叶级数,用DFT这个工具来分析信号就已经为人们所知。但在很长时间内,这种分析方法并没有引起更多的重视,最主要的原因在于这种方法运算量比较大。

快速傅里叶变换(Fast Fourier Transform,FFT)是1965年由库利和图基共同提出的一种快速计算DFT的方法,这种方法充分利用了DFT运算中的对称性和周期性,从而将DFT运算量从 N 2 N 为计算的数据点数)减少到 N log N 2 。当 N 比较小时,FFT优势并不明显;但当 N 大于32时,点数越大,FFT对运算量的改善就越明显,如当 N =1024时,FFT的运算效率比DFT的运算效率提高了100倍。

快速傅里叶变换在信号分析及处理中的使用十分广泛,MATLAB提供了fft()及ifft()两个函数分别用于快速傅里叶正/逆变换。函数最常用的用法是y=fft(x,n),其中x是输入信号序列,n为参与计算的数据点数,y存放函数运算结果。当n大于输入序列的长度时,fft()函数在x的尾部补零构成n点数据;当n小于输入序列的长度时,fft()函数对序列x进行截尾。为提高运算速度,n通常取2的整数幂次方。

例2-4:快速傅里叶函数演示实例。

编写一个M文件,产生频率为100Hz和105Hz正弦波信号叠加后的信号,用fft()函数对信号进行频率分析,要求在频率上能分辨出两种频率的正弦波信号,分别绘出信号的时域及频域波形。实例源代码文件名为E2_4_fft.m,程序源代码如下。

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

图2-12 正弦波信号叠加后信号频域变换图

2.5.3 滤波器设计分析工具FDATOOL

FDATOOL(Filter Design&Analysis Tool)是MATLAB信号处理工具箱里专用的滤波器设计分析工具,MATLAB 6.0以上的版本还专门增加了滤波器设计工具箱(Filter Design Toolbox)。FDATOOL可以设计包括FIR和IIR的几乎所有常规滤波器,操作简单,使用方便灵活。

FDATOOL的工作界面如图2-13所示,总共分两大部分:一部分是Design Filter,在界面的下半部分,用来设置滤波器的设计参数;另一部分是特性区,在界面的上半部分,用来显示滤波器的各种特性。

图2-13 FDATOOL的工作界面

Design Filter部分主要分为Filter Order(滤波器阶数)选项、Frequency Specifications(频率参数)选项、Magnitude Specifications(幅度参数)选项、Options(可选)选项、Response Type(滤波器类型)选项和Design Method(设计方法)选项,其中Response Type选项包括Lowpass(低通)、Highpass(高通)、Bandpass(带通)、Bandstop(带阻)和Differentiator(特殊的)FIR滤波器;Design Method选项包括IIR滤波器的Butterworth(巴特沃思)法、Chebyshev type I(切比雪夫I型)法、Chebyshev type II(切比雪夫II型)法、Elliptic(椭圆滤波器)法,以及FIR滤波器的Equiripple法、Least-Squares(最小均方)法、Window(窗函数)法。

Filter Order(滤波器阶数)选项定义滤波器的阶数,包括Specify order(指定阶数)和Minimum order(最小阶数)。在Specify order中填入所要设计的滤波器的阶数(对于 n 阶滤波器,Specify order= n -1);如果选中Minimum order选项,MATLAB则根据所选择的滤波器类型自动使用最小阶数。

Frequency Specifications选项可以详细定义频带的各种参数,包括抽样频率Fs和频带的截止频率。例如,Bandpass(带通)滤波器需要定义Fstop1(下阻带截止频率)、Fpass1(通带下限截止频率)、Fpass2(通带上限截止频率)、Fstop2(上阻带截止频率);而Lowpass(低通)滤波器只需要定义Fstop1、Fpass1。采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数决定的,所以只需要定义通带截止频率,而不必定义阻带参数。

Magnitude Specifications选项可以定义幅值衰减的情况。例如,设计带通滤波器时,可以定义Wstop1(频率Fstop1处的幅值衰减)、Wpass(通带范围内的幅值衰减)、Wstop2(频率Fstop2处的幅值衰减)。当选取采用窗函数设计时,可定义Window Specifications选项,它包含了各种可选的窗函数。

本节只对FDATOOL进行简单介绍,FDATOOL功能强大、界面友好,提供了各种易于使用的滤波器查看分析工具,有兴趣的读者可以阅读该工具的帮助文档或其他参考资料,对它进行更加全面、深入的了解。 JuU2eYInqUttwY4GX3jPkOoBpg6mqh49p4pPKfqQ8v3X0p02uJNBI0Lql25Y/nyq

点击中间区域
呼出菜单
上一章
目录
下一章
×