您好,欢迎来到华佗健康网。
搜索
您的当前位置:首页基于matlab的语音信号分析与处理

基于matlab的语音信号分析与处理

来源:华佗健康网


基于matlab的语音信号分析与处理

摘要:滤波器设计在数字信号处理中占有极其重要的地位,FIR数字滤波器和IIR滤波器是滤波器设计的重要组成部分。Matlab功能强大、编程效率高, 特别是Matlab具有信号分析工具箱,不需具备很强的编程能力,就可以很方便地进行信号分析、处理和设计.基于MATLAB有噪音语音信号处理的设计与实现,综合运用数字信号处理的理论知识对加噪声语音信号进行时域、频域分析和滤波。使用窗函数法来设计FIR数字滤波器,用巴特沃斯、切比雪夫和双线性变法设计IIR数字滤波器,并利用MATLAB作为辅助工具完成设计中的计算与图形的绘制。

关键词:数字滤波器;MATLAB;切比雪夫

Abstract: Filter design in digital signal processing plays an extremely important role, FIR digital filters and IIR filter is an important part of filter design. Matlab is powerful, programming efficiency, Matlab also has a particular signal analysis toolbox, it need not have strong programming skills can be easily signal analysis, processing and design。 MATLAB based on the noise issue speech signal processing design and implementation of digital signal processing integrated use of the theoretical knowledge of the speech signal plus noise, time domain, frequency domain analysis and filtering。 The corresponding results obtained through theoretical derivation, and then use MATLAB as a programming tool for computer implementation。Implemented in the design process, using the window function method to design FIR digital filters with Butterworth, Chebyshev and bilinear Reform IIR digital filter design and use of MATLAB as a supplementary tool to complete the calculation and graphic design Drawing。

1

Keywords:digital filter; MATLAB; Chebyshev

语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息形式。

Matlab语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种图的呈现等,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。

1。语音信号处理的概念及现状

语音是语言的声学表现,是人类交流信息最自然、最有效、最方便的手段。随着社会文化的进步和科学技术的发展,人类开始进入了信息化时代,用现代手段研究语音处理技术,使人们能更加有效地产生、传输、存储、和获取语音信息,这对于促进社会的发展具有十分重要的意义,因此,语音信号处理正越来越受到人们的关注和广泛的研究。

1.1语音信号处理的概念

语音是人类获取信息的重要来源和利用信息的重要手段.通过语言相互传递信息是人类最重要的基本功能之一.语音是语言的声学表现,是相互传递信息的最重要的手段,是人类最重要、最有效、最常用和最方便的交换信息的形式。

2

1。2语音信号处理的现状

20世纪60年代中期形成的一系列数字信号处理的理论和算法,如数字滤波器、快速傅立叶变换(FFT)等是语音信号数字处理的理论和技术基础.随着信息科学技术的飞速发展,语音信号处理取得了重大的进展:进入70年代之后,提出了用于语音信号的信息压缩和特征提取的线性预测技术(LPC),并已成为语音信号处理最强有力的工具,广泛应用于语音信号的分析、合成及各个应用领域,以及用于输入语音与参考样本之间时间匹配的动态规划方法;80年代初一种新的基于聚类分析的高效数据压缩技术—矢量量化(VQ)应用于语音信号处理中;而用隐马尔可夫模型(HMM)描述语音信号过程的产生是80年代语音信号处理技术的重大发展,目前HMM已构成了现代语音识别研究的重要基石。近年来人工神经网络(ANN)的研究取得了迅速发展,语音信号处理的各项课题是促进其发展的重要动力之一,同时,它的许多成果也体现在有关语音信号处理的各项技术之中。

2。语音信号处理的内容和方法 2。1语音信号处理的内容

用Matlab对含噪的语音信号同时在时域和频域进行滤波处理和分析,在Matlab应用软件下设计一个简单易用的图形用户界面(GUI),来解决一般应用条件下的各种语音信号的处理。

主要是通过用带有录音功能的手机或计算机录取一段语音信息,把已录取的语音信息存储为。wav格式文件,用matlab读取语音文件,运用数字信号学基本原理实现语音信号的处理,在matlab环境下综合运用信号提取,幅频变换以及傅里叶变换、滤波等技术来进行语音信号处理,能对语音信号进行采集,并对其进行各种处理,达到简单的语音信号处

3

理的目的。

2.2语音信号处理的方法

在图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。GUI的广泛应用是当今计算机发展的重大成就之一,他极大地方便了非专业用户的使用人们从此不再需要死记硬背大量的命令,取而代之的是可以通过窗口、菜单、按键等方式来方便地进行操作。

