文档库 最新最全的文档下载
当前位置:文档库 › 兰州商学院毕业论文-基于Matlab的语音信号处理与仿真

兰州商学院毕业论文-基于Matlab的语音信号处理与仿真

兰州商学院

本科生毕业论文(设计)

论文(设计)题目:基于Matlab的语音信号处理与仿真学院、系:信息工程学院

计算机科学与技术系

专业 (方向):电子信息工程

年级、班:2007级电子信息工程

学生姓名:马芳兰

指导教师:李海燕

2011_年 5 月25 日

声明

本人郑重声明:所呈交的毕业论文(设计)是本人在导师的指导下取得的成果。对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。因本毕业论文(设计)引起的法律结果完全由本人承担。

本毕业论文(设计)成果归兰州商学院所有。

特此声明

毕业论文(设计)作者签名:

年月日

基于Matlab的语音信号处理与仿真

摘要

语音信号处理是研究数字信号处理技术和语音学知识对语音信号进行处理的新兴学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。本文采用Matlab7.0综合运用GUI界面设计,各种函数调用等对语音信号进行采集、提取、变频、变幅,傅里叶变换、滤波等简单处理。程序界面简练,操作简便,具有一定的实际应用意义。

[关键词] 语音信号Matlab 信号处理GUI

ABSTRACT

Voice signal processing is to study the use of digital signal processing technology and knowledge of the voice processing of the emerging discipline is the fastest growing areas of information science one of the core technology. In this article, using Matlab7.0 comprehensive use GUI interface design, various function calls to simple processing of the voice signals such as collection, extraction, adjustment of frequency and amplitude, Fourier transform and filtering. The program interface is concise, simple and has some significance in practice.

[Key Words] Voice Signal, Matlab, Signal Processing, GUI

目录

一、引言 (1)

(一)课题的背景及意义 (1)

(二)国内外的研究现状 (2)

(三)本文主要内容 (2)

二、语音信号处理基本知识和仿真环境 (3)

(一)语音信号处理理论依据 (3)

1、采样定理 (3)

2、采样频率 (3)

3、采样位数和采样频率 (3)

(二)语音信号的分析及处理 (4)

1、语音的录入与打开 (4)

2、时域信号的FFT分析 (4)

3、倒谱的概念 (5)

4、数字滤波器设计原理 (6)

(三)仿真环境 (7)

三、语音信号处理的总体方案 (9)

(一)本文基本要求 (9)

(二)语音信号的处理 (10)

1、语音信号的采集 (10)

2、语音信号的处理 (10)

3、语音信号的效果显示 (10)

4、语音信号处理方框图 (10)

四、语音信号处理实例 (12)

(一)信号的采集 (12)

(二)语音信号的提取 (12)

(二)语音信号的调整 (13)

1、语音信号的频率调整 (13)

2、语音信号的振幅调整 (15)

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

(四)语音信号的滤波 (18)

1、语音信号的低通滤波 (19)

2、语音信号的高通滤波 (20)

3、语音信号的带通滤波 (21)

4、语音信号的带阻滤波 (22)

五、图形用户界面制作 (24)

六、结论 (25)

参考文献 (27)

致谢 (28)

基于Matlab的语音信号处理与仿真

一、引言

(一)课题的背景及意义

语音是人类获取信息的重要来源和利用信息的重要手段。通过语言相互传递信息是人类最重要的基本功能之一。语言是人类特有的功能,它是创造和记载几千年人类文明史的根本手段,没有语言就没有今天的人类文明。语音是语言的声学表现,是相互传递信息的最重要的手段,是人类最重要、最有效、最常用和最方便的交换信息的形式。随着计算机技术和信息技术的发展,语音交互已经成为人机交互的必要手段,而语音信号的采集和处理是人机交互的前提和基础。尽管在Windows附件的娱乐中带有一个录音机,通过它可以驱动声卡采集语音信号并保存为语音文档,但是要对采集的信号进一步分析处理就必须另外编程或通过其它软件,而且Windows附件中的录音机功能极其有限不能扩展。而在Matlab环境中,可以通过多种编程方法驱动声卡,实现对语音信号的采集和回放。同时由于Matlab是一个数据分析和处理功能十分强大的工程实用软件,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。

