搜档网
当前位置:搜档网 › 基于MATLAB的数字滤波器设计

基于MATLAB的数字滤波器设计

基于MATLAB的数字滤波器设计
基于MATLAB的数字滤波器设计

基于matlab的数字滤波器设计

摘要:本文介绍的是数字滤波器在MATLAB环境下的设计方法。数字滤波是数字信号处理的重要内容,在实际应用中有非常大的作用。我们研究的数字滤波器可分为IIR和FIR两大类。对于IIR数字滤波器的设计,我们需要借助模拟原型滤波器,然后再将模拟滤波器转化为数字滤波器,文中采用的设计方法是脉冲响应不变法、双向性变换法和完全函数设计法;对于FIR数字滤波器的设计,可以根据所给定的频率特性直接设计,文中采用的设计方法是窗函数法。根据IIR 滤波器和FIR滤波器的特点,本文在MATLAB坏境下分别用双线性变换法设计IIR和用窗函数设计FIR数字滤波器,并让这两种滤波器对采集的语音信号进行分析和比较,经过分析,最后给出了IIR和FIR对语音滤波的效果,并总结这两种滤波器在MATLAB环境下设计方法的优缺点。

关键词:数字滤波器;IIR ;FIR ;MATLAB

The Design of Digital Filter based on MATLAB Abstract:This article describes a digital filter in the MATLAB environment design. Digital filtering is an important part of digital signal processing which is playing a very big role in practice .The digital filter we studied can be divided into two categories——IIR and FIR. For the IIR digital filter design, we will need the help of simulation prototype filter, analog filters and then converted it into digital filter For the IIR digital filter design .The design methods used in the text is the same impulse response method, bi-sexual transformation and full function design ;We can based on the frequency characteristics of the given direct design, design method used in the text is the window function for FIR digital filter design. Based on the characteristics of IIR filter and FIR filters ,the bad paper in the MATLAB environment under the bilinear transformation method were used to design IIR and FIR with window function digital filter design and filters to capture both the voice signal analysis and compare. Through analysis of IIR and FIR Finally, the effect of filtering on the speech, and concluded the advantages and disadvantages in the two filter design methods in the MATLAB environment.

Key words: Digital Filter ;IIR;FIR;MATLAB

目录

1引言 (1)

2数字滤波器及MATLAB语言概述 (2)

2.1数字滤波器的定义和分类 (2)

2.2常用滤波器的性能指标 (3)

2.3 MATLAB概述 (5)

3IIR滤波器设计 (8)

3.1双线性变换法设计IIR数字滤波器 (8)

3.2脉冲响应不变法 (12)

3.3完全设计函数法 (15)

3.4语音滤波实例 (16)

4 FIR滤波器设计 (21)

4.1 窗函数法 (21)

4.1.1用窗函数设计FIR数字滤波器的基本方法 (21)

4.2 FIR滤波器滤波实例 (26)

5总结 (30)

[参考文献] (31)

致谢 (32)

1引言

数字滤波在通信、图像编码、语音编码、雷达等许多领域中有着十分广泛的应用。目前,数字信号滤波器的设计在图像处理、数据压缩等方面的应用取得了令人瞩目的进展和成就。它是数字信号处理理论的一部分。数字信号处理主要是研究用数字或符号的序列来表示信号波形,并用数字的方式去处理这些序列,以便估计信号的特征参量,或削弱信号中的多余分量和增强信号中的有用分量。具体来说,凡是用数字方式对信号进行滤波、变换、调制、解调、均衡、增强、压缩、固定、识别、产生等加工处理,都可纳入数字信号处理领域。数字信号处理学科的一项重大进展是关于数字滤波器设计方法的研究。关于数字滤波器,早在上世纪40年代末期就有人讨论设计它的可能性问题,在50年代也有人讨论过数字滤波器,但直到60年代中期,才开始形成关于数字滤波器的一整套完整的正规理论。在这一时期,提出了各种各样的数字滤波器结构,有的以运算误差最小为特点,有的则以运算速度高见长,而有的则二者兼而有之。出现了数字滤波器的各种实现方法,对递归和非递归两类滤波器作了全面的比较,统一了数字滤波器的基本概念和理论。