基于MATLAB有噪音语音信号处理的设计与实现,综合运用数字信号处理的理论知识对加噪声语音信号进行时域、频域分析和滤波.通过理论推导得出相应结论,再利用 MATLAB 作为编程工具进行计算机实现。在设计实现的过程中,使用窗函数法来设计FIR数字滤波器,用巴特沃斯、切比雪夫和双线性变法设计IIR数字滤波器,并利用MATLAB 作为辅助工具完成设计中的计算与图形的绘制。通过对对所设计滤波器的仿真和频率特性分析,可知利用MATLAB信号处理工具箱可以有效快捷地设计FIR和IIR数字滤波器。

3。语音信号处理

3。1原始语音信号采集与处理

使用带有录音功能的手机或电脑的声卡设备采集一段语音信号,并将其保存在电脑中,语音信息文件为 *。wav格式。语音信号的处理主要包括信号的提取、信号的调整、信号的变换和滤波等.通过用户图形界面的输出功能,将处理后的信号的语音进行播放,试听处理后的效果。语音信号采集过程如图3-1所示.

4

声音麦克风声卡滤波采样A/D转换WavWindows自带录音机 图3—1 语音信号采集过程

(1)语音信号的时域分析

语音信号是一种非平稳的时变信号,它携带着各种信息.在语音编码、语音合成、语音识别和语音增强等语音处理中无一例外需要提取语音中包含的各种信息。语音信号分析的目的就在与方便有效的提取并表示语音信号所携带的信息。语音信号分析可以分为时域和变换域等处理方法,其中时域分析是最简单的方法,直接对语音信号的时域波形进行分析,提取的特征参数主要有语音的短时能量,短时平均过零率,短时自相关函数等.

① 提取:通过图形用户界面上的菜单功能按键采集电脑设备上的一段音频信号,完成音频信号的频率,幅度等信息的提取,并得到该语音信号的波形图。

② 调整:在设计的用户图形界面下对输入的音频信号进行各种变化,如变化幅度、改变频率等操作,以实现对语音信号的调整.

(2)语音信号的频域分析

信号的傅立叶表示在信号的分析与处理中起着重要的作用.因为对于线性系统来说,可以很方便地确定其对正弦或复指数和的响应,所以傅立叶分析方法能完善地解决许多信号分析和处理问题。另外,傅立叶表示使信号的某些特性变得更明显,因此,它能更深入地说明信号的各项红物理现象。

5

由于语音信号是随着时间变化的,通常认为,语音是一个受准周期脉冲或随机噪声源激励的线性系统的输出.输出频谱是声道系统频率响应与激励源频谱的乘积.声道系统的频率响应及激励源都是随时间变化的,因此一般标准的傅立叶表示虽然适用于周期及平稳随机信号的表示,但不能直接用于语音信号.由于语音信号可以认为在短时间内,近似不变,因而可以采用短时分析法。

① 变换:在用户图形界面下对采集的语音信号进行Fourier等变换,并画出变换前后的频谱图和变换后的倒谱图。

② 滤波:滤除语音信号中的噪音部分,可采用低通滤波、高通滤波、带通滤波和帯阻滤波,并比较各种滤波后的效果。

(3)语音信号处理流程图

语音信号处理的过程包括语音信号的采集、信息提取、信号调整、信号变换、信号滤波。其中信号调整又包括幅度和频率的任意倍数变化,语音信号处理流程图如图3—2所示.

语音信号采集信息提取信号调整信号变换信号滤波效果显示 6

图3—2语音信号处理流程图

信号的滤波采用了四种滤波方式,来观察各种滤波性能的优缺点:如图3—3所示:

信号滤波切比雪夫—I型低通滤波切比雪夫—Ⅱ型高通滤波切比雪夫—Ⅱ型带阻滤波椭圆数字带通滤波 图3—3 语音信号滤波的方式

在以上两图中,可以看到整个语音信号处理系统的流程大概分为三步,首先要读入待处理的语音信号,然后进行语音信号的处理,包括信息的提取、幅度和频率的变换以及语音信号的傅里叶变换、滤波等;滤波又包括低通滤波、高通滤波、带通滤波和带阻滤波等方式。最后对处理过的语音信号进行处理后的效果显示.3。2语音的录入与打开