语音信号处理是研究用数字信号处理技术对语音信号进行处理的一门新兴学科,同时又是综合性的多学科领域和涉及面很广的交叉学科。作为高科技应用领域的研究热点,语音信号处理技术从理论的研究实际应用已经走过了几十个春秋并且取得了长足的进步。它正在直接与办公、交通、

金融、保安、商业、旅游等行业的语音咨询与管理等各种实际应用领域相接轨。可见,语音信号处理技术的研究将是一项挑战性的工作。

(二)国内外的研究现状

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

(三)本文主要内容

本文主要介绍的是语音信号的简单处理。在第一部分引言中简要介绍了语音信号处理的研究发展状况;第二部分主要介绍了语音信号处理所需要的基础知识,如:采样频率、采样位数的概念、采样定理;时域信号的FFT分析;数字滤波器的设计原理和方法,各种不同类型滤波器的性能比较等等,以及Matlab仿真环境;第三部分对语音信号的处理作了详细介绍,

语音信号的处理包括信号的提取、调整、变换和滤波;第四部分是语音信号的实例分析,是对前面所讲知识的应用;第五部分是图形用户界面(GUI)的设计与实现。

二、语音信号处理基本知识和仿真环境

(一)语音信号处理理论依据

1、采样定理

在进行模拟/数字信号的转换过程中,当采样频率fs.max大于信号中最高频率fmax的2倍时,即:fs.max>=2fmax,则采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍;采样定理又称奈奎斯特定理[1,3,4]。

2、采样频率

采样频率[1,3,4]是指计算机每秒钟采样多少个声音样本,是描述声音文件的音质、音调,衡量声卡、声音文件的质量标准。采样频率越高,即采样的间隔时间越短,则在单位时间内计算机得到的声音样本数据就越多,对声音波形的表示也越精确。采样频率与声音频率之间有一定的关系,根据奈奎斯特理论,只有采样频率高于声音信号最高频率的两倍时,才能把数字信号表示的声音还原成为原来的声音。这就是说采样频率是衡量声卡采集、记录和还原声音文件的质量标准。

3、采样位数和采样频率

采样位数即采样值或取样值,用来衡量声音波动变化的参数,是指声卡在采集和播放声音文件时所使用数字声音信号的二进制位数。采样频率

是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高,声音还原就越真实越自然。

采样位数和采样率[1,3,4]对于音频接口来说是最为重要的两个指标,也是选择音频接口的两个重要标准。无论采样频率如何,理论上来说采样的位数决定了音频数据最大的力度,每增加一个采样位数相当于力度范围增加了6dB,采样位数越多则捕捉到的信号越精确,对于采样率来说你可以想象它类似于一个照相机,44.1khz意味着音频流进入计算机时计算机每秒会对其拍照达441000次。显然采样率越高,计算机提取的图片越多,对于原始音频的还原也越加精确。

(二)语音信号的分析及处理

1、语音的录入与打开

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

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

2、时域信号的FFT分析

FFT即快速傅里叶变换[3,4,9],是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅里叶变换的算法进行改进

获得的。在Matlab的信号处理工具箱中函数FFT和IFFT用于快速傅里叶变换和逆变换,函数FFT用于序列快速傅里叶变换,其调用格式为y=fft(x),其中,x是序列,y是序列x的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、倒谱的概念

·定义:倒谱[1,10,11,13]定义为信号短时振幅谱的对数傅里叶反变换。

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

·用途:

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

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

·求法:如图2-1所示:

x(n)log

A B C

→???→??→??→

DFT IDTF

图2-1 倒谱的求法

在图2-1中, A表示短时信号, B表示频谱, C表示对数频谱,D 表示倒谱系数,E表示对数频谱包络,F表示基本周期。

