资源描述
个人收集整理 勿做商业用途
毕业设计(论文)
语音信号杂音滤除方法研究
学 生: 李 成
学 号:1089212214
指导教师: 宿 富 林
专 业:电子信息工程
二O一O年十二月
摘 要
滤波器设计在数字信号处理中占有极其重要的地位,FIR数字滤波器和IIR滤波器是滤波器设计的重要组成部分。利用MATLAB信号处理工具箱可以快速有效地设计各种数字滤波器。课题基于MATLAB有噪音语音信号处理的设计与实现,综合运用数字信号处理的理论知识对加噪声语音信号进行时域、频域分析和滤波.通过理论推导得出相应结论,再利用 MATLAB 作为编程工具进行计算机实现。在设计实现的过程中,使用窗函数法来设计FIR数字滤波器,用巴特沃斯、切比雪夫和双线性变法设计IIR数字滤波器,并利用MATLAB 作为辅助工具完成设计中的计算与图形的绘制。通过对对所设计滤波器的仿真和频率特性分析,可知利用MATLAB信号处理工具箱可以有效快捷地设计FIR和IIR数字滤波器,过程简单方便,结果的各项性能指标均达到指定要求.
关键词 数字滤波器 MATLAB 窗函数法 巴特沃斯 切比雪夫 双线性变换
ABSTRACT
Filter design in digital signal processing plays an important role, FIR digital filter and IIR filter is the filter is an important part of the design. Using the signal processing toolbox of MATLAB can quickly and efficiently design of digital filter. Research Based on MATLAB noise speech signal processing design and implementation, the integrated use of digital signal processing theory of knowledge on plus noise speech signals in time domain, frequency domain analysis and filtering. The corresponding results obtained through theoretical derivation, then the use of MATLAB as a programming tool for the computer realization。 In the design process, the use of window function method to the design of FIR digital filter, with Butterworth, Chebyshev and bilinear method of IIR digital filter design, and the use of MATLAB as a tool to complete the design calculation and drawing. Based on the design of filter simulation and frequency analysis, the use of MATLAB signal processing toolbox can effectively and quickly design FIR and IIR digital filter, process is simple and convenient, the performance indicators to meet specified requirements.个人收集整理,勿做商业用途文档为个人收集整理,来源于网络
Key words :digital filter MATLAB window function method Butterworth Chebyshev bilinear transformation
目 录
摘 要 II
ABSTRACT III
第1章 绪论 1
1.1 课题背景 1
1.2数字滤波器的应用范围及问题的产生 3
1.3 方案选择 4
1.4 论文的主要工作及内容安排 5
第2章 FIR滤波器 6
2.1 FIR滤波器的Matlab设计 6
2.2 Matlab的特点 8
2.3 本章小结 10
第3章 语音信号杂音滤除的具体实现 11
3。1 语音信号的采集 11
3.2 语音信号的时频分析 11
3.3 语音信号加噪与频谱分析 12
3。4 设计FIR和IIR数字滤波器 12
3.5 用滤波器对加噪语音信号进行滤波 21
3.6 比较滤波前后语音信号的波形及频谱. 21
3.7回放语音信号 21
3.8设计系统界面 22
3.8.1 系统界面设计工具—GUI概述 22
3。8。2 界面设计及使用 22
3.9本章小结 28
第4章 总结与展望 29
4.1总结 29
致 谢 30
参考文献 31
第1章 绪论
1。1 课题背景
我们录制的声音有噪声吗,应该是肯定有的,去掉声音中的噪声是一件很困难的事,因为各种各样的波形混合在一起,要把某些波形去掉是不可能的。要知道怎么降低噪声,我们先看噪声是怎么产生的.
噪声的来源一般有环境设备噪声和电气噪声。环境噪声一般指在录音时外界环境中的声音,设备噪声指麦克风、声卡等硬件产生的噪声,电气噪声有直流电中包含的交流声,三极管和集成电路中的无规则电子运动产生的噪声,滤波不良产生的噪声等。这些噪声虽然音量不大(因为在设备设计中已经尽可能减少噪声),但参杂在我们的语音中却感到很不悦耳,尤其中在我们语音的间断时间中,噪声更为明显。
数字滤波器, 是数字信号处理中及其重要的一部分。随着信息时代和数字技术的发展,受到人们越来越多的重视。数字滤波器可以通过数值运算实现滤波,所以数字滤波器处理精度高、稳定、体积小、重量轻、灵活不存在阻抗匹配问题,可以实现模拟滤波器无法实现的特殊功能。数字滤波器种类很多,根据其实现的网络结构或者其冲激响应函数的时域特性,可分为两种,即有限冲激响应( FIR,Finite Impulse Response)滤波器和无限冲激响应( IIR,Infinite Impulse Response)滤波器.
FIR滤波器结构上主要是非递归结构,没有输出到输入的反馈,系统函数H (z)在处收敛,极点全部在z = 0处(因果系统),因而只能用较高的阶数达到高的选择性.FIR数字滤波器的幅频特性精度较之于IIR数字滤波器低,但是线性相位,就是不同频率分量的信号经过fir滤波器后他们的时间差不变,这是很好的性质.FIR数字滤波器是有限的单位响应也有利于对数字信号的处理,便于编程,用于计算的时延也小,这对实时的信号处理很重要. FIR滤波器因具有系统稳定,易实现相位控制,允许设计多通带(或多阻带)滤波器等优点收到人们的青睐.
1.2 数字滤波器的应用范围及问题的产生
数字信号处理是利用计算机或专用处理设备,以数值计算的方法对信号进行采集、抽样、变换、综合、估值与识别等加工处理,借以达到提取信息和便于应用的目的.它在语音、雷达、图像、系统控制、通信、航空航天、生物医学等众多领域都获得了极其广泛的应用。具有灵活、精确、抗干扰强、设备尺寸小、造价低、速度快等优点。
数字滤波器, 是数字信号处理中及其重要的一部分。随着信息时代和数字技术的发展,受到人们越来越多的重视。数字滤波器可以通过数值运算实现滤波,所以数字滤波器处理精度高、稳定、体积小、重量轻、灵活不存在阻抗匹配问题,可以实现模拟滤波器无法实现的特殊功能。数字滤波器种类很多,根据其实现的网络结构或者其冲激响应函数的时域特性,可分为两种,即有限冲激响应( FIR,Finite Impulse Response)滤波器和无限冲激响应( IIR,Infinite Impulse Response)滤波器。
FIR滤波器结构上主要是非递归结构,没有输出到输入的反馈,系统函数H (z)在处收敛,极点全部在z = 0处(因果系统),因而只能用较高的阶数达到高的选择性。FIR数字滤波器的幅频特性精度较之于IIR数字滤波器低,但是线性相位,就是不同频率分量的信号经过fir滤波器后他们的时间差不变,这是很好的性质。FIR数字滤波器是有限的单位响应也有利于对数字信号的处理,便于编程,用于计算的时延也小,这对实时的信号处理很重要. FIR滤波器因具有系统稳定,易实现相位控制,允许设计多通带(或多阻带)滤波器等优点收到人们的青睐。
IIR滤波器采用递归型结构,即结构上带有反馈环路。IIR滤波器运算结构通常由延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联型四种结构形式,都具有反馈回路.同时,IIR数字滤波器在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,有现成的设计数据或图表可查,在设计一个IIR数字滤波器时,我们根据指标先写出模拟滤波器的公式,然后通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。
滤波器的设计可以通过软件或设计专用的硬件两种方式来实现。随着MATLAB软件及信号处理工具箱的不断完善,MATLAB很快成为应用学科等领域不可或缺的基础软件.它可以快速有效地实现数字滤波器的设计、分析和仿真,极大地减轻了工作量,有利于滤波器设计的最优化.
1.3 方案选择
在一个相对较安静的环境下,录下1s左右的wav声音信号,然后对声音进行采样,画出其时域波形和频谱图,利用程序编一个噪声信号加载在原声音信号里面,将这个被污染的语音信号通过baterworth带通滤波器,将滤波后的信号进行抽样再和原始信号进行比较,其流程图如下所示:
录音
噪声+录音
时域波形
频谱图
滤波
(
baterworth
)
over
开始
噪声
1.4 论文的主要工作及内容安排
在本论文后面的几章内,选择一个语音信号作为分析的对象,或录制一段各人自己的语音信号,对其进行频谱分析;利用MATLAB中的随机函数产生噪声加入到语音信号中,模仿语音信号被污染,并对其进行频谱分析;设计FIR和IIR数字滤波器, 并对被噪声污染的语音信号进行滤波, 分析滤波后信号的时域和频域特征,回放语音信号;最后,设计一个信号处理系统界面。在所设计的系统界面上可以选择滤波器的类型。将围绕MATLAB实现杂音滤除这一主题,进行深入讨论,仿真杂音滤除的过程。论文后续内容组织如下:第二章首先从数字信号处理技术入手,研究杂音滤除的主要技术。在此基础上,第三章叙述了滤除杂音的设计并分析.第四章对论文工作进行总结,给出结论,并对以后的研究工作进行展望.
第2章 FIR滤波器
2。1 FIR滤波器的Matlab设计
MATLAB被称为第四代计算机语言,又称为“草稿纸式”的语言,它具有不同于其他语言如Fortran、C语言等的特点,是边解释边执行的计算机语言.MATLAB是一款具有强大的矩阵运算、数据处理和图形显示功能的软件,其输出结果可视化,编程效率极高,用极少的代码即可实现复杂的运行,因此它使工程技术人员摆脱了繁琐的程序代码,以便快速地验证自己的模型和算法。
fir1就是采用经典窗函数法设计线性相位FIR数字滤波器的函数,且具有标准低通,带通,高通,带阻等类型。函数调用格式为:
b=fir1(n,wn[,'ftype’,window])
式中,n为FIR滤波器的阶数,对于高通,带阻滤波器,n需取偶数;wn为滤波器截止频率,范围为0~1(归一化频率)。对于带通,带阻滤波器,wn=[w1,w2](w1<w2);对于多带滤波器,如wn=[w1,w2,w3,w4],频率分段为:0〈w〈w1,w1<w〈w2,w2<w〈w3,w3〈w〈w4。
‘ ftype’为滤波器的类型:缺省时为低通或带通滤波器;'high'为高通滤波器;‘stop’为带阻滤波器,'DC—1'为第一频带为通带的多带滤波器;’DC—0’为第一频带为阻带的多带滤波器.
window为窗函数列向量,其长度为n+1.缺省时,自动取哈明窗。MATLAB提供的窗函数有boxcar、hanning、hamming、bartlett、blackman、kaiser、chebwin,调用方式见上节.b为FIR滤波器系数向量,长度为n+1。FIR滤波器的传递函数具有下列形式:
(4-21)
用函数fir1设计的FIR滤波器的群延迟为n/2。考虑到n阶滤波器系数个数为N,即n+1,这里的延迟与前面所讲的(N—1)/2的延迟一致。注意这里的滤波器的最小阶数比窗函数的长度少1。
2。2 MATLAB的特点
MATLAB编程的过程就是在编辑、编译、连接以及执行和调试之间作瀑布型的循环.Matlab语言与其它语言相比,较好地解决了上述问题,把编辑、编译、连接和执行融为一体。它能在同一画面上进行灵活操作快速排除输入程序中的书写错误、语法错误以至语意错误,从而加快了用户编写、修改和调试程序的速度,可以说在编程和调试过程中它是一种比VB还要简单的语言。
2。运算符丰富。由于MATLAB是用C语言编写的,MATLAB提供了和C语言几乎一样多的运算符,灵活使用MATLAB的运算符将使程序变得极为简短。
3.高级但简单的程序环境,与其它语言编写的程序结合和输入输出格式化数据的能力;MATLAB既具有结构化的控制语句(如for循环,while循环,break语句和if语句),又有面向对象编程的特性。
4. 程序限制不严格,程序设计自由度大。例如,在MATLAB里,用户无需对矩阵预定义就可使用。有大量事先定义的数学函数,并且有很强的用户自定义函数的能力;
5。程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行。
6. MATLAB的图形功能强大。在FORTRAN和C语言里,绘图都很不容易,但在MATLAB里,数据的可视化非常简单。它有一系列绘图函数(命令),例如线性坐标、对数坐标,半对数坐标及极坐标,均只需调用不同的绘图函数(命令),在图上标出图题、XY轴标注,格(栅)绘制也只需调用相应的命令,简单易行.另外,在调用绘图函数时调整自变量可绘出不变颜色的点、线、复线或多重线。这种为科学研究着想的设计是通用的编程语言所不及的。
7.语言简洁紧凑,使用方便灵活,库函数极其丰富。有高性能数值计算的高级算法,特别适合矩阵代数领域;MATLAB程序书写形式自由,利用起丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。由于库函数都由本领域的专家编写,用户不必担心函数的可靠性.可以说,用MATLAB进行科技开发是站在专家的肩膀上。
8。功能强大的工具箱是MATLAB的另一特色。MATLAB包含两个部分:核心部分和各种可选的工具箱.核心部分中有数百个核心内部函数.其工具箱又分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能,图示建模仿真功能,文字处理功能以及与硬件实时交互功能。功能性工具箱用于多种学科。而学科性工具箱是专业性比较强的,如(control、signal proceessing 、commumnication) toolbox等。这些工具箱都是由该领域内学术水平很高的专家编写的,所以用户无需编写自己学科范围内的基础程序,而直接进行高,精,尖的研究.
9.源程序的开放性。开放性也许是MATLAB最受人们欢迎的特点。除内部函数以外,所有MATLAB的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修改以及加入自己的文件构成新的工具箱。
10、扩充能力强 个人收集整理,勿做商业用途个人收集整理,勿做商业用途
高版本的Matlab语言有丰富的库函数,在进行复杂的数学运算时可以直接调用,而且Matlab的库函数同用户文件在形成上一样,所以用户文件也可作为Matlab的库函数来调用。因而,用户可以根据自己的需要方便地建立和扩充新的库函数,以便提高Matlab使用效率和扩充它的功能。另外,为了充分利用Fortran、C等语言的资源,包括用户已编好的Fortran,C语言程序,通过建立Me调文件的形式,混合编程,方便地调用有关的Fortran,C语言的子程序。
11、语句简单,内涵丰富
Mat1ab语言中最基本最重要的成分是函数,其一般形式为「a,6,c……」 = fun(d,e,f,……),即一个函数由函数名,输入变量d,e,f,……和输出变量a,b,c……组成,同一函数名F,不同数目的输入变量(包括无输入变量)及不同数目的输出变量,代表着不同的含义(有点像面向对象中的多态性.这不仅使Matlab的库函数功能更丰富,而大大减少了需要的磁盘空间,使得Matlab编写的M文件简单、短小而高效。
12高效方便的矩阵和数组运算
Matlab语言象Basic、Fortran和C语言一样规定了矩阵的算术运算符、关系运算符、逻辑运算符、条件运算符及赋值运算符,而且这些运算符大部分可以毫无改变地照搬到数组间的运算,有些如算术运算符只要增加“·”就可用于数组间的运算,另外,它不需定义数组的维数,并给出矩阵函数、特殊矩阵专门的库函数,使之在求解诸如信号处理、建模、系统识别、控制、优化等领域的问题时,显得大为简捷、高效、方便,这是其它高级语言所不能比拟的。在此基础上,高版本的Matlab已逐步扩展到科学及工程计算的其它领域。因此,不久的将来,它一定能名符其实地成为“万能演算纸式的”科学算法语言.本文为互联网收集,请勿用作商业用途个人收集整理,勿做商业用途
2.4 本章小结
本章重点描述了FIR滤波器的Matlab设计,主要包括Matlab的特点及FIR滤波器用Matlab语言的设计。
第3章 语音信号杂音滤除的具体实现
3。1 语音信号的采集
利用PC 机上的声卡和WINDOWS 操作系统可以进行数字信号的采集。将话筒输入计算机的语音输入插口上,启动录音机。按下录音按钮,接着对话筒说话“语音信号处理",说完后停止录音,屏幕左侧将显示所录声音的长度.点击放音按钮,可以实现所录音的重现。以文件名“speech”保存入g :\ MATLAB \ work 中.可以看到,文件存储器的后缀默认为。 wav ,这是WINDOWS 操作系统规定的声音文件存的标准。
3.2 语音信号的时频分析
利用MATLAB中的“wavread”命令来读入(采集)语音信号,将它赋值给某一向量。再对其进行采样,记住采样频率和采样点数.下面介绍Wavread 函数几种调用格式.
(1)y=wavread(file)
功能说明:读取file所规定的wav文件,返回采样值放在向量y中.
(2)[y,fs,nbits]=wavread(file)
功能说明:采样值放在向量y中,fs表示采样频率(hz),nbits表示采样位数。
(3)y=wavread(file,N)
功能说明:读取钱N点的采样值放在向量y中。
(4)y=wavread(file,[N1,N2])
功能说明:读取从N1到N2点的采样值放在向量y中。
接下来,对语音信号OriSound.wav进行采样。其程序如下:
>> [y,fs,nbits]=wavered (‘OriSound’); %把语音信号加载入Matlab 仿真软件平台中
然后,画出语音信号的时域波形,再对语音信号进行频谱分析。MATLAB提供了快速傅里叶变换算法FFT计算DFT的函数fft,其调用格式如下:
Xk=fft(xn,N)
参数xn为被变换的时域序列向量,N是DFT变换区间长度,当N大于xn的长度时,fft函数自动在xn后面补零。,当N小于xn的长度时,fft函数计算xn的前N个元素,忽略其后面的元素。
在本次设计中,我们利用fft对语音信号进行快速傅里叶变换,就可以得到信号的频谱特性.其程序如下:
[y,fs,nbits]=wavread ('OriSound’);
sound(y,fs,nbits); %回放语音信号
N= length (y) ; %求出语音信号的长度
Y=fft(y,N); %傅里叶变换
subplot(2,1,1);
plot(y);title(’原始信号波形');
subplot(2,1,2);
plot(abs(Y));
title(’原始信号频谱')
程序结果如下图:
图1 原始信号波形及频谱
3。3 语音信号加噪与频谱分析
MATLAB中产生高斯白噪声非常方便,有两个产生高斯白噪声的两个函数 .我们可以直接应用两个函数:一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。也可直接用randn函数产生高斯分布序列。
在本次课程设计中,我们是利用MATLAB中的随机函数(rand或randn)产生噪声加入到语音信号中,模仿语音信号被污染,并对其频谱分析。Randn函数有两种基本调用格式:Randn(n)和Randn(m,n),前者产生n×n服从标准高斯分布的随机数矩阵,后者产生m×n的随机数矩阵。在这里,我们选用Randn(m,n)函数。语音信号添加噪声及其频谱分析的主要程序如下:
[y,fs,nbits]=wavread ('OriSound);
N = length (y) ; %求出语音信号的长度
Noise=0.01*randn(n,2); %随机函数产生噪声
Si=y+Noise; %语音信号加入噪声
sound(Si);
subplot(2,1,1);
plot(Si);title(’加噪语音信号的时域波形’);
S=fft(Si); %傅里叶变换
subplot(2,1,2);
plot(abs(S));
title('加噪语音信号的频域波形');
程序结果如下图:
图2 加噪后的波形及频谱分析
3。4 设计FIR和IIR数字滤波器
IIR滤波器和FIR滤波器的设计方法完全不同。IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。其设计步骤是:先设计过渡模拟滤波器得到系统函数H(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。FIR滤波器比鞥采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法.对于线性相位滤波器,经常采用FIR滤波器。
对于数字高通、带通滤波器的设计,通用方法为双线性变换法。可以借助于模拟滤波器的频率转换设计一个所需类型的过渡模拟滤波器,再经过双线性变换将其转换策划那个所需的数字滤波器。具体设计步骤如下:
(1)确定所需类型数字滤波器的技术指标.
(2)将所需类型数字滤波器的边界频率转换成相应的模拟滤波器的边界频率,转换公式为Ω=2/T tan(0.5ω)
(3)将相应类型的模拟滤波器技术指标转换成模拟低通滤波器技术指标。
(4)设计模拟低通滤波器.
(5)通过频率变换将模拟低通转换成相应类型的过渡模拟滤波器。
(6)采用双线性变换法将相应类型的过渡模拟滤波器转换成所需类型的数字滤波器.
我们知道,脉冲响应不变法的主要缺点是会产生频谱混叠现象,使数字滤波器的频响偏离模拟滤波器的频响特性.为了克服之一缺点,可以采用双线性变换法。
下面我们总结一下利用模拟滤波器设计IIR数字低通滤波器的步骤:
(1)确定数字低通滤波器的技术指标:通带边界频率、通带最大衰减,阻带截止频率、阻带最小衰减。
(2)将数字低通滤波器的技术指标转换成相应的模拟低通滤波器的技术指标.
(3)按照模拟低通滤波器的技术指标设计及过渡模拟低通滤波器。
(4)用双线性变换法,模拟滤波器系统函数转换成数字低通滤波器系统函数。
如前所述,IIR滤波器和FIR滤波器的设计方法有很大的区别。下面我们着重介绍用窗函数法设计FIR滤波器的步骤。如下:
(1)根据对阻带衰减及过渡带的指标要求,选择串窗数类型(矩形窗、三角窗、汉宁窗、哈明窗、凯塞窗等),并估计窗口长度N。先按照阻带衰减选择窗函数类型。原则是在保证阻带衰减满足要求的情况下,尽量选择主瓣的窗函数.
(2)构造希望逼近的频率响应函数.
(3)计算h(n).。
(4)加窗得到设计结果。
接下来,我们根据语音信号的特点给出有关滤波器的技术指标:
①低通滤波器的性能指标:
fp=1000Hz,fc=1200Hz,As=100db ,Ap=1dB
②高通滤波器的性能指标:
fp=3500Hz,fc=4000Hz,As=100dB,Ap=1dB;
③带通滤波器的性能指标:
fp1=1200Hz,fp2=3000hZ,fc1=1000Hz,fc2=3200Hz,As=100dB,Ap=1dB
在Matlab中,可以利用函数fir1设计FIR滤波器,利用函数butter,cheby1和ellip设计IIR滤波器,利用Matlab中的函数freqz画出各步步器的频率响应.
hn=fir1(M,wc,window),可以指定窗函数向量window.如果缺省window参数,则fir1默认为哈明窗。其中可选的窗函数有Rectangular Barlrtt Hamming Hann Blackman窗,其相应的都有实现函数.
MATLAB信号处理工具箱函数buttp buttor butter是巴特沃斯滤波器设计函数,其有5种调用格式,本课程设计中用到的是[N,wc]=butter(N,wc,Rp,As,’s’),该格式用于计算巴特沃斯模拟滤波器的阶数N和3dB截止频率wc。
MATLAB信号处理工具箱函数cheblap,cheblord和cheeby1是切比雪夫I型滤波器设计函数.我们用到的是cheeby1函数,其调用格式如下:
[B,A]=cheby1(N,Rp,wpo,’ftypr')
[B,A]=cheby1(N,Rp,wpo,'ftypr’,’s’)
函数butter,cheby1和ellip设计IIR滤波器时都是默认的双线性变换法,所以在设计滤波器时只需要代入相应的实现函数即可。下面我们将给出FIR和IIR数字滤波器的主要程序。
%=========================IIR低通滤波器=======================
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
fp=2*Ft*tan(wp/2);
fs=2*Fs*tan(wp/2);
[n11,wn11]=buttord(wp,ws,1,50,'s'); %求低通滤波器的阶数和截止频率
[b11,a11]=butter(n11,wn11,'s'); %求S域的频率响应的参数
[num11,den11]=bilinear(b11,a11,0.5); %双线性变换实现S域到Z域的变换
[h,w]=freqz(num11,den11); %根据参数求出频率响应
plot(w*8000*0。5/pi,abs(h));
legend(’用butter设计');
图3 IIR低通滤波器
%======================IIR带通==========================
wp1=tan(pi*Fp1/Ft); %带通到低通滤波器的转换
wp2=tan(pi*Fp2/Ft);
ws1=tan(pi*Fs1/Ft);
ws2=tan(pi*Fs2/Ft);
w=wp1*wp2/ws2;
bw=wp2-wp1;
wp=1;
ws=(wp1*wp2—w.^2)/(bw*w);
[n12,wn12]=buttord(wp,ws,1,50,'s'); %求低通滤波器阶数和截止频率
[b12,a12]=butter(n12,wn12,'s'); %求S域的频率响应参数
[num2,den2]=lp2bp(b12,a12,sqrt(wp1*wp2),bw);%将S域低通参数转为带通的
[num12,den12]=bilinear(num2,den2,0。5);%双线性变换实现S域到Z域的转换
[h,w]=freqz(num12,den12); %根据参数求出频率响应
plot(w*8000*0。5/pi,abs(h));
axis([0 4000 0 1.5]);
legend(’用butter设计’);
图4 IIR带通滤波器
%======================IIR高通==========================
Ft=8000;
Fp=4000;
Fs=3500;
wp1=tan(pi*Fp/Ft); %高通到低通滤波器参数转换
ws1=tan(pi*Fs/Ft);
wp=1;
ws=wp1*wp/ws1;
[n13,wn13]=cheb1ord(wp,ws,1,50,’s'); %求模拟的低通滤波器阶数和截止频率
[b13,a13]=cheby1(n13,1,wn13,'s'); %求S域的频率响应的参数
[num,den]=lp2hp(b13,a13,wn13); %将S域低通参数转为高通的
[num13,den13]=bilinear(num,den,0.5); %利用双线性变换实现S域到Z域转换
[h,w]=freqz(num13,den13);
plot(w*21000*0。5/pi,abs(h));
title('IIR高通滤波器');
legend(’用cheby1设计’);
图5 IIR 高通滤波器
%**************************FIR低通滤波器*****************************
% 用窗函数设计低通滤波器的程序如下
rp=1;
rs=50;
p=1-10。^(—rp/20); %通带阻带波纹
s=10。^(-rs/20);
fpts=[wp ws];
mag=[1 0];
dev=[p s];
[n21,wn21,beta,ftype]=kaiserord(fpts,mag,dev);%kaiserord求阶数截止频率
b21=fir1(n21,wn21,Kaiser(n21+1,beta)); %由fir1设计滤波器
[h,w]=freqz(b21,1); %得到频率响应
plot(w/pi,abs(h));
title('FIR低通滤波器');
图6 FIR低通滤波器
%************************FIR带通滤波器************************
wp1=tan(pi*Fp1/Ft); %带通到低通滤波器参数转换
wp2=tan(pi*Fp2/Ft);
ws1=tan(pi*Fs1/Ft);
ws2=tan(pi*Fs2/Ft);
w=wp1*wp2/ws2;
bw=wp2—wp1;
wp=1;
ws=(wp*wp2-w.^2)/(bw*w);
[n22,wn22]=buttord(wp,ws,1,50,’s'); %求低通滤波器阶数和截止频率
[b22,a22]=butter(n22,wn22,'s'); %求S域的频率响应的参数
[num2,den2]=lp2bp(b22,a22,sqrt(wp1*wp2),bw); %将S域低通参数转为带通的
[num22,den22]=bilinear(num2,den2,0。5);%双线性变换实现S域到Z域的转换
[h,w]=freqz(num22,den22); %根据参数求出频率响应
plot(w*8000*0。5/pi,abs(h));
axis([0 4000 0 1.5]);
legend('用butter设计’);
图7 FIR带通滤波器
%***************************%FIR高通滤波器*******************
p=1-10。^(-rp/20); %通带阻带波纹
s=10。^(—rs/20);
fpts=[ws wp];
mag=[0 1];
dev=[p s];
[n23,wn23,beta,ftype]=kaiserord(fpts,mag,dev);
b23=fir1(n23,wn23,'high’,Kaiser(n23+1,beta)); %由fir1设计滤波器
[h,w]=freqz(b23,1); %得到频率响应
plot(w*12000*0。5/pi,abs(h));
title('FIR高通滤波器’);
axis([3000 6000 0 1.2]);
图8 FIR高通滤波器
3。5 用滤波器对加噪语音信号进行滤波
用自己设计的各滤波器分别对加噪的语音信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
函数fftfilt用的是重叠相加法实现线性卷积的计算.调用格式为:y=fftfilter(h,x,M)。其中,h是系统单位冲击响应向量;x是输入序列向量;y是系统的输出序列向量;M是有用户选择的输入序列的分段长度,缺省时,默认的输入向量的重长度M=512。
函数filter的调用格式:yn=filter(B,A。xn),它是按照直线型结构实现对xn的滤波。其中xn是输入信号向量,yn输出信号向量.
3.6 比较滤波前后语音信号的波形及频谱
% ======================双线性变换法=======================
%*************************低通滤波器************************
[y,fs,nbits]=wavread ('speech’);
n = length (y) ; %求出语音信号的长度
noise=0.01*randn(n,2); %随机函数产生噪声
s=y+noise; %语音信号加入噪声
S=fft(s); %傅里叶变换
z11=filter(num11,den11,s);
sound(z11);
m11=fft(z11); %求滤波后的信号
subpl
展开阅读全文