在MATLAB中,[y,fs,bits]=wavread(’Blip',[N1 N2]);用于读取语音,采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数。[N1 N2]表示读取从N1点到N2点的值(若只有一个N的点则表示读取前N点的采样值)。

sound(x,fs,bits); 用于对声音的回放。向量y则就代表了一个信号(也即一个复杂的“函数表达式\")也就是说可以像处理一个信号表达式一样处理这个声音信号。

3.3时域信号的FFT分析

7

FFT即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的.在MATLAB的信号处理工具箱中函数FFT和IFFT用于快速傅立叶变换和逆变换。函数FFT用于序列快速傅立叶变换,其调用格式为y=fft(x),其中,x是序列,y是序列的FFT,x可以为一向量或矩阵,若x为一向量,y是x的FFT且和x相同长度;若x为一矩阵,则y是对矩阵的每一列向量进行FFT.如果x长度是2的幂次方,函数fft执行高速基-2FFT算法,否则fft执行一种混合基的离散傅立叶变换算法,计算速度较慢。函数FFT的另一种调用格式为y=fft(x,N),式中,x,y意义同前,N为正整数.函数执行N点的FFT,若x为向量且长度小于N,则函数将x补零至长度N;若向量x的长度大于N,则函数截短x使之长度为N;若x 为矩阵,按相同方法对x进行处理。

3。4数字滤波器设计原理

数字滤波器的作用是利用离散时间系统的特性对输入信号波形(或频谱)进行加工处理,或者说利用数字方法按预定的要求对信号进行变换。

数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化过程中,使信号按预定的形式变化。数字滤波器有多种分类,根据数字滤波器冲激响应的时域特征,可将数字滤波器分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。从性能上来说,IIR滤波器传输函数的极点可位于单位圆内的任何地方,因此可用较低的阶数获得高的选择性,所用的存贮单元少,所以经济而效率高。但是这个高效率是以相位的非线性为代价的。选择性越好,则相位非线性越严重。相反,FIR滤波器却可以得到严格的线性相位,然而由于FIR滤波器传输函数的极点固定在原点,所以只能用较高的阶数达到高的选择性;对于同样的滤波器设计指标,FIR滤波器所要求的阶数可以比IIR滤波器高5~10倍,结果,成本较高,信号延时

8

也较大;如果按相同的选择性和相同的线性要求来说,则IIR滤波器就必须加全通网络进行相位较正,同样要大增加滤波器的节数和复杂性。

整体来看,IIR滤波器达到同样效果阶数少,延迟小,但是有稳定性问题,非线性相位;FIR滤波器没有稳定性问题,线性相位,但阶数多,延迟大。

3.5倒谱的概念

定义:倒谱定义为信号短时振幅谱的对数傅里叶反变换.

特点:具有可近似地分离并能提取出频谱包络信息和细微结构信息的特点

用途:①提取声道特征信息:提取频谱包络特征,以此作为描述音韵的特征参数而应用于语音识别.

②提取音源信息:提取基音特征,以此作为描述音韵特征的辅助参数而应用于语音识别。

求法:

倒谱窗lifterxnADPTBLog I ICxDPTDDPT峰值检测EF时间窗

A:短时信号;B:短时频谱;C:对数频谱; D:倒谱系数;E:对数频谱包络; F:

9

基本周期

4. 语音信号处理实例分析

4。1图形用户界面设计

在MATLAB主窗口中,选择File菜单中的New菜单项,再选择其中的GUI命令,就会显示图形用户界面的设计模板.MATLAB为GUI设计一共准备了4种模板,分别是Blank GUI(默认) 、GUI with Uicontrols(带控件对象的GUI模板) 、GUI with Axes and Menu(带坐标轴与菜单的GUI模板)与Modal Question Dialog(带模式问话对话框的GUI模板)。

设计语音信号处理系统的用户图形操作界面(GUI)SoundProcess,其中菜单主要包括File、Process和Output三大主要部分,其中File菜单包括输入(Input)、保存(Save)和退出(Quit)等功能;Process菜单主要包括提取(Extract)、调整(Extract)、变换(Transform)和滤波(Filter)菜单,其中调整(Extract)包括幅度调整(Range)和频率调整(Frequency),滤波(Filter)菜单包含低通滤波(LowpassFilter)、高通滤波(HighpassFilter)、带通滤波(BandpassFilter)和帯阻滤波(BandstopFilter)等功能菜单。

4.2信号的采集

该系统是以一段简短的的语音信号做为分析样本,通过计算机系统将一段“主人,信息收到了\"的语音信号保存到到计算机中,并且保存格式为“*.wav”。4.3语音信号的处理设计

10

(1)语音信号的提取

在Matlab中使用Wavread函数,可得出信号的采样频率为22500,并且声音是单声道的。利用Sound函数可以清晰的听到“主人,信息收到了”的语音。采集数据并画出波形图。

其中声音的采样频率Fs=22050Hz,y为采样 数据,NBITS表示量化阶数。

部分程序如下:

fn=input(' Enter WAV filename:’,'s'); %获取一个*.wav的文件

[x,fs,nb]=wavread(fn);

ms2=floor(fs*0.002);

ms10=floor(fs*0。01);

ms20=floor(fs*0。02);

ms30=floor(fs*0。03);••••

t=(0:length(x)-1)/fs; %计算样本时刻

subplot(2,1,1); %确定显示位置

11

plot(t,x); %画波形图

legend(’Waveform’);

xlabel( ’Time(s)’);

ylabel(’Amplitude’);

运行后弹出语音信号处理系统的操作界面如图4—1:

图4—1语音信号处理系统的操作界面

然后点击File菜单中的子菜单Input,回到Matlab软件的输入界面如图4—2:

12

图4—2输入界面

输入要处理的语音信号的名称,便可得到语音语音的波形图如图4—3:

图4-3语音语音的波形图

如图中提取的语音的波形图所示,整段音频数据中得声音高低起伏与录入的声音信号基本一致,并且可以观察到其中包含部分高频噪声。

13

(2)语音信号的调整

在语音信号的研究中,经常会对语音信号进行进行多倍频率以及多倍幅度变换调整,日常应用中,这种变换调整也经常要用到。所以在设计中也添加了这种功能,并能够观察调整后的信号的波形图得变化, 而且能通过语音处理界面的输出功能试听处理后的语音信号。

①语音信号的频率调整

在设计中,可以将语音信号的采样频率提高或降低,来实现语音信号的调整,得到理想的语音信号。例如将采样频率提高一倍,即可得到语音信号频率为原频率2倍新的语音信号.运行ProcessAdjustFrequency,得到如图4-4的信号波形图,并试听调整后的效果。

图4—4频率调整后波形图

与原语音信号相比,经过调整后的信号周期变为原来的1/2,此时的语速明显变快,即实现了信号的2倍频功能.

14

②语音信号的振幅调整

在设计中,可以将语音信号的幅度进行提高或降低操作,来实现语音信号的调整,得到声音音量大小不同的语音信号,例如将原语音信号的幅度提高一倍,得到如下图4—5的信号波形图,可以通过GUI操作界面的输出功能试听调整后的效果。

图4-5 幅度调整后波形图

此时听到的调整后声音声调变高,但不是很明显,可以将幅度的变化值设置的比较大,那样的话就可以得到效果相当明显的语音信号了。

(3)语音信号的傅里叶变换

倒谱分析是指信号短时振幅谱的对数进行傅里叶反变换.它具有可近似地分离并提取出频谱包络信息和细微结构信息的特点。

对语音信号进行频谱分析,在Matlab中可以利用函数fft对信号行快速傅里叶变换,得到信号的频谱图,并进行倒谱分析,得到倒谱图。

15

傅里叶变换的部分程序如下:

x=y(44101:55050,1); %提取原语音信号的一部分

t=(0:length(x)-1)/fs; %计算样本时刻

subplot(3,1,1); %确定显示位置

plot(t,x); %画波形图

legend(’波形图');

xlabel( 'Time(s)’);

ylabel('Amplitude');

Y=fft(x,hamming(length(x))); %做加窗傅里叶变换

fm=5000*length(Y)/fs; %限定频率范围

f=(0:fm)*fs/length(Y); %确定频率刻度

subplot(3,1,2);

plot(f,20*log10(abs(Y(1:length(f)))+eps));

16

legend(’频谱图'); %画频谱图

ylabel(’幅度(db)’);

xlabel(’频率(Hz)');

c=fft(log(abs(x)+eps)); %倒频谱计算

ms1=fs/1000;

ms20=fs/50

q=(ms1:ms20)/fs; %确定倒频刻度

subplot(3,1,3);

plot(q,abs(c(ms1:ms20))); %画倒谱图

legend('倒谱图');

xlabel('倒频(s)');

ylabel(’倒频谱幅度(Hz)');

运行Process Transform,对语音信号的一部分进行傅里叶变换,并进行倒谱分析,得到如图4-6:

17

图4-6 声音样本波形图、频谱图和倒谱图

从上面的倒谱图可以看出.当读“主人,信息收到了”时,所对应的频率大概在200Hz左右。这与人的语音信号频率集中在200 Hz到4。5 kHz之间是相一致的.而在未发声的时间段内,相对的小高频部分(200500Hz)应该属于背景噪声。

(4)语音信号的滤波

从图4-4中发现,语音信号中包含背景噪声,这些噪声的频率一般较高.所以可以利用MATLAB软件中的滤波器进行滤波处理,得到较为理想的语音信号。①语音信号的低通滤波

系统中设计了一个截止频率为200Hz切比雪夫—I型低通滤波器,它的幅频特性如下图4-7:

18

图4-7 低通滤波器的幅频特性

低通滤波器性能指标:wp=0。075pi,ws =0。125pi,Rp=0.25;As=50dB;

经过低通滤波器处理后,比较处理前后的波形图的变化,如下图4—8:

图4-8 低通滤波后波形和频谱的变化

19

低通滤波后,声音稍微有些发闷、低沉,原因是高频分量被低通滤波器衰减。但是很接近原来的声音。

③ 语音信号的高通滤波

运用切比雪夫-Ⅱ型数字高通滤波器,对语音信号进行滤波处理。高通滤波器性能指标:wp=0。375pi,ws=0.425pi,Rp=0.25;As=50dB;然后将其与原信号的比较图如下图4-9:

图4—9高通滤波后波形和频谱的变化

高通滤波后,此时只有少许杂音,原因是低频分量被高通滤波器衰减,而人声部分正好是低频部分,所以只剩下杂音,或者发出高频杂音但人的耳朵听不到。③语音信号的带通滤波

20

运用椭圆数字带通滤波器函数,对语音信号进行滤波处理后其与原信号的比较图如下图4—10:

图4-10带通滤波后波形和频谱的变化

④语音信号的带阻滤波

运用切比雪夫-Ⅱ型数字带阻滤波器,对语音信号进行滤波处理后其与原信号的比较图如下图4—11:

21

图4-11帯阻滤波后波形和频谱的变化

从以上各种数字滤波器经过滤波后得出的语音信号相比较,低通滤波后,声音稍微有些发闷,但是很接近原来的声音;高通滤波后听不到人的声音;带通滤波后声音有点像机器人小叮当发出的声音。带阻滤波后,声音比较接近原来的声音。从频谱图中我们可以看出声音的能量主要集中在低频(0。2pi即2204.5Hz以内)部分。

4。4 语音信号的输出

可以将处理后的语音信号在Matlab软件先播放,体验处理后的语音信号的效果.还可以将处理后的语音信号保存在电脑上。

运行FileSave,保存处理后的语音信号.如果没有语音信号被处理,则系统会出现提示如下图4—12:

22

图4—12 保存提示界面

如果有语音信号被处理,运行FileSave,系统会出现提示如下图4—13:

图4-13 保存界面

保存后,整个操作过程就完成了。

参考文献

23

1余胜威,吴婷,罗建桥.MATLAB GUI设计入门与实践.北京:清华大学出版社,2016

2 高西全,丁玉美.数字信号处理.第3版.西安:西安电子科技大学出版社,2008

3 罗华飞.MATLAB GUI设计学习手记.第3版.北京:北京航空航天大学出版社,2014

4 刘泉,阙大顺.数字信号处理原理与实现.北京:电子工业出版社,2010

5 张磊,毕靖,郭莲英.MATLAB实用教程.北京:人民邮电出版社,2008

6 张威.MATLAB基础与编程入门.西安:西安电子科技大学出版社,2013

7 刘帅奇,李会雅,赵杰.MATLAB程序设计基础与应用.北京:清华大学出版社,2016

8 丁伟雄.MATLAB R2015a数字图像处理.北京:清华大学出版社,2016

9 刘维.精通MATLAB与C/C++混合程序设计.第4版.北京:北京航空航天大学出版社,2015

附录(I) 设计FIR和IIR数字滤波器

%=========================IIR=======================

低通滤波器

Ft=8000;

24

Fp=1000;

Fs=1200;

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’);

[num11,den11]=bilinear(b11,a11,0。5);

[h,w]=freqz(num11,den11);

figure;

plot(w*8000*0。5/pi,abs(h));

legend(‘IIR低通滤波器’,’Location’,'NorthWest’)25

grid;

程序结果如下图:

1.4IIR低通滤波器1.210.80.60.40.2005001000150020002500300035004000 %======================IIR带

Fp1=1200;

Fp2=3000;

Fs1=1000;

Fs2=3200;

26

==========================

Ft=8000;

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’);

[num2,den2]=lp2bp(b12,a12,sqrt(wp1*wp2),bw);

[num12,den12]=bilinear(num2,den2,0.5);

27

[h,w]=freqz(num12,den12);

figure;

plot(w*8000*0。5/pi,abs(h));

axis([0 4500 0 1.5]);

legend(‘IIR带通滤波器’,’Location',’NorthWest');

grid;

程序结果如下图:

1.5IIR带通滤波器10.50050010001500200025003000350040004500%

======================IIR

高通滤28

波器

========================

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');

[num,den]=lp2hp(b13,a13,wn13);

[num13,den13]=bilinear(num,den,0.5);

[h,w]=freqz(num13,den13);

29

figure;

plot(w*21000*0.5/pi,abs(h));

legend(‘IIR高通滤波器’,’Location’,’NorthWest’);

axis([0 11000 0 1.5]);

grid;

程序结果如下图:

1.5IIR高通滤波器10.5001000200030004000500060007000800090001000011000

%**************************FIR低通滤波*****************************

30

Ft=8000;

Fp=1000;

Fs=1200;

wp=2*Fp/Ft;

ws=2*Fs/Ft;

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);

31

b21=fir1(n21,wn21,kaiser(n21+1,beta));

[h,w]=freqz(b21,1);

figure;

plot(w*8000*0.5/pi,abs(h));

title(‘FIR低通滤波器’,’fontweight’,’bold');

grid;

程序结果如下图:

FIR低通滤波器1.41.210.80.60.40.2005001000150020002500300035004000

%************************FIR带通滤波器****************

32

********

Fp1=1200; %通带边界频率

Fp2=3000;

Fs1=1000; %阻带截止频率

Fs2=3200;

Ft=8000;

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;

33

ws=(wp*wp2-w。^2)/(bw*w);

[n22,wn22]=buttord(wp,ws,1,50,’s’);

[b22,a22]=butter(n22,wn22,'s’);

[num2,den2]=lp2bp(b22,a22,sqrt(wp1*wp2),bw);

[num22,den22]=bilinear(num2,den2,0.5);

[h,w]=freqz(num22,den22);

figure;

plot(w*8000*0.5/pi,abs(h));

axis([0 4500 0 1.5]);

legend(‘FIR带通滤波器’,'Location’,’NorthWest’grid;

程序结果如下图:

34

);

1.5FIR带通滤波器10.50050010001500200025003000350040004500

%***************************%FIR高通滤波器*******************

Ft=8001;

Fp=4000; %通带边界频率

Fs=3500; %阻带截止频率

wp=2*Fp/Ft;

ws=2*Fs/Ft;

rp=1;

35

rs=50;

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));

[h,w]=freqz(b23,1);

figure;

plot(w*12000*0.5/pi,abs(h));

title(‘FIR高通滤波器’,’fontweight',’bold’);

axis([2500 5500 0 1。2]);

36

grid;

程序结果如下图:

FIR高通滤波器10.80.60.40.202500300035004000450050005500

附录(II)比较滤波前后语音信号的波形及频谱

% ======================双线性变换法

=======================

%*************************低通滤波器************************

[y,fs,nbits]=wavread (‘OriSound'); %IIR低通

37

n = length (y) ; %求出语音信号的长度

Noise=0。2*randn(n,2); %随机函数产生噪声

s=y+Noise; %语音信号加入噪声

S=fft(s);

Ft=8000;

Fp=1000;

Fs=1200;

wp=2*pi*Fp/Ft;

ws=2*pi*Fs/Ft;

[n11,wn11]=buttord(wp,ws,1,50,’s’);%求低通滤波器的阶数和截止频率

[b11,a11]=butter(n11,wn11,’s’); %求S域的频率响应的参数

[num11,den11]=bilinear(b11,a11,0.5); %利用双线性变换实现频率响应S域到Z域的变换

z11=filter(num11,den11,s);

38

sound(z11);

m11=fft(z11); %求滤波后的信号

figure;

subplot(2,2,1);

plot(abs(S),’g’);

title(‘滤波前信号的频谱',’fontweight’,'bold’);

axis([ 0 150000 0 4000]);

grid;

subplot(2,2,2);

plot(abs(m11),'r’);

title(‘滤波后信号的频谱’,’fontweight’,’bold’axis([ 0 150000 0 4000]);

grid;

39

);

subplot(2,2,3);

plot(s);

title(‘滤波前信号的波形’,’fontweight’,’bold’);

axis([95000 100000 —1 1]);

grid;

subplot(2,2,4);

plot(z11);

title(‘滤波后的信号波形’,’fontweight','bold’axis([95000 100000 —1 1]);

grid;

程序结果如下图:

40

);

滤波前信号的频谱4000300020001000005101滤波后信号的频谱40003000200010000051015x 104x 10滤波前信号的波形10.50-0.5-19.59.69.79..9滤波后的信号波形10.50-0.5104-19.59.69.79..9104x 10x 10

附II-1 双线性低通滤波器比较

%**********************带通滤波器*****************************

[y,fs,nbits]=wavread (‘OriSound'); %IIR带通

n = length (y) ; %求出语音信号的长度

Noise=0。2*randn(n,2); %随机函数产生噪声

s=y+Noise; %语音信号加入噪声

41

S=fft(s); %傅里叶变换

Ft=8000;

Fp=1000;

Fs=1200;

wp=2*Fp/Ft;

ws=2*Fs/Ft;

rp=1;

rs=50;

p=1—10.^(-rp/20); q=10。^(-rs/20);

fpts=[wp ws];

mag=[1 0];

dev=[p q];

%通带阻带波纹

42

[n21,wn21,beta,ftype]=kaiserord(fpts,mag,dev);%由kaiserord求滤波器的阶数和截止频率

b21=fir1(n21,wn21,kaiser(n21+1,beta)); %由fir1设计滤波器

z21=fftfilt(b21,s);

sound(z21);

m21=fft(z21); %求滤波后的信号

figure(4);

subplot(2,2,1);

plot(abs(S),’g’);

title(‘滤波前信号的频谱’,’fontweight’axis([0 150000 0 4000]);

grid;

subplot(2,2,2);

plot(abs(m21),'r’);

43

,’bold’);

title(‘滤波后信号的频谱’,'fontweight’,’bold’);

axis([0 150000 0 4000]);

grid;

subplot(2,2,3);

plot(s);

title(‘滤波前信号的波形’,’fontweight’,'bold');

axis([95000 100000 -1 1]);

grid;

subplot(2,2,4);

plot(z21);

title(‘滤波后的信号波形’,'fontweight',’bold’);

axis([95000 100000 —1 1]);

grid;

44

程序结果如下图:

滤波前信号的频谱4000300020001000005101滤波后信号的频谱40003000200010000051015x 104x 10滤波前信号的波形10.50-0.5-19.59.69.79..9滤波后的信号波形10.50-0.5104-19.59.69.79..9104x 10x 10

附II—2 双线性带通滤波器比较

%**********************高通滤波器*****************************

[y,fs,nbits]=wavread (‘OriSound'); %IIR高通

n = length (y) ; %求出语音信号的长度

Noise=0。2*randn(n,2); %随机函数产生噪声

s=y+Noise; %语音信号加入噪声

45

S=fft(s); %傅里叶变换

Fp1=1200;

Fs1=1000;

Ft=8000;

wp1=tan(pi*Fp1/Ft);

ws1=tan(pi*Fs1/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域转换

46

z13=filter(num13,den13,s);

sound(z13);

m13=fft(z13); %求滤波后的信号

figure;

subplot(2,2,1);

plot(abs(S),’g’);

title(‘滤波前信号的频谱',’fontweight’,’axis([0 150000 0 4000]);

grid;

subplot(2,2,2);

plot(abs(m13),'r’);

title(‘滤波后信号的频谱',’fontweight’,’axis([0 150000 0 4000]);

47

bold’);bold’);

grid;

subplot(2,2,3);

plot(s);

title(‘滤波前信号的波形’,’fontweight',’bold’);

axis([95000 100000 —1 1]);

grid;

subplot(2,2,4);

plot(z13);

title(‘滤波后的信号波形’,’fontweight','bold’);

axis([95000 100000 —1 1]);

grid;

程序结果如下图

48

滤波前信号的频谱4000300020001000005101滤波后信号的频谱40003000200010000051015x 104x 10滤波前信号的波形10.50-0.5-19.59.69.79..9滤波后的信号波形10.50-0.5104-19.59.69.79..9104x 10x 10

附II-3 双线性高通滤波器比较

%========================窗函数法

==========================

%**************************低通滤波器****************************

[y,fs,nbits]=wavread (‘OriSound’); %FIR低通

n = length (y) ; %求出语音信号的长度

Noise=0。2*randn(n,2); %随机函数产生噪声

49

s=y+Noise; %语音信号加入噪声

S=fft(s); %傅里叶变换

Ft=8000;

Fp=1000;

Fs=1200;

wp=2*Fp/Ft;

ws=2*Fs/Ft;

rp=1;

rs=50;

p=1—10。^(-rp/20); q=10.^(—rs/20);

fpts=[wp ws];

mag=[1 0];

%通带阻带波纹

50

dev=[p q];

[n21,wn21,beta,ftype]=kaiserord(fpts,mag,dev);%由kaiserord求滤波器的阶数和截止频率

b21=fir1(n21,wn21,kaiser(n21+1,beta)); %由fir1设计滤波器

z21=fftfilt(b21,s);

sound(z21);

m21=fft(z21); %求滤波后的信号

figure(4);

subplot(2,2,1);

plot(abs(S),’g');

title(‘滤波前信号的频谱’,’fontweight',’bold');

axis([0 150000 0 4000]);

grid;

subplot(2,2,2);

51

plot(abs(m21),’r’);

title(‘滤波后信号的频谱',’fontweight’,’bold’);

axis([0 150000 0 4000]);

grid;

subplot(2,2,3);

plot(s);

title(‘滤波前信号的波形',’fontweight','bold’);

axis([95000 100000 -1 1]);

grid;

subplot(2,2,4);

plot(z21);

title(‘滤波后的信号波形’,’fontweight',’bold’);

axis([95000 100000 —1 1]);

52

grid;

滤波前信号的频谱4000300020001000005101滤波后信号的频谱40003000200010000051015x 104x 10滤波前信号的波形10.50-0.5-19.59.69.79..9滤波后的信号波形10.50-0.5104-19.59.69.79..9104x 10x 10

附II—4 窗函数低通滤波器比较

%****************************带通滤波器***************************

[y,fs,nbits]=wavread ('OriSound’);

n = length (y) ; %求出语音信号的长度

Noise=0.2*randn(n,2); %随机函数产生噪声

s=y+Noise; %语音信号加入噪声

53

S=fft(s); %傅里叶变换

Fp1=1200;

Fp2=3000;

Fs1=1000;

Fs2=3200;

Ft=2200;

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域的频率响应的参数

z22=fftfilt(b22,s);

sound(z22);

m22=fft(z22); %求滤波后的信号

figure;

subplot(2,2,1);

plot(abs(S),'g’);

title(’滤波前信号的频谱’,'fontweight',’axis([0 500 0 500]);

grid;

subplot(2,2,2);

55

bold’);

plot(abs(m22),'r');

title(’滤波后信号的频谱',’fontweight’,'bold');

axis([0 500 0 500]);

grid;

subplot(2,2,3);

plot(s);

title('滤波前信号的波形','fontweight’,’bold’);

axis([95000 100000 -1 1]);

grid;

subplot(2,2,4);

plot(z22);

title(’滤波后的信号波形’,'fontweight','bold’);

axis([95000 100000 —1 1]);

56

grid;

滤波前信号的频谱5004003002001000010020030040050050040030020010000滤波后信号的频谱100200300400500滤波前信号的波形10.50-0.5-19.59.69.79..9104滤波后的信号波形10.50-0.5-19.59.69.79..9104x 10x 10

附II—5 窗函数带通滤波器比较

%*************************高通滤波器*****************************

[y,fs,nbits]=wavread (‘OriSound');

n = length (y) ; %求出语音信号的长度

Noise=0。2*randn(n,2); %随机函数产生噪声

s=y+Noise; %语音信号加入噪声

57

S=fft(s); %傅里叶变换

Ft=8001;

Fp=4000;

Fs=3500;

wp=2*Fp/Ft;

ws=2*Fs/Ft;

rp=1;

rs=50;

p=1—10.^(-rp/20);q=10.^(—rs/20);

fpts=[ws wp];

mag=[0 1];

dev=[p q];

%通带阻带波纹58

[n23,wn23,beta,ftype]=kaiserord(fpts,mag,dev);

b23=fir1(n23,wn23,’high',kaiser(n23+1,beta)); %由fir1设计滤波器

z23=fftfilt(b23,s);

sound(z23);

m23=fft(z23); %求滤波后的信号

figure;

subplot(2,2,1);

plot(abs(S),’g’);

title(‘滤波前信号的频谱','fontweight’,’axis([0 150000 0 4000]);

grid;

subplot(2,2,2);

plot(abs(m23),’r’);

59

’);

bold

title(‘滤波后信号的频谱',’fontweight’,’bold');

axis([0 150000 0 4000]);

grid;

subplot(2,2,3);

plot(s);

title(‘滤波前信号的波形’,’fontweight’,’bold');

axis([95000 100000 -1 1]);

grid;

subplot(2,2,4);

plot(z23);

title(‘滤波后的信号波形’,’fontweight’,’bold’)axis([95000 100000 —1 1]);

grid;

60

;

滤波前信号的频谱4000300020001000005101滤波后信号的频谱40003000200010000051015x 104x 10滤波前信号的波形10.50-0.5-19.59.69.79..9滤波后的信号波形10.50-0.5104-19.59.69.79..9104x 10x 10

附II—6 窗函数高通滤波器比较

61

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务