4、数字滤波器设计原理

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

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

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

(三)仿真环境

语音信号的处理与仿真选用Matlab平台[2,5,7,8,9]。Matlab是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。下面对Matlab的主要组成部分和图形用户界面(GUI)作简单介绍。

· Matlab的主要组成部分:

1)开发环境:开发环境是帮助用户使用Matlab函数和文件的工具的集合,这些工具中许多都是图形用户界面。开发环境包括Matlab桌面及其命令窗口、命令记录、帮助浏览器、工作平台、文件和搜索路径等。

2)Matlab数学函数库:该库收集了大量的从基本函数(求和、三角运算、复杂算术等)到复杂函数(矩阵求逆、求矩阵特征值、贝塞尔函数和快速傅立叶变换等)的计算算法。

3)Matlab语言:Matlab语言是一种包括流程控制语句、函数、数据结构、输入/输出和面向对象编程方式的高级矩阵/数组语言,该语言能够通过与其它Matlab系统组成部分之间的交互完成非常复杂的计算任务。

4)图形句柄:图形句柄即Matlab的图形系统,该系统既包括二维和三维数据的可视化、图像处理、动画和图形描述等高级命令,又包括允许

用户完全自定义图形,并在Matlab应用程序中建立自己的图形界面的低级命令。

5)Matlab应用程序接口:API是允许用户编写C、FORTIULN和Matlab 接口程序的系统库,该库中包含一些调用工具,其它应用程序能够通过动态链接、作为计算引擎、读写MAT文件三种形式来使用这些工具以调用Matlab程序。

·图形用户界面(GUI)

1)图形用户界面概念

图形用户界面或图形用户接口(Graphical User Interface,GUI)是指采用图形方式显示的计算机操作环境用户接口。与早期计算机使用的命令行界面相比,图形界面对于用户来说更为简单易用。

GUIDE是Matlab提供的图形界面开发环境,提供了一系列用于创建图形用户界面的工具,从而简单化界面布局和编程工作。

2)图形用户界面设计

①GUI设计模板

在Matlab主窗口中,选择File菜单中的New菜单项,再选择其中的GUI命令,就会显示图形用户界面的设计模板。

Matlab为GUI设计一共准备了4种模板,分别是Black GUI(默认)、GUI with Uicontrols(带控件对象的GUI模板)、GUI with Axes and Menu(带坐标轴与菜单的GUI模板)与Modal Question Dialog(带模式问话对话框的GUI模板)。

当用户选择不同的模板时,在GUI设计模板界面的右边会显示与该模

板对应的GUI图形。

②GUI设计窗口

在GUI设计模板中选中一个模板,然后单击OK按钮,就会显示GUI 设计窗口。选择不同的GUI设计模式时,在GUI设计窗口中显示的结果是不一样的。

GUI设计窗口由菜单栏、工具栏、控件工具栏以及图形对象设计区等部分组成。GUI设计窗口的菜单栏有File、Edit、View、Layout、Tools和Help 6个菜单项,使用其中的命令可以完成图形用户界面的设计操作。

③GUI设计窗口的基本操作

在GUI设计窗口创建图形对象后,通过双击该对象的属性编辑器。例如,创建一个Push Button 对象,并设计该对象的属性值。

三、语音信号处理的总体方案

语音信号处理是信号处理中的重要分支之一。它包括的主要方面有:语音的识别,语言的理解,语音的合成,语音的增强,语音的数据压缩等。而本文仅仅是对语音信号做一些简单的处理,包括信号的提取、调整、变换和滤波等。

(一)本文基本要求

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

(二)语音信号的处理

1、语音信号的采集

使用电脑的声卡设备采集一段时间长度约为5~10秒的声音信号,保存为*.wav格式。

2、语音信号的处理

语音信号的处理[1,8,11,12,13]主要包括信号的提取、调整、变换和滤波等。

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

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

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

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

3、语音信号的效果显示

通过用户图形界面的输出功能,将处理后的语音信号进行播放,试听处理后的效果。