MATLAB是美国Math Works公司推出的一套用于工程计算的可视化高性能语言与软件环境。MATLAB为数字滤波的研究和应用提供了一个直观、高效、便捷的利器。它以矩阵运算为基础,把计算、可视化、程序设计融合到了一个交互式的工作环境中。MATLAB推出的工具箱使各个领域的研究人员可以直观方便地进行科学研究、工程应用,其中的信号处理(signal processing)、图像处理(image processing)、小波(wavelet)等工具箱为数字滤波研究的蓬勃发展提供了有力的工具。

数字滤波器与模拟滤波器相比,具有精度高、稳定、体积小、重量轻、灵活、不要求阻抗匹配以及能实现模拟滤波器无法进行的特殊滤波等优点]1[。本文主要介绍有限冲激响应数字滤波器(FIR)和无限冲激响应数字滤波器(IIR)的设计原理、方法、步骤以及在MATLAB中的实现,并以实例形式列出设计程序和仿真结果。

2数字滤波器及MATLAB语言概述

2.1数字滤波器的定义和分类

数字滤波器是指完成信号滤波处理功能的,用有限精度算法实现的离散时间线性非时变系统,其输入是一组数字量,其输出是经过变换的另一组数字量。因此,数字滤波器本身既可以是用数字硬件装配成的一台完成给定运算的专用的数字计算机,也可以将所需要的运算编成程序,让通用计算机来执行。数字滤波器,输入输出均为数字信号,通过一定的运算关系,改变输入信号中所含频率成分的相对比例,或则滤除某些频率成分的器件]2[。对于数字滤波器而言,若系统函数为H(z),其脉冲响应为h(n),输入时间序列为x(n),则它们在时域内的关系式如下:

y(n)=h(n)﹡x(n) 2-1 在Z域内,输入和输出存在如下关系:

Y(z)= H(z)X(z) 2-2 式中,X(z)、Y(z)分别为x(n)和y(n)的Z变换。

在频域内,输入和输出则存在如下关系:

Y(jω)=H(jω)X(jω) 2-3 式中,H(jω)是数字滤波器的频率特性;X(jω)Y(jω)分别为x(n)和y(n)的频谱,而ω为数字角频率。

数字滤波器可以有很多种分类方法,但总体上可分为两大类。一类称为经典滤波器,即一般的滤波器,其特点是输入信号中的有用成分和希望滤除的成分占用不同的频带,通过合适的选频滤波器可以实现滤波]3[。例如,若输入信号中有干扰,信号和干扰的频带互不重叠,则可滤出信号中的干扰得到纯信号。但是,如果输入信号中信号和干扰的频带相重叠,则干扰就不能被有效的滤出。另一类称为现代滤波器,如维纳滤波器、卡尔曼滤波器等,其输入信号中有用信号和希望滤除的成分频带重叠。对于经典滤波器,从频域上也可以分为低通、高通、带通和带阻滤波器。从时域特性上看,数字滤波器还可以分为有限冲激响应数字滤波器(FIR)和无限冲激响应数字滤波器(IIR)。

对于有限冲激响应数字滤波器(FIR),其输出y(n)只取决于有限个过去和现在的输入,x(n),x(n-1),…,x(n-m),滤波器的输入输出关系可表示为

y(n)=∑

=-

M

r

r

r

n

x

b

)