4、语音信号处理方框图

图3-1列出了整个语音信号处理的方框图:

3-1语音信号处理方框图

其中信号调整包括信号的幅度和频率的任意倍数变化,如图3-2所示:

图3-2 信号调整 信号的滤波采用了四种滤波方式,如图3-3所示:

图3-3 语音信号滤波的方式

综合图3-1、3-2、3-3可以看到,整个语音信号处理系统的流程分为三步,首先是读入待处理的语音信号,即信号的采集;然后进行语音信号的处理,包括信息的提取、信号幅度和频率调整、语音信号的傅里叶变换以及信号的滤波,而滤波又包括低通滤波、高通滤波、带通滤波、带阻滤波等方式;最后是对处理后的语音信号进行效果显示。

四、语音信号处理实例

(一)信号的采集

本文是以一段简短的语音信号作为分析样本,通过计算机中的录音机将一段语音信号——“尊敬的老师,亲爱的同学们,大家好,我是来自07电信的马芳兰”录入到计算机中。该段语音时长约为6秒,并保存为“voice.wav”文件。

(二)语音信号的提取

在Matlab中使用Wavread函数,可以得知语音信号的采样频率fs,采样位数bits。利用Sound函数可以清晰的听到“尊敬的老师,亲爱的同学们,大家好,我是来自07电信的马芳兰”语音的播放。

语音信号提取的程序如下:

[x,fs,bits]=wavread('voice.wav');%读入语音信号

fs %提取采样频率

bits %提取采样位数

sound(x,fs,bits); % 听取“voice.wav”语音

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; %计算样本时刻

plot(t,x); %画出语音信号的波形

legend(‘Waveform’);

xlabel(‘Time(s)’);

ylabel(‘Amplitude’);

运行上面程序,得到采样频率fs=22050Hz,采样位数bits=16位,语音信号的波形图如图4-1所示:

高频噪声

图4-1 语音信号的波形图

如图4-1所示,整段音频数据中得到的声音高低起伏与录入的声音信号高低起伏基本一致,并且可以观察到其中包含部分高频噪声(如图中标注部分)。

(二)语音信号的调整

在语音信号的研究中,经常会对语音信号进行多倍频率以及多倍幅度变换调整,日常应用中,这种变换调整也经常要用到。

1、语音信号的频率调整

在设计中,可以将语音信号的采样频率提高或降低,来实现语音信号的调整,得到所要求的语音信号。例如将采样频率提高一倍,即可得到语音信号频率为原频率2倍的新的语音信号。频率调整程序如下:

[x,fs,bits]=wavread('voice.wav');

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)/(2*fs); %计算样本时刻?

sound(x,2*fs,bits);%听取2倍频后的语音

wavwrite(x,2*fs,bits,’调频’);%将倍频后的语音保存为“调频.wav”

plot(t,x); %画频率调整后的波形图

legend('Waveform');

xlabel('Time(s)');

ylabel('Amplitude');

运行得到如图4-2所示的信号波形图,并试听调整后的效果。

图4-2频率调整后的波形

与原语音信号相比,经过调整后的信号周期变为原来的1/2(也可以从语音信号的时长上直观的看出,如图4-2中标注所示,原语音信号时长约为6s,而此时变为3s),此时的语速明显变快,即实现了信号的2倍频功能。

2、语音信号的振幅调整

在设计中,可以将语音信号的幅度进行提高或降低操作,来实现语音信号的调整,得到声音音量大小不同的语音信号。幅度调整程序如下:[x,fs,bits]=wavread('voice.wav');

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); %?计算样本时刻

plot(t,x*4); %画调幅波形图

sound(x*4,fs,bits);%听取幅度调整后的语音

wavwrite(4*x,fs,bits,’调幅’);%将调整后的信号保存为“调幅.wav”

legend('Waveform');

xlabel('Time(s)');

ylabel('Amplitude');

运行得到如图4-3所示的信号波形图,并试听调整后的效果。

相关文档