(2-4

对于无限冲激响应数字滤波器(IIR ),它的输出不仅取决于过去和现在的输入,而且还取决于过去的输出,其差分方程为

y(n)+∑=-N

k k k n y a 1

)(=∑=-M

r r r n x b 0

)( 2-5

该差分方程的单位冲激响应是无限延续的。 2.2常用滤波器的性能指标

滤波器性能一般用系统频率特性

)(ω

j e H 来说明,常用的性能指标主要有以下三个参数:

1. 幅度平方函数

2

*()()*()

()()

()()

j j j j j j z e H e H e H e H e H e H z H z ω

ωωωωω-==?== 2-6

该性能指标主要用来说明系统的幅频特性。

2.相位函数

()

()Re[()]Im[()]()j j j j j j e

H e H e j H e H e e ω

ωωωωβ=+= 2-7

其中:

???

???=)](Re[)](Im[)(ω

ωω

βj j j e H e H arctg e 2-8

该指标主要用来说明系统的相位特性。

3.群延时

ωβωτωd e d j )]

([)(-

= 2-9

定义为相位对角频率导数的负值,说明了滤波器对不同的频率成分的平均延时。当要求在通带内的群延迟是常数时,滤波器相位响应特性应该是线性的。

实际设计中所能得到的滤波器的频率特性与理想滤波器的频率特性之间存在着一些显著的差别,现以低通滤波器的频率特性为例进行说明。

1.理想滤波器的特性:

设滤波器输入信号为)(t x ,信号中混入噪音)(t u ,它们有不同的频率成分。滤波器的单位脉冲响应为)(t h 。则理想滤波器输出为:

()[()()]()()y t x t u t h t K x t τ=+*=?- 2-10

即噪音信号被滤除0)()(=*t h t u ,而信号无失真只有延时和线性放大。对上式作傅里叶变换得:

()()()()()()j Y j X j H j U j H j Ke X j τ-ΩΩ=Ω?Ω+Ω?Ω=Ω 2-11

假定噪音信号被滤除,即:

()()0U j H j Ω?Ω= 2-12

整理得:

()

()()j Y j H j Ke X j τ

-ΩΩΩ=

=Ω 2-13

图1 理想低通滤波器频率特性 图2 理性滤波器的单位脉冲响应(0τ=)

假定信号频率成分为:c

Ω≤Ω,噪音频率成分为

c

Ω>Ω。则完成滤波的理

想低通滤波器特性是:

||()()()0 ||j c c

K e

Y j H j X j τ

-Ω??Ω≤ΩΩΩ==?

ΩΩ>Ω? 2-14

即:

|||()|0 ||c

c K H j Ω≤Ω?Ω=?

Ω>Ω? 2-15

arg(())H j τΩ=-Ω 2-16

系统的单位脉冲响应为:

sin[()]

1()2()c

c

j j t c t h t Ke e d K

t ττπ

πτΩ-ΩΩ-Ω-Ω=

?Ω=-?

2-17

理性低通滤波器的频率特性如图1所示,单位脉冲响应的波形如图2所示。 理想滤波器具有非因果、无限长的单位脉冲响应和不连续的频率特性,要用

()H j ΩΩ

c

ΩK

h(t)

t

稳定的线性时不变(LTI )系统来实现这样的特性是不可能的]4[。工程上是用脉冲响应为有限长的、因果的、稳定的线性时不变系统或具有连续频率特性的线性时不变系统来逼近理想特性。在满足一定的误差要求的情况下来实现理想滤波特性。因此实际的滤波器的频率特性如图3所示。

其中:

c ω——截止频率 s ω——阻带起始频率

c s ωω-——过渡带宽 在通带内幅度响应以

1

σ±的误差接近于1,即:

111()1j c

H e ωσσωω-≤≤+≤ 2-18

s

ω为阻带起始频率,在阻带内幅度响应以小于2

σ的误差接近于零,即:

2()j s H e ωσωωπ

≤≤≤ 2-19

为了使设计的滤波器更接近理想低通滤波器,还必须提供一带宽为

s c

ωω-的不为零的过渡带。在这个频带内,幅度响应从通带平滑的下落到阻带。 2.3 MATLAB 概述

MATLAB 是美国Math Works 公司开发的一种功能极其强大的高技术计算语言和内容极其丰富的软件库,集数值计算、矩阵运算和信号处理与显示于一身。该软件最初是由美国教授Cleve Moler 创立的。1980年前后,他在教线性代数课程时,发现用其他高级语言编程时极不方便,便构思开发了MATLAB ,即矩阵实

1

1δ+1

1σ-

2

σ图3实际滤波器的频率特性性

c s

ω

验室(Matrix Laboratory)。该软件利用了当时代表数值线性代数领域最高水平的EISPACK和LINPACK两大软件包,并且利用Fortran语言编写了最初的一套交互式软件系统,MATLAB的最初版本便由此产生了]5[。

最初的MATLAB由于语言单一,只能进行矩阵的运算,绘图也只能用原始的描点法,内部函数只有几十个,因此功能十分简单。1984年该公司推出了第一个MATLAB的商业版,并用C语言作出了全部改写。现在的MATLAB程序是Math Works公司用C语言开发的,第一版由steve Bangert主持开发编译解释程序,Steve Kleiman完成图形功能的设计,John Little和Cleve Moler主持开发了各类数学分分析的子模块,撰写用户指南和大部分的M文件。接着又添加了丰富的图形图像处理、多媒体功能、符号运算和与其它流行软件的接口功能,使MATLAB的功能越来越强大。

MTALAB系统主要由以下五个部分组成]6[:

(1)MATALB语言体系。MATLAB是高层次的矩阵/数组语言,具有条件控制、函数调用、数据结构、输入输出、面向对象等程序语言特性。利用它既可以进行小规模端程,完成算法设计和算法实验的基本任务,也可以进行大规模编程,开发复杂的应用程序。

(2)MATLAB工作环境。这是对MATLAB提供给用户使用的管理功能的总称。包括管理工作空间中的变量据输入输出的方式和方法,以及开发、调试、管理M文件的各种工具。

(3)图形句相系统。这是MATLAB图形系统的基础,包括完成2D和3D数据图示、图像处理、动画生成、图形显示等功能的高层MATLAB命令,也包括用户对图形图像等对象进行特性控制的低层MATLAB命令,以及开发GUI应用程序的各种工具。

(4)MATLAB数学函数库。这是对MATLAB使用的各种数学算法的总称。包括各种初等函数的算法,也包括矩阵运算、矩阵分析等高层次数学算法。

(5)MATLAB应用程序接口(API)。这是MATLAB为用户提供的一个函数库,使得用户能够在MATLAB环境中使用C程序或FORTRAN程序,包括从MATLAB 中调用于程序(动态链接),读写MAT文件的功能]7[。

除此之外,MATLAB系统还具有如下特点:

(1)具有易学易用的语言体系;

(2)具有交互式的工作环境;

(3)具有多层面的图像处理系统;(4)具有丰富高效的MATLAB工具箱;(5)具有便利的程序接口(API); (6)应用领域广泛;

(7)嵌入了面向对象编程语言。

3IIR滤波器设计

3.1双线性变换法设计IIR数字滤波器

我们在设计IIR数字滤波器时,当S平面到Z平面是多值的映射关系时会造成频率响应的混叠失真。为了克服这一缺点,可以采用非线性频率压缩方法,将整个频率轴上的频率范围压缩到-π/T~π/T之间,再用z=ST

e转换到Z平面上。也就是说,第一步先将整个S平面压缩映射到S1平面的-π/T~π/T一条横带里;第二步再通过标准变换关系z=T S e1将此横带变换到整个Z平面上去。这样就使S 平面与Z平面建立了一一对应的单值关系,消除了多值变换性,也就消除了频谱混叠现象,映射关系如图4所示。

图4 双线性变换的映射关系

为了将S平面的整个虚轴jΩ压缩到S1平面jΩ1轴上的-π/T到π/T段上,可以通过以下的正切变换实现

3-1 式中,T仍是采样间隔。

当Ω1由-π/T经过0变化到π/T时,Ω由-∞经过0变化到+∞,也即映射了整个jΩ轴。将式3-1写成

3-2 将此关系解析延拓到整个S平面和S1平面,令jΩ=s,jΩ1=s1,则得

3-3 再将S1平面通过以下标准变换关系映射到Z平面z=T S e1

从而得到S平面和Z平面的单值映射关系为:

3-4

3-5 式3-4与式3-5是S平面与Z平面之间的单值映射关系,这种变换都是两个线性函数之比,因此称为双线性变换

式3-1与式3-4的双线性变换符合映射变换应满足的两点要求。

首先,把z=ejω,可得

3-6 即S平面的虚轴映射到Z平面的单位圆。

其次,将s=σ+jΩ代入式3-6,得

3-7 因此

3-8 由此看出,当σ<0时,|z|<1;当σ>0时,|z|>1。也就是说,S平面的左半平面映射到Z平面的单位圆内,S平面的右半平面映射到Z平面的单位圆外,S平面的虚轴映射到Z平面的单位圆上。因此,稳定的模拟滤波器经双线性变换后所得的数字滤波器也一定是稳定的。

双线性变换法优缺点:

双线性变换法,其主要的优点是由于这里S平面与Z平面是单值的一一对应关系,从而避免了频率响应的混叠现象。S平面整个jΩ轴单值地对应于Z平面单位圆一周,即频率轴是单值变换关系。这个关系如式3-6所示,重写如下:

3-9 上式表明,S平面上Ω与Z平面的ω成非线性的正切关系,如图5所示。

由图5看出,在零频率附近,模拟角频率Ω与数字频率ω之间的变换关系接近于线性关系;但如果Ω继续增加,此时ω会增长得越来越慢,最后当Ω→∞时,ω终止在折叠频率ω=π处,因而双线性变换就不会出现由于高频部分超过折叠频率而混淆到低频部分去的现象,从而消除了频率混叠现象。

图5 双线性变换法的频率变换关系

但是双线性变换的这个特点是靠频率的严重非线性关系而得到的,如式3-6及图5所示。由于这种频率之间的非线性变换关系,就产生了新的问题。首先,一个线性相位的模拟滤波器经双线性变换后得到非线性相位的数字滤波器,不再保持原有的线性相位了;其次,这种非线性关系要求模拟滤波器的幅频响应必须是分段常数型的,即某一频率段的幅频响应近似等于某一常数(这正是一般典型的低通、高通、带通、带阻型滤波器的响应特性),不然变换所产生的数字滤波器幅频响应相对于原模拟滤波器的幅频响应会有畸变,如图8所示。

图6 双线性变换法幅度和相位特性的非线性映射

对于分段常数的滤波器来说,双线性变换后,仍会得到幅频特性为分段常数的滤波器,但是各个分段边缘的临界频率点产生了畸变。这种频率的畸变,可以

通过频率的预畸来加以校正。也就是将临界模拟频率(即滤波器的截止频率和阻带边频)事先加以畸变,然后经变换后正好映射到所需要的数字频率上。

在MATLAB 中,双线性变换法的调用函数是bilinear 。其调用格式为: a.[zd,pd,kd]= bilinear(z,p,k,fs) b.[zd,pd,kd]= bilinear(z,p,k,fs,fp) c. [numd,dend]=bilinear(num,den,fs) d. [numd,dend]=bilinear(num,den,fs,fp) e. [Aa,Bb,Cc,Dd]=bilinear(A,B,C,D,fs) f. [Aa,Bb,Cc,Dd]=bilinear(A,B,C,D,fs,fp)

[zd,pd,kd]=bilinear(z,p,k,fs)是把模拟滤波器的零极点模型转换为数字滤波器的零极点模型,fs 为采样频率,z,p,k 分别为滤波器的零点、极点和增益;

[numd,dend]=bilinear(num,den,fs)是把模拟滤波器的传递函数模型转换为数字滤波器的传递模型;

[Aa,Bb,Cc,Dd]=bilinear(A,B,C,D,fs)是把模拟滤波器的状态方程模型转换为数字滤波器状态方程模型。

例如,用双线性变换法设计一个巴特沃思数字低通滤波器,技术指标如下:通带截止频率p Ω=2?π4k rad/s ,阻带截止频率s Ω=2?π8k rad/s ,通带波纹系数

p R =0.3dB, 阻带波纹系数s R =50dB,采样频率fs=20000Hz 。

程序如下:

[N,Wn]=buttord (wp,ws,Rp,Rs,’s’) %估计滤波器最小阶数 [z,p,k]=buttap(N); [Bap,Aap]=zp2tf(z,p,k); [b,a]=lp2lp(Bap,Aap,Wn); [bz,az]=bilinear(b,a,fs) freqz(bz,az,Nn,fs)

程序在MATLAB 环境下的运行及结果如图7所示: 结果如下: N =11

Wn =1.4892e+004 bz =

Columns 1 through 6

0.0110 0.1211 0.6055 1.8166 3.6333 5.0866 Columns 7 through 12

5.0866 3.6333 1.8166 0.6055 0.1211 0.0110 az =

Columns 1 through 6

1.0000

2.7098 4.6379 5.2252 4.3685 2.7207 Columns 7 through 12

1.2885 0.4561 0.1181 0.0211 0.0023 0.0001

Frequency (Hz)

P h a s e (d e g r e e s

)

Frequency (Hz)

M a g n i t u d e (d B )

图7巴特沃思数字低通滤波器幅频-相频特性

3.2脉冲响应不变法

顾名思义,脉冲响应不变法就是要求数字滤波器的脉冲响应序列h(n)与模拟滤波器的脉冲响应)(t h a 的采样值相等,即

h(n)=)

(t h a nT

t ==)(nT h a 3-10

式中,T 为采样周期。根据模拟信号的拉普拉斯变换与离散序列的Z 变换之间的关系,我们知道

H(z)

ST

e z ==

T

1∑Ω

-k

s

jk S Ha )( 3-11

此式表明,)(t h a 的拉普拉斯变换在s 平面上沿虚轴,按照周期s Ω=2π/T 延拓后,按式z=ST e ,进行Z 变换,就可以将Ha(s)映射为H(z)。事实上,用脉冲响应不变法设计IIR 滤波器,只适合于Ha(s)有单阶极点,且分母多项式的阶次高于分子多项式阶次的情况]5[。将Ha(s)用部分分式表示:

Ha(s)=LT[h )(t a ]=∑

=-N

i i

i s s A 1 3-12

式中,LT[·]代表拉普拉斯变换,i s 为的单阶极点。将Ha(s)进行拉普拉斯反变换,即可得到

)(t h a =∑=N

i t S i t u e A i 1)( 3-13

式中,u(t)是单位阶跃函数。则)(t h a 的离散序列h(n)=)(nT h a =∑=N

i nT S i nT u e A i 1

)(

对h(n)进行z 变换之后,可以得到数字滤波器的系统函数H(z)

H(z)=∑∞

=-0)(n n

z

n h =

∑=--N

i T

S i

z

e

A i 1

1

1 3-14

对比Ha(s)与H(z),我们会发现:s 域中Ha(s)的极点是i s ,映射到z 平面之后,其极点变成了T S i e ,而系数没有发生变化,仍为i A 。因此,在设计IIR 滤波器时,我们只要找出模拟滤波器系统函数Ha(s)的极点和系数i A ,通过脉冲响应不变法,代入H(z)的表达式中,即可求出H(z),实现连续系统的离散化]8[。

但是脉冲响应不变法只适合于设计低通和带通滤波器,而不适合于设计高通和带阻滤波器。因为,如果模拟信号)(t h a 的频带不是介于T /π±之间,则会在

T /π±的奇数倍附近产生频率混叠现象,映射到z 平面后,则会在πω=附近产生频率混叠现象。从而使所设计的数字滤波器不同程度的偏离模拟滤波器在πω=附近的频率特性,严重时使数字滤波器不满足给定的技术指标。为此,希望设计的滤波器是带限滤波器,如果不是带限的,例如,高通滤波器、带阻滤波器,需要在高通滤波器、带阻滤波器之前加保护滤波器,滤出高于折叠频率π/T 以上的频带,以免产生频率混叠现象]9[。但这样会增加系统的成本和复杂性。因此,高通与带阻滤波器不适合用这种方法。

将模拟滤波器转化为数字滤波器,牵涉到一个关键的问题,即寻找一种转换关系,将s 平面上的Ha(s)转换成z 平面上的H(z)。这里Ha(s)是模拟滤波器的传输函数,H(z)是数字滤波器的系统函数]10[。为了确保转换后的H(z)稳定且满足技术要求,转换关系要满足以下要求:

1)将因果稳定的模拟滤波器转换为数字滤波器后,仍然是因果稳定的。我们知道,当模拟滤波器的传输函数Ha(s)的极点全部位于s 平面的左平面时,模拟滤波器才是因果稳定的;对于数字滤波器而言,因果稳定的条件是其传输函数H(z)的极点要全部位于单位圆内。因此,转换关系应是s 平面的左半平面映射到z 平面

的单位圆内。

2)数字滤波器的频率响应与模拟滤波器的频率响应相对应,S 平面的虚轴映射为Z 平面的单位圆,而响应的频率之间是线性变换关系。

在MATLAB 中,脉冲响应不变法的调用函数是impinvar ,其调用格式为: a. [bz,az]=impinvar(b,a,fs) b. [bz,az]=impinvar(b,a) c. [bz,az]=impinvar(b,a,fs,tol)

该函数的功能是将分子向量为b 、分母向量为a 的模拟滤波器,转换为分子向量为bz 、分母向量为az 的数字滤波器。fs 为采样频率,单位为Hz ,默认值为1Hz 。tol 指误差容限,表示转换后的离散系统函数是否有重复的极点。

例如,用脉冲响应不变法设计一个契比雪夫型数字低通滤波器,指标要求:通带截止频率p Ω=1000Hz ,阻带截止频率s Ω=1200Hz ,采样频率fs=5000Hz ,通带衰减系数p R =0.3dB ,阻带衰减系数s R =40dB 。

程序如下:

wp=1000*2*pi;ws=1200*2*pi;fs=2500;Rp=0.3;Rs=40; [N,Wn]=cheb1ord(wp,ws,Rp,Rs,'s'); %估计滤波器最小阶数 [z,p,k]=cheb1ap(N,Rp); %模拟滤波器函数引用 [A,B,C,D]=zp2ss(z,p,k); %返回状态转移矩阵形式 [AT,BT,CT,DT]=lp2lp(A,B,C,D,Wn); %频率转换

[b,a]=ss2tf(AT,BT,CT,DT); %返回传递函数形式 [bz,az]=impinvar(b,a,fs); %调用脉冲相应不变法 [H,W]=freqz(bz,az); %返回频率响应 plot(W*fs/(2*pi),abs(H)); %画图 grid;

xlabel('frequency/Hz'); ylabel('magnitude'); N,Wn

程序在MATLAB 环境下的运行及结果如图8所示:

frequency/Hz

m a g n i t u d e

图8 契比雪夫型数字低通滤波器幅频特性曲线

N =11 Wn =6.2832e+003

3.3完全设计函数法

此法是根据设计要求,直接调用函数来设计数字滤波器。所用到的函数有butter 、cheby1、cheb2ord 、ellipd 以及besself 等。Butter 用来直接设计巴特沃思数字滤波器,cheby1用来直接设计切比雪夫I 型滤波器,cheb2ord 用来设计切比雪夫∏型滤波器,ellipd 用来设计椭圆滤波器,besself 用来设计贝塞尔滤波器。

例如,用完全设计函数法设计一个巴特沃思数字低通滤波器,技术指标要求为:wp=1000;ws=1200;Rp=0.3;Rs=40;fs=8000;

程序如下:

wp=1000;ws=1200;Rp=0.3;Rs=40;fs=8000;

[N,Wn]=buttord(wp/(fs/2),ws/(fs/2),Rp,Rs) %估计滤波器最小阶数 [b,a]=butter(N,Wn);

[H,W]=freqz(b,a); %返回频率响应 plot(W*fs/(2*pi),abs(H)); %画图 grid;

xlabel('Frequency/Hz'); ylabel('magnitude');

程序在MATLAB 环境下的运行及结果如图9所示:

Frequency/Hz

m a g n i t u d e

图9巴特沃思数字低通滤波器幅频特性曲线

N =29 Wn =0.2611

3.4语音滤波实例

根据语音信号的特点给出有关滤波器的性能指标:1)低通滤波器性能指标,fp=1000Hz ,fc=1200 Hz , As=100dB ,Ap=1dB ;2)高通滤波器性能指标,fc=2800 Hz ,fp=3000 Hz As=100dB ,Ap=1dB ;3)带通滤波器性能指标,fp1=1200 Hz ,fp2=3000 Hz ,fc1=1000 Hz ,fc2=3200 Hz ,As=100dB ,Ap=1dB 。用IIR 对其分析,最后,利用MATLAB 中的函数freqz 画出各滤波器的频率响应。

1.语音信号的采集:

1)利用windows 下的录音机(开始—程序—附件—娱乐—录音机,文件—属性—立即转换—8000KHz ,8位,单声道),录制一段自己的话音“信号”, 时间控制在1秒左右,然后将音频文件保存“E:\胡晶.wav”

2)在MATLAB 软件平台下,利用函数wavread 对语音信号进行采样,记住采样频率和采样点数。

[z1,fs,bits]=wavread('E:\胡晶.wav') 运行结果:fs =44100 bits =16

wavread 函数调用格式:

y=wavread(file),读取file 所规定的wav 文件,返回采样值放在向量y 中。 [y,fs,nbits]=wavread(file),采样值放在向量y 中,fs 表示采样频率(Hz ),nbits 表示采样位数。

y=wavread(file,N),读取前N 点的采样值放在向量y 中。

y=wavread(file,[N1,N2]),读取从N1点到N2点的采样值放在向量y中。

2.语音信号的频谱分析

①首先画出语音信号的时域波形

z1=wavread('E:\胡晶.wav');

plot(z1);图像输出如图10

②对语音信号进行频谱分析,在MATLAB中,可以利用函数fft对信号快速进行付立叶变换,得到信号的频谱特性

z1=wavread('E:\胡晶.wav');

y1=z1(1:8192);

Y1=fft(y1);

n=0:8191;

plot(n,Y1);图像输出如图11

x 104

图10 信号时域波形图11 信号频谱分析图根据语音信号的特点,设计出不同功能的数字滤波器,并用MATLAB进行仿真。设计程序及仿真结果如下:

1.设计IIR低通滤波器滤波

程序如下:

clear;close all

[z1,fs,bits]=wavread('E:\胡晶.wav')

y1=z1(1:8192);

Y1=fft(y1);

fp=1000;fc=1200;As=100;Ap=1; ;Fs=8000;

wc=2*fc/Fs;wb=2*fp/Fs;

[n,wp]=cheb1ord(wc,wb,Ap,As);

相关主题