Matlab的语音特征

更新时间:2023-12-29 11:04:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

摘要

摘 要

随着计算机技术的发展,语音交互已经成为人机交互的必要手段,语音特征参数的精确度直接影响着语音合成的音质和语音识别的准确率。因此语音信号参数提取是语音信号处理研究中一项非常有意义的工作。

要提取语音信号特征参数,首先必须对语音信号进行数字化处理,本文采用Matlab录音工具录音,由计算机自动完成模拟信号到数字信号的转换。其次,进行预处理,包括预加重、加窗和分帧,本文讨论了预处理中各种参数的选择,以使信号特征提取更加准确。第三,讨论了各种时域特征参数的算法,包括短时能量、短时过零率、短时自相关函数和短时平均幅度差函数,比较了浊音、清音特征参数的区别。最后,利用算得的特征参数,完成了清音、浊音、静音的判别和浊音基音周期的提取。

本文采用Matlab软件提取参数,仿真判别清、浊音的不同算法,并从准确性和高效性两方面,结合软件可视化功能,对算法进行了评价。运用Matlab实现语音信号特征参数提取具有方法简单、速度快、误差小等优点,能够大大提高研究精度和效率。

关键词:语音信号;特征参数;提取;Matlab

I

Abstract

ABSTRACT

With the development of computer technology, speech interaction has become a necenssary means of human-computer conmunacation. The speech feature parameters directly affects the accuracy of the sound quality of speech synthesis and speech recognition. Therefore, in the research of speech signal processing, speech signal parameter extraction is a very meaningful task.

Extracting speech signal feature parameters first needs digitalization.In this paper, we record voice using Matlab recording tool, and the conversion from analog signal to digital signal is automatically completed by computer. Secondly, carry out pre-processing, including preemphasis, windowing and dividing frame. This paper discussed the options of the various parameters so that the signal feature extraction is more accurate. Thirdly, we discuss the characteristics of time-domain parameters, including short-term energy, short-term zero-crossing rate, short-time average magnitude difference function and short-time auto-correlation function. At the same time, we compare the distinction of the characteristic parameters between unvoiced sound and voiced sound. Finally, using characteristic parameters ,we distinguish the silence, unvoiced sound, voiced sound and extract the pitch period of voiced sound.

In this paper, we put forward a variety of algorithms of parameter extraction, voice distinction and simulate with Matlab. We evaluate them combining with the visual function of the software, in the sides of both the accuracy and efficiency. Using Matlab to complete feature extraction of speech signals has many advantages, such as achieving simplicity, high efficiency, low errors and so on. It can greatly enhance the accuracy and efficiency of the research.

Keywords: Speech signal; characteristic parameters; extraction; Matlab

II

目录

目 录

第1章 绪论 ..................................................................................................... 1

1.1语音信号特征提取概况 ....................................................................................................... 1

1.1.1研究意义 ............................................................................................................................ 1 1.1.2 发展现状 ........................................................................................................................... 1 1.1.3 存在问题 ........................................................................................................................... 2

1.2 论文结构 ............................................................................................................................... 3

第2章 MATLAB简介 ..................................................................................... 5

2.1 发展概况 ............................................................................................................................... 5 2.2 特点 ....................................................................................................................................... 5

2.2.1 主要功能 ........................................................................................................................... 5 2.2.2 技术特点 ........................................................................................................................... 6

2.3 信号处理工具箱 ................................................................................................................... 6 2.4 录音工具 ............................................................................................................................... 7

第3章 语音信号处理基础............................................................................... 9

3.1 语音基础知识 ....................................................................................................................... 9

3.1.1 言语过程 ........................................................................................................................... 9 3.1.2 语音技术的研究范围.......................................................................................................... 9 3.1.3 语音的声学特性................................................................................................................10

3.2 数字信号处理基础 ............................................................................................................. 10

3.2.1 引言 .................................................................................................................................10 3.2.2 傅里叶变换的几种形式 ..................................................................................................... 11 3.2.3 数字信号处理与数字语音信号处理....................................................................................12

第4章 语音信号分析 .................................................................................... 15

4.1 概述 ..................................................................................................................................... 15 4.2 语音数字化和预处理 ......................................................................................................... 15

4.2.1 数字化..............................................................................................................................15 4.2.2 预处理..............................................................................................................................16 4.2.3 窗函数的选择 ...................................................................................................................16

4.3 语音信号的时域分析 ......................................................................................................... 18

4.3.1 短时能量及短时平均幅度分析...........................................................................................18 4.3.2 短时过零率分析................................................................................................................18 4.3.3 短时相关分析 ...................................................................................................................19 4.3.4 短时平均幅度差分析.........................................................................................................21

i

目录

第5章 MATLAB仿真....................................................................................23

5.1 语音数字化和预处理......................................................................................................... 23

5.1.1 数字化 ............................................................................................................................. 23 5.1.2 预处理 ............................................................................................................................. 25

5.2 语音信号的时域分析......................................................................................................... 29

5.2.1 短时平均能量分析 ............................................................................................................ 29 5.2.2 短时过零率分析 ............................................................................................................... 29 5.2.3 静音段、清音段、浊音段的判别 ....................................................................................... 31 5.2.4 基音周期分析 ................................................................................................................... 33

第6章 结论与展望.........................................................................................37

6.1 结论..................................................................................................................................... 37 6.2 不足之处及未来展望......................................................................................................... 37

参考文献 .........................................................................................................39 致 谢 .............................................................................................................40 附录: 仿真程序 ............................................................................................41

基于Matlab的语音特征参数的提取

第1章 绪论

1.1语音信号特征提取概况

1.1.1研究意义

语音是语言的声学表现,是声音和意义的结合体,是相互传递信息的最重要的手段,是人类最重要、最有效和最方便的交换信息的形式。在人类已构成的通信系统中,语音通信方式早已成为主要的信息传递途径之一。

随着计算机和信息技术的发展,语音交互已经成为人机交互的必要手段。迫切的应用需求是研究的动力,语音技术因其实用性、趣味性,成为国内外关注的热点,如美国国防部、中国的国家高新技术计划(863)和国家基础研究计划(973)等。语音处理技术广泛应用于语音通信系统、声控电话交换、数据查询、订票系统、宾馆医疗服务、银行服务、计算机控制、工业控制等领域,带有语音功能的计算机也将很快成为大众化产品,语音将可能取代键盘和鼠标成为计算机的主要输入手段,为用户界面带来一次飞跃???。

语音信号特征参数的提取是语音信号处理的前提和基础,只有分析出可表示语音信号本质特征的参数,才有可能利用这些参数进行高效的语音通信和准确的语音识别,才能建立语音合成的语音库,语音识别的模版和知识库,渗透到语音处理的各种应用中。此外,特征参数的精确度直接影响着语音合成的音质、语音识别的准确率。因此语音信号参数提取是语音信号处理研究中一项非常有意义的工作。

Matlab是一种功能强大、效率高、交互性好的数值计算、可视化计算机高级语言,它将数值计算、信号处理和图形显示有机地融合为一体,形成了一个极其方便、用户界面友好的操作环境,因此用数字信号处理技术结合Matlab仿真研究语音处理,能够更加有效地产生、传输、存储、获取和应用语音信息。本文是在Matlab仿真的基础上,研究语音信号特征参数的提取。 1.1.2 发展现状

语音信号处理是一门综合性的学科,包括计算机科学、语音学、语言学、声学、生理学、心理学和数学等诸多领域的内容。它的发展过程中,有过两次飞跃。第一次飞跃是1907年电子管的发明和1920年无线电广播的出现,电子管放大器使很微弱的声音也可以放大和定量测量,从而使电声学和语言声学的一些研究成果扩展到通信和广播部门;第二次飞跃是在20世纪70年代初,电子计算机和数字信号处理的发展使声音信号特别是语音信号,可以通过模数转换器(A/D)采样和量化转换为数字信号,并能够送进计算机,这样就可以用数字计算方法对语音信号进行处理和加工,提高了语音信号处理的准确性和高效性。

具体说来,1939年贝尔实验室推出Dudley发明的声音编码器,这个编码器能分析和修饰声音信号,并进行合成而产生声音,这标志了语音信号自动处理的开始,它由语音编码、语音合成和语音识别三大部分组成。以下从三方面分别介绍。

语音编码技术基本分为两大类:第一类方法是在尽可能遵循原波形的前提下,将模拟波形进行数字化编码。其中三种最常用的技术是脉冲编码调制(PCM)、差分PCM(DPCM)

1

江南大学学士学位论文

和增量调制(?M);第二类方法是对模拟波形进行处理,但仅对话音和收听过程中能听到的话音部分进行编码。它主要与用于窄带传输系统或有限容量的数字存储设备的语音编解码器有关,采用此类技术的设备一般称为声码器(语音编码器),声码器技术现在正开始展开应用,特别是用于帧中继和IP上等语音。近年来,新的编解码技术不仅提供模拟转换,而且提供复杂的预测模式,可以分析话音输入,并用最少带宽传输话音。

语音合成就是将一系列的输入文字信号序列经过适当的韵律处理后,送入合成器,产生出具有尽可能丰富表现力和高自然度的语音输出,从而使计算机或相关的系统能够发出像“人”一样自然流利声音的技术。语音合成系统包括前端处理、韵律处理、合成三个阶段。前端处理是指输入的文字信息经过语言学处理标注为不同的韵律单元和不同的语境及语气;韵律处理即是为不同的合成单元根据静态或动态规则选择合适的韵律参数及模型;合成即是将韵律处理后的单元,依据不同的合成方法从音库中寻找相应单元或其参数,经一系列参数计算和拼接后形成相应的语音波形。语音合成的研究有200多年的历史,人类对于语音合成的研究经历了机械式、电子的(模拟的)、数字的三个阶段,初步实现了从完全的实验室研究到初步的市场应用。

语音识别是计算机通过识别把语音信号转变为相应的文本的技术,属于多维模式识别和智能计算机接口的范畴,研究目标是让计算机“听懂”人类口述的语言。图1-1是语音识别系统的典型实现方案。目前,大多数语音识别系统都采用了模式匹配的原理。根据这个原理,未知语音的模式要与已知语音的参考模式逐一进行比较,最佳匹配的参考模式被作为识别结果[?]。

识别

语音 输入 预处理 识别 特征提取特征提取测度估计 预处理 识别决策 预处理 结果 训练 模板库 专家知识

图1-1语音识别系统的典型实现方案

1.1.3 存在问题

问题有待解决,这些难题是:

语音信号处理在现代信息科学中的地位举足轻重,但它仍有些基础的理论问题和技术①听觉器官的物理模型和数学表示,目前还没有一套权威的理论和成熟算法。 ②语音识别的子课题中,非特定人、大词汇量、连续语音识别是近年来的热点问题,由于不同人的发音差别很大,再加上环境噪声等的影响,系统的正确识别率和顽健性离实际使用还有很大距离。目前人们所期望的口呼打字机或听写机还没有得到推广。

③语音的规则合成和文语转换系统虽然取得一定成果,但仍不能同优秀播音员一样,

基于Matlab的语音特征参数的提取

具有不同的风格、情感、很高的自然度,其关键技术,即根据语境、语义自动生成韵律符号尚在研究中。

④语音增强包括从强噪声中提取语音信号,或者从几个人同时说话的混合波形中,分离出各自的语音信号,这类技术理论算法效果均不理想,还未达到实用水平。

⑤基于上述技术的语音翻译机涉及广泛的科学技术问题,早在多年前,美、德、日三国就开始了此机器的研究,中美科技合作计划中也有这类项目,目前仍在研究和开发中[?]。

1.2 论文结构

本文第1章介绍了语音信号特征参数提取的研究意义、发展历史及当今尚存在的问题;第2章阐述了Matlab的相关内容,包括它的发展史、功能特点,并特别介绍了仿真中使用的语音信号工具箱和录音工具。第3章讨论了语音信号处理的基础,从言语过程、语音技术研究范围两方面明确了本文研究内容的所属分类,简单介绍了语音声学特性、数字信号处理的相关知识,分别作为本文处理语音信号和分析数字化语音信号频谱的理论基础。第4章主要介绍了语音信号分析理论,按照语音信号处理的流程,介绍了语音信号的数字化、预处理、时域参数分析,讨论了清音与浊音时域参数的差别。第5章作为本文的重点,从Matlab仿真角度验证了第4章的理论,录音、预处理、提取语音信号时域特征参数,比较了清音、浊音参数的差别,并利用特征参数实现了静音、清音、浊音的区分,提取了浊音的基音周期;提出了各环节的不同软件实现方法,从准确性和高效性两个方面进行了评价。第6章对基于Matlab的语音信号特征参数提取进行总结,对其应用进行展望,指出了本文的不足之处。

3

江南大学学士学位论文

基于Matlab的语音特征参数的提取

第2章 Matlab简介

Matlab语言是由美国Math Works公司推出的计算机软件,从1984年正式版本的推出到现在,Matlab作为编程语言和可视化工具,可解决教学、科学计算和工程应用的许多问题,现已成为国际公认的最优秀的科学计算与数学应用软件之一。其内容涉及矩阵代数、微积分、应用数学、有限元法、科学技术、信号与系统、神经网络、小波分析及其应用、数字图像处理、计算机图形学、电子线路、电机学、自动控制与通信技术、物理、力学和机械振动等方面。在高等院校,Matlab已经成为学生必须掌握的基本技能。在设计研究单位和工业部门,Matlab已经走出实验室,并被广泛应用于研究和解决各种具体的工程问题[?]。

2.1 发展概况

对于学习计算机高级语言和编程知识的科技及工程技术人员来说,除专门进行软件开发的少数人员之外,大多数均利用BASIC或C等计算机编程语言解决具体的实际问题,因此可能会常常感到,如果使用它们进行程序设计,特别是涉及数值运算或绘制图形时,程序的编制是相当繁琐的。而Matlab的出现则完全改变了这一切。Matlab是Matrix Laboratory(矩阵实验室的缩写),最初由美国Cleve Moler博士在70年代末讲授矩阵理论和数据分析等课程时编写的软件包Linpack与Eispack组成,旨在使应用人员免去大量经常重复的矩阵运算和基本数学运算等繁琐的编程工作。1984年成立的Math Works公司正式把Matlab推向市场,并从事Matlab的研究和开发。1990年,该公司推出了以框图为基础的控制系统仿真工具Simulink,它方便了系统的研究与开发,使控制工程师可以直接构造系统框图进行仿真,并提供了控制系统中常用的各种环节的模块库。1993年,Math Works公司推出的Matlab4.0版在原来的基础上又作了较大改进,并推出了Windows版,使命令执行和图形绘制可以在不同窗口进行。1994年推出了Matlab4.2版本,并得到广泛的重视和应用。1999年,推出了Matlab5.3版本,真正实现了32位运算,其速度更快、功能更完善、界面更友好,并提供了Internet搜索引擎,可以协助用户寻求在线帮助。版本6.0、6.1又作了更精细的改进,增加了许多新的功能。版本7.0、7.1包括拥有数百个内部函数的主包和三十几种工具包。工具包又可以分为功能性工具包和学科工具包。功能工具包用来扩充Matlab的符号计算,可视化建模仿真,文字处理及实时控制等功能。学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类。

2.2 特点

2.2.1 主要功能

MATLAB之所以成为世界流行的科学计算与数学应用软件,是因为它有着强大的功能。

①高质量、强大的数值计算功能。为满足复杂科学计算任务的需要,Matlab汇集了大量常用的科学和工程计算算法,如矩阵求逆、矩阵特征值以及快速傅立叶变换等。

②数据分析和科学计算可视化功能。Matlab不但科学计算功能强大,而且在数值计算结果的分析和数据可视化方面也远远优于其他同类软件。在科学计算和工程应用中,经常需要分析大量的原始数据和数值计算结果,Matlab能将这些数据以图形的方式显示出来,

5

江南大学学士学位论文

使数据间的关系清晰明了。

③强大的符号计算功能。在Matlab的发展过程中,Math Works 公司以Maple的核心部分作为其符号计算功能的引擎,依靠Maple已有的库函数,实现了Matlab环境下符号的计算功能。

④强大的非线性动态系统建模和仿真功能。Matlab提供了一个模拟动态系统的交互式程序Simulink,允许用户通过绘制框图来模拟一个系统,并动态地控制该系统。

⑤灵活的程序接口功能。应用程序接口(API)是一个允许用户编写的与Matlab互相配合的C或Fortran程序的文件库。用户可以在Matlab环境下直接调用已经编译过的C和Fortran子程序,同样,在C和Fortran程序中也可以调用Matlab的函数或命令,使得这些语言可以充分利用Matlab的矩阵运算功能和方便的绘图功能。

⑥文字处理功能。Matlab记事本成功地将Matlab与文字处理系统Microsoft Word集成为一个整体,为用户进行文字处理、科学计算、工程设计创造了一个统一的工作环境。 2.2.2 技术特点

Matlab还具有支持科学计算标准的开放式可扩充结构和跨平台兼容的特点,能够很好地解决科学和工程领域内的复杂问题。

①界面友好,编程效率高。Matlab不仅免去了大量的经常重复的基本数学运算,而且其编译和执行速度都远远超过了采用C和Fortran语言设计的程序。

②功能强大,可扩展性强。Matlab语言不但提供了科学计算、数据分析与可视化、系统仿真等强大的功能,而且还具有可扩展性特征。Matlab支持用户对其函数进行二次开发,用户的应用程序可以作为新的函数添加到相应的工具箱中。

③图形功能灵活方便。Matlab具有灵活的二维与三维绘图功能,在程序的运行过程中,可方便迅速地用图形、图像、声音、动画等多媒体技术直接表述数值计算结果,可以选择不同的坐标系,可以设置颜色、线型等,还可以将图形嵌入到用户的Word文件中。

④在线帮助,有利于自学。用户可借助Matlab环境下的“在线帮助”学习各种函数的用法。

总之,Matlab语言已经成为科学计算、系统仿真、信号与图像处理的主流软件。

2.3 信号处理工具箱

Matlab的信号处理工具箱是信号算法文件的集合,它的推出扩展了Matlab在信号处理领域的应用,为其研究和工程应用提供了有力的基础,应用此工具箱可直观、方便地进行信号分析、数值计算及系统设计等工作,从波形的产生到滤波器的实现和设计,参数建模,谱分析,简化了编程,节省了时间。它处理的基本对象是信号与系统,包含了信号处理中经常使用的近200个函数,根据其功能,可以分为20类,经常使用的函数如下所示。

滤波器分析:abs 求绝对值(幅值),angle 求相角,conv 求卷积,filter 直接滤波器实现,frespace 频率响应中的频率间隔,freqz 数字滤波器频率响应,impz 数字滤波器的冲击响应等;IIR滤波器设计:besself 贝塞尔模拟滤波器设计,butter 比特沃斯滤波器设计,cheby1 切比雪夫I型滤波器设计,cheby2 切比雪夫II型滤波器设计等;IIR滤波器阶的选择:

基于Matlab的语音特征参数的提取

buttord 巴特沃斯滤波器阶的选择,cheb1ord 切比雪夫I型滤波器阶的选择,cheb2ord 切比雪夫II型滤波器阶的选择等;FIR滤波器设计:fir1 基于窗函数的FIR滤波器设计——标准响应,fir2 基于窗函数的FIR滤波器设计,firls 最小二乘FIR滤波器设计等;变换:czt 线性调频Z变换,dct 离散余弦变换,idct 逆离散余弦变换,fft 一维快速傅里叶变换,ifft 一维逆快速傅里叶变换等;窗函数:boxcar 矩形窗,triang 三角窗,bartlett 巴特利特窗,hamming 海明窗,hanning 汉宁窗,chebwin 切比雪夫窗等;参数化建模:lpc 线性预测系数等;特殊操作:rceps 实倒谱和最小相位重构,cceps 倒谱分析和最小相位重构,specgram 频谱分析等;除此之外,还有波形产生、线性系统变换、统计信号处理、模拟原型滤波器设计、频率变换、滤波器离散化等类别的函数。信号处理工具箱也使用其他的标准Matlab函数和语言,包括多项式的根,复数代数,矩阵逆和计算以及图形工具。

另外,语音信号工具箱不是Matlab默认安装的工具箱,可以用光盘重新安装,选上voicebox工具箱,或者下载解压后,复制到toolbox文件夹里,再通过file里的set path添加工具箱所在目录就可以用了。

2.4 录音工具

随着计算机技术和信息技术的发展,语音交互成为人机交互的必要手段,而语音信号的采集和处理是人机交互的前提和基础。虽然在Windows附件的娱乐中带有录音机,通过它可以驱动声卡采集语音信号并保存为语音文档。但是要对采集的信号进一步分析处理必须另外编程或通过其它软件,同时Windows附件中的录音机功能极其有限且不能扩展。在Matlab环境中,可以通过多种编程方法驱动声卡,实现对语音信号的采集和回放。同时由于Matlab是一个数据分析和处理功能十分强大的工程使用软件,它的信号处理与分析工具箱提供了十分丰富的功能函数,利用这些函数可以快捷地完成语音信号处理和分析以及信号的可视化,使人机交互更加便捷[??。

在Matlab环境中,主要可以通过以下3种方法驱动声卡,采集语音信号:

①将声卡作为对象处理采集语音信号。Matlab将声卡作为对象处理,其后一切操作都不与硬件直接相关,而是通过对该对象的操作来作用于硬件设备(声卡)。操作时首先要对声卡产生一个模拟输入对象(ai),给ai对象添加一个通道,设置采样频率后,就可以启动设备对象,开始采集数据,采集完成后停止对象并删除对象。

②调用wavrecord函数采集语音信号。wavrecord函数使用Windows声音输入设备录制声音。函数调用方式是“wavrecord(N,fs,ch,nbits);”。其中N是采集样本数据量;fs是样本采集频率(8000Hz、11025Hz、22050Hz、44100Hz),其默认值是11025Hz;ch是样本采集通道,1为单声道,2为双声道,默认值为1(单声道);nbit是每个样本的位数(或称解析度),‘double’、‘single’、‘int16’为16位,‘int8’为8位。

③运用audiorecorder对象采集语音信号。函数调用方式为audiorecorder(fs,nbits,ch),可以创设一个audiorecorder对象。其中fs、nbits、ch的意义同wavrecorder函数。对象创设后,可以进行录音、暂停、停止、播放以及数据读取等操作。

另外,Matlab从第五版后,新增了对语音文档的读取、写入和播放功能,使得对语音

7

江南大学学士学位论文

文档的调用和读取更便捷。格式分别为文档读取[y,fs,nbits]=wavread(‘*.wav’),文档写入wavwrite(y,fs,nbits,‘*.wav’),文档播放wavplay(y,fs)。其中y是语音信号矢量,有效范围是[-1.0,1.0];fs是取样频率,nbits是每个样本位数,通常取8或16。同时Matlab亦可直接读写(.au)文档,指令是auread和auwrite。需注意的是wavplay只适用于微软视窗平台,若适用于一般平台,要改用sound(y,fs,bits)或者soundsc(y,fs,bits)指令。其区别是前者播放矢量时,超出有效范围的部分被截去(信号损失);后者矢量大小先自动变换到有效范围内(信号不损失)。此外还可以使用audioplayer对象播放语音。

本文使用第二种方法进行录音。因为本文是对已存信号进行处理,不需要实时处理,对语音要求不高,所以只需选择处理简单的第二种方法。

基于Matlab的语音特征参数的提取

第3章 语音信号处理基础

3.1 语音基础知识

3.1.1 言语过程

言语的产生、传播和接受过程是一个复杂的过程,如图3-1所示,一般可分为以下几个阶段:

①想说:大脑产生说话的意向,接着生成概念,选择适当的词汇,按语法组织成语言。 ②说出:发音器官协调工作,发出声音,产生声波。面部的肌肉、器官和体态与发音器官配合,送出多种信息,以便让听者更好地理解语音。与此同时讲话者的听觉系统收到自己的声音,并随之修改。

③传输:声波凭借质点运动而传播。

④接收:人的听觉系统负责接收声波,这包括外耳、中耳、内耳。内耳的基底膜被声波刺激而振动,激发神经元产生脉冲,传递给大脑,从而感知到声音。

⑤理解:听觉神经中枢收到脉冲信息,通过一系列复杂的处理过程,辨认出说话人,理解其信息内容。

分析人类的言语过程,意在找出影响言语过程的因素,了解其机理;归纳出物理规律;推导出数学模型,最终研究让计算机能说、会听,能理解人的语言,并进而实现人与计算机之间的自然语言交互。

人类过言程语想说 说出 传输 接收 理解 压缩存储 意念概念 语言语音 语音合成

言语过处程理知 觉 读取解压 语义情感 言计语算机处理语音编码 语音识别

图3.1 人类的言语过程与计算机言语处理

本文研究的则是计算机言语处理过程,语音合成、语音编码以及语音识别的基础,语音特征参数的提取。 3.1.2 语音技术的研究范围

语音是语言的物质外壳,它涉及到生理、心理、物理、文化及社会背景等因素。因此语音处理的涉及面极广,并由此产生了一系列交叉学科分支,包括了声学、物理学、语言

9

江南大学学士学位论文

学、教育学、心理学、知觉、生物学、电讯技术、计算机技术和医学等。这里介绍几个相关学科对语音的研究:

①音系学:重点研究语音的差别和对立、系统和组织。这是研究语言的语音系统,对语音进行概括抽象的学科。

②语音学:语音学研究具体客观的声音,这是语言学的基础。语言学包括发音语音学、声学语音学和听觉语音学。

③心理学:研究语音的心理知觉以及与声学参数的关系。

④信号处理:把语音看成一种信号形式,研究信号处理方法、内容描述等,包括语音的编码、识别和合成。

⑤数学:研究语音信号的数学描述和模型。特别一提的事数字信号处理。20世纪70年代以来,结合数字信号处理的成果,更新语音处理中策略和算法,使统计语音识别和合成有了突破性的进展。如动态规划算法(DTW)、矢量量化(VQ)、隐马尔可夫模型(HMM)、线性预测(LPC)、基音同步叠加(PSOLA)、和人工神经网络(NN)等。

语音是人类交流的重要手段,也是人类期望的人机交互方式,为此语音信号受到信息科学研究领域的关注,成为智能计算机的重要研究方向。他们从数字信号处理出发,利用相关学科的研究成果,研究语音信号的处理算法和模型、系统和应用。

本文讨论范围属于信号处理范畴,同时以语音学与数字信号处理为基础进行研究。 3.1.3 语音的声学特性

语音是人的发声器官发出的一种声波,具有一定的音色,音调,音强和音长。其中音色也叫音质,是一种声音区别于另一种声音的基本特征;音调是声音的高低,他取决于声波的频率;声音的强弱叫音强,它由声波的振动幅度决定;声音的长短叫音长,它取决于发音时间的长短。

音素是语音发音的最小单位。任何语言都有语音的元音和辅音两种音素,元音构成一个音节的主干,无论从长度还是能量看,元音在音节中都占主要部分,辅音则只出现在音节的前段或后端或前后两端,它们的时长和能量与元音相比都很小。

决定元音音色的主要因素是舌头的形状及舌位口形等。它的重要声学特性是共振峰,即元音激励进入声道时会引起共振特性,产生的一组共振频率。在实际应用中一般用前三个共振峰频率描述元音。

辅音是呼出的气流由于通路的某一部分封闭或受到阻碍,气流被阻不能畅通,而克服发音器官的这种阻碍而产生的音素。辅音没有明确的共振峰结构。辅音发音时的阻碍位置叫调音点,阻碍方式叫调音方式。

发辅音时声带振动的是浊音,反之是清音。浊音的声带振动频率又称基音频率,其随时间发生变化产生声调,基音频率的变化轨迹成为声调轨迹???。

3.2 数字信号处理基础

3.2.1 引言

过去,信号一直是采用模拟设备来完成。近代,数字计算机的出现和大规模集成技术

基于Matlab的语音特征参数的提取

的高度发展,为信号处理提供了强有力的手段。在电子技术的各个领域,例如雷达,声纳,语言通信,数字通讯等,正日益广泛地用数学方法替代模拟方法实现信号处理。因而,从本世纪60年代以来,逐渐形成了一门新的学科——数字信号处理。 3.2.2 傅里叶变换的几种形式

所谓傅里叶变换就是在时间为自变量的“信号”与频率为自变量的“频谱”函数之间的某种变换关系。当自变量“时间”或“频率”取连续形式和离散形式的不同组合,就可以形成各种不同的傅里叶变换对。

首先,非周期连续时间信号(xa(t))的傅里叶变换(Xa(j?)):

Xa(j?)??????xa(t)e?j?tdt (3-1)

逆变换:

xa(t)?12π???Xa(j?)ej?td? (3-2)

这个变换说明了时域的连续函数造成频域的非周期谱,时域的非周期性造成频域的连续谱。

第二,周期为tp的周期性连续时间信号的傅里叶变换:

X(m?)?1tptp???2tp2xa(t)e?jm?tdt (3-3)

逆变换:

xa(t)??i???X(m?)ejm?t (3-4)

这个变换我们也常称为傅里叶级数的变换形式,正变换的积分是在时间信号的一个周期内进行的,两相邻谱线分量之间的角频率增量与时间周期的关系可表示为

??2π1tp?2πF,这个变换说明时域的连续函数造成频域的非周期谱;频域函数的离散(取

样)造成了时域函数的周期。

第三,非周期离散时间信号的傅里叶变换即无限序列的傅里叶变换:

?X(ej?)??n???π?πxn(n)ej?n (3-5)

逆变换:

x(n)?12π?X(ej?)ej?nd? (3-6)

2πT这变换对说明时域的采样对应于频域函数的周期延拓,其时域采样角频率?s?周期在数字域恰为2π,而时域函数的非周期对应于频域函数的连续。

第四,周期离散时间信号的傅里叶变换即离散傅里叶级数变换:

11

江南大学学士学位论文

?(k)?X?x(n)W (3-7)

knNn?0N?1逆变换:

?(n)?x?2πN?(k)WX?Nk?01N?1?knN (3-8)

其中WN?e,这种变换是周期离散信号与周期离散频率信号间的变换对,在一个域

中函数的周期必是另一域中两取样点间增量的倒数。

而离散傅里叶级数变换是周期序列,仍不便于计算机计算。因此取其时域和频域序列的主值序列,即得到有限长序列的离散傅里叶变换(DFT):

N?1X(k)??x(n)W

knNn?0N?1?knN0?k?N? 1 (3-9)

逆变换:

x(n)??X(k)WNk?01 0?n?N?1 (3-10)

利用离散傅里叶变换对有限长时间序列展开,相当于对此序列作周期性处理,因此DFT变换对具有隐含周期性。它可以看成是连续函数在时域和在频域取样构成的变换。只要取x(n)乘以相应的内插函数,就可恢复原连续函数,对频域也可取X(k)乘以相应的内插函数,就可恢复出原连续的频域函数,x(n)及X(k)都具有N个独立值,具有等量信息,它们乘以相应的内插函数后,复原的连续函数也就完全确定了,因而离散傅里叶变换可以看作连续傅里叶变换的近似。同时其时域和频域都是有限长序列,便于用数字计算机计算,所以对连续函数的处理可代之以离散取样的处理。

快速傅里叶变换是为减少DFT计算次数的一种快速有效的算法,简称FFT,并不是与DFT不同的另外一种变换,它的出现使应用离散傅里叶变换进行谱分析变成了可能,DFT的运算大为简化,运算时间一般可缩短一二个数量级,大大推动了近30年来信号处理技术的进展,现已成为数字信号处理强有力的工具。它包括若干种快速算法:按时间抽取的FFT算法;按频率抽取的FFT算法;N为复合数的FFT算法;分裂基FFT算法;线性调频Z变换算法;以及ZFFT算法[?]。 3.2.3 数字信号处理与数字语音信号处理

计算机内的信息表示都是数字(非模拟),因此语音信号也是数字序列。数字信号处理方法和算法是语音信号处理的基础,如抽样、相关、傅里叶变换、线性预测分析和矢量量化等。

信号处理是对信号进行分析、变换和滤波等处理。例如频谱变换、低通滤波和平均幅度计算。数字信号处理就是采用数字计算技术对信号进行处理的学科。数字语音信号处理就是数字信号处理技术对语音信号处理的学科。语音信号处理有如下特点:

①语音信号是时间依赖的连续媒体。因此处理的时序性要求很高,如果在时间上有25ms的延迟,就会感到不连续,语音编码的延时必须很小。

基于Matlab的语音特征参数的提取

②由于语音信号不仅仅是声音的载体,同时还携带了情感的意向,故对语音信号的处理不仅是信号处理问题,还要抽取语义等其他信息。因此可能会涉及得到语言学、社会学、声学等学科。

③一个完整的语音交互过程,应该包括语言的产生和语言的接收,也就是“说”和“听”。虽然语音处理是针对语音信号进行的,但是为了研究更好的处理算法,应该关注语音产生机理和听觉特性。

从人与计算机交互的角度来看语音信号的处理应包括:语言信号获取域表示语音识别与理解、语音合成、语音编码、语音识别和说话人识别等[1]。

13

江南大学学士学位论文

基于Matlab的语音特征参数的提取

第4章 语音信号分析

4.1 概述

语音信号分析是语音信号处理的前提和基础,只有分析出可表示语音信号本质特征的参数才有可能利用这些参数进行高效的语音通信、语音合成和语音识别等处理。而且,语音合成的好坏,语音识别率的高低也取决于对语音信号分析的准确性和精确性。因此语音信号分析在语音信号处理应用中具有举足轻重的地位。

贯穿于语音分析全过程的是“短时分析技术”。因为,语音信号从整体来看其特性及表征其本质特征的参数均是随时间而变化的,所以它是一个非平稳态过程,不能用处理平稳信号的数字信号处理技术对其进行分析处理。但是语音信号在一个短时间范围内其特性基本保持不变即相对稳定,即语音信号具有短时平稳性。所以任何语音信号的分析和处理必须建立在“短时”的基础上,将语音信号分为一段一段来分析其特征参数,其中每一段称为一“帧”,帧长一般取为10?30ms。这样,对于整体的语音信号来讲,分析出的是由每一帧特征参数组成的特征参数时间序列[?]。

根据所分析出的参数的性质不同,可将语音信号分析分为时域分析、频域分析、倒频域分析等;根据分析方法的不同又可将语音信号分析分为模型分析方法和非模型分析方法两种。本文主要讨论时域分析,时域分析方法具有简单、计算量小、物理意义明确等优点。

模型分析法是指依据语音信号产生的数学模型,来分析和提取表征这些模型的特征参数;而不进行模型化分析的其他方法都属于非模型分析法,包括上面提到的时域分析法、频域分析法及同态分析法(即倒频域分析法)等。

4.2 语音数字化和预处理

在按帧进行语音分析,提取语音参数之前必须进行一些共同的短时分析技术,如语音信号的数字化、语音信号的端点检测、预加重、加窗和分帧等,这些也是不可忽视的语音信号分析的关键技术。 4.2.1 数字化

语音信号的数字化一般包括放大及增益控制、反混叠滤波、采样、A/D变换及编码;预处理一般包括预加重、加窗和分帧等。当然,在分析之前必须把要分析的语音信号部分从输入信号中找出来,这项工作叫语音信号的端点检测。

语音信号首先进行反混叠滤波,反混叠滤波的目的有两个:第一,抑制输入信号各个频域分量中频率超出fs/2的所有分量(fs为采样频率),以防止混叠干扰;第二,抑制电源工频干扰。这样,反混叠滤波必须是一个带通滤波器,设其上、下截止频率分别是fH和

fL,则对于绝大多数语音编译码器,fH=3400Hz、fL=60?100Hz,采样频率为fs=8kHz。

语音信号经过反混叠滤波和采样后由A/D变换器变换为二进制数字码。A/D变换中要对信号进行量化,量化不可避免地会产生误差。量化后的信号值与原信号值之间的差值称为量化误差,又称为量化噪声。A/D变换器分为线性和非线性两类。目前采用的线性A/D变换器绝大部分是12位的(即每一个采样脉冲转换为12位二进制数字);非线性A/D变换器

15

江南大学学士学位论文

则是8位的,它与12位线性变换器是等效的。有时为了后续处理,要将非线性的8位码转换为线性的12位码。 4.2.2 预处理

由于语音信号的平均功率谱受声门激励和口鼻辐射影响,高频端大约在800Hz以上按6dB/倍频程跌落,所以求语音信号频谱时,频率越高相应的成分越小,高频部分的频谱比低频部分的难求,为此要在预处理中进行预加重处理。预加重的目的是提升高频部分,使信号的频谱变得平坦,保持在低频到高频的整个频带中,能用同样的信噪比求频谱,以便于频谱分析或声道参数分析。预加重可在语音信号数字化时在反混叠器之前进行,这样不仅可以进行预加重,而且可以压缩信号的动态范围,有效地提高信噪比。但预加重一般是在语音信号数字化之后,在参数分析之前在计算机里用具有6dB/倍频程的提升高频特性的预加重数字滤波器来实现,它一般是一阶的数字滤波器:

H(Z)?1?μz?1 (4-1)

式(4-1)中,μ值接近于1。

进行预加重数字滤波处理后,接下来就要进行加窗分帧处理。一般每秒的帧数约为33到100帧,视实际情况而定。分帧可以采用连续分段的方法,但一般要采用交叠分段的方法,这是为了使帧与帧之间平滑过渡,保持其连续性。前一帧和后一帧的交叠部分称为帧移。帧移与帧长的比值一般取0?1/2。分帧是用可移动的有限长度窗口进行加权的方法来实现的,即用一定的窗函数w(n)乘s(n),从而形成加窗语音信号:

sw(n)?s(n)?w(n)

(4-2)

4.2.3 窗函数的选择

在语音信号处理中常用的窗函数是矩形窗和汉明窗等,它们的表达式如下(其中N为帧长):

矩形窗:

?1,0?n?(N?1)w(n)??

0,n?else? (4-3)

汉明窗:

(N?1)?0.54?0.46cos[2πn/(N?1)],0?n?w(n)??

0,n?else? (4-4)

窗函数的选择(形状和长度)对于短时分析参数的特性影响很大。为此应选择合适的窗口,使其短时参数更好地反映语音信号的特性变化。下面从窗口的形状和窗口的长度两方面来讨论这个问题。

虽然不同的短时分析方法(时域、频域、倒频域分析)以及求取不同的语音特征参数可能对窗函数形状的要求不尽一样,但一般一个好的窗函数的标准是:在时域因为是语音波形乘以窗函数,所以要减少时间窗两端的坡度,使窗口边缘两端不引起急剧变化而平滑过渡到零,这样可以使截取出的语音波形缓慢降为零,减少语音帧的截断效应;在频域要有较宽的3dB带宽以及较小的边带最大值。这里对矩形窗和汉明窗进行比较。矩形窗的单

基于Matlab的语音特征参数的提取

位函数响应的数字滤波器:

?1,0?n?(N?1) h(n)???0,n?else (4-5)

其频率响应:

N?1H(ej?T)??n?0e?j?nT?sin(N?T/2)sin(?T/2)e?j?T(N?1)/2 (4-6)

它具有线性相位,其频率响应为第一个零值时所对应的频率为fs/N,其中fs为采样频率。而汉明窗的频率响应的第一个零值频率(即带宽)以及通带外的衰减都比矩形窗要大许多。矩形窗与汉明窗的一些参照数据示于下表。

表4-1 矩形窗与汉明窗的比较

窗类型 旁瓣峰值 主瓣宽度 最小阻带衰减 矩形窗 汉明窗

-13 -41

4π/N 8π/N

-21 -53

从表4-1可以看出,汉明窗的主瓣宽度比矩形窗大一倍,即带宽约增加一倍,同时其带外衰减也比矩形窗大一倍多。矩形窗的谱平滑性能较好,但损失了高频成分,使波形细节丢失;而汉明窗则相反,从这一方面来看,汉明窗比矩形窗更为合适。

窗口长度N、采样周期Ts?1/fs和频率分辨率?f之间存在下列关系:

?f?1NTs (4-7)

可见采样周期一定时,?f随窗口宽度N的增加而减少,即频率分辨率相应得到提高,但同时时间分辨率降低;如果窗口取短,频率分辨率下降,而时间分辨率提高,因而两者是矛盾的。应根据不同的需要选择合适的窗口长度。对于时域分析,如果N很大,则它等效于很窄的低通滤波器,语音信号通过时,反映波形细节的高频部分被阻碍,短时能量随时间变化很小,不能真实地反映语音信号的幅度变化;反之,N太小时,滤波器的通带变宽,短时能量随时间有急剧的变化,不能得到平滑的能量函数,因此,窗口的长度选择应合适。有时窗口长度的选择更重要的是考虑语音信号的基音周期。通常认为在一个语音帧内应包含1到7个基音周期。然而不同的人的基音周期变化很大,通常在10kHz取样频率下,N折中选择为100到200点为宜(即10到20ms持续时间)。

这样经过上面介绍的处理过程,语音信号就已经被分割成一帧一帧的加过窗函数的短时信号,然后再把每一个短时语音帧看成平稳的随机信号,利用数字信号处理技术来提取语音特征参数。在进行处理时,按帧从数据区中取出数据,处理完成后再取下一帧,最后得到有每一帧参数组成的语音特征参数的时间序列[?]。

17

江南大学学士学位论文

4.3 语音信号的时域分析

语音信号的时域分析就是分析和提取语音信号的时域参数。进行语音分析时最先接触到并且也是最直观的是它的时域波形。语音信号本身就是时域信号,因而时域分析是最早使用,也是应用最广泛的一种分析方法,这种方法直接利用语音信号的时域波形。时域分析通常用于最基本的参数分析及应用,如语音的分割、预处理、大分类等。这种分析方法的特点是:①表示语音信号比较直观、物理意义明确。②实现起来比较简单、运算量少。③可以得到语音的一些重要的参数。④只使用示波器等通用设备,使用较为简单等。

语音信号的时域参数有短时能量、短时过零率、短时自相关函数和短时平均幅度差函数等,这是语音信号的一组最基本的短时参数,在各种语音信号数字处理技术中都要应用。在计算这些参数时使用的一般是方窗或汉明窗。 4.3.1 短时能量及短时平均幅度分析

设语音波形时域信号为x(l)、加窗分帧处理后得到的第n帧语音信号为xn(m),则xn(m)满足:

xn(m)??(m)x(n?m)

0?m?N? 1 (4-8)

其中,n=0,1T,2T,···并且N是帧长,T是帧移长度,?(m)是窗函数。 则第n帧语音信号的短时能量:

N?1En??xm?02n(m) (4-9)

En是一个度量语音信号幅度值变化的函数,但它有一个缺陷,即它对高电平非常敏感

(因为它计算时用的是信号的平方)。为此,采用另一个度量语音信号幅度值变化的函数,即短时平均幅度函数Mn,它定义为:

N?1Mn??m?0xn(m) (4-10)

Mn也是一帧语音信号能量大小的表征,它与短时能量的区别在于计算时小取样值和

大取样值不会因取平方而造成较大差异,在某些应用领域中会带来一些好处。

短时能量和短时平均幅度函数的主要用途有:第一,可以区分浊音段与清音段,因为浊音段的En值比清音段时大得多。第二,可以用来区分声母与韵母的分界,无声与有声的分界,连字(指字之间无间隙)的分界等。第三,作为一种超音段信息,用于语音识别中。 4.3.2 短时过零率分析

短时过零率表示一帧语音中语音信号波形穿过横轴(零电平)的次数。过零分析是语音时域分析中最简单的一种。对于连续语音信号,过零即意味着时域波形通过时间轴;而对于离散信号,如果相邻的取样值改变符号则称为过零。过零率就是样本改变符号的次数。

定义语音信号xn(m)的短时过零率:

Zn?1N?1?2sgn[xn(m)]?sgn[xn(m?1)] (4-11)

m?0式中,sgn[ ]是符号函数,即:

基于Matlab的语音特征参数的提取

?1,(x?0) sgn[x]????1,(x?0) (4-12)

在实际中求过零率时,需要十分注意的一个问题是如果输入信号中包含有50Hz的工频干扰或者A/D变换器的工作点有偏移(这等效于输入信号有直流偏移),往往会使计算的过零率很不准确。为了解决前一个问题,A/D变换器前的防混叠带通滤波器的低端截频应高于50Hz,以有效地抑制电源干扰。对于后一个问题除了可以采用低直流漂移器件外,也可以在软件上加以解决,这就是算出每一帧的直流分量并予以滤除。

对语音信号进行分析,发现发浊音时,尽管声道有若干个共振峰,但由于声门波引起谱的高频跌落,所以其语音能量约集中在3kHz以下。发清音时,多数能量出现在较高频率上。高频就意味着高的平均过零率,低频意味着低的平均过零率,所以可以认为浊音时具有较低的过零率,而清音时具有较高的过零率。当然,这种高低仅是相对而言的,并没有精确的数值关系。

利用短时平均过零率还可以从背景噪声中找出语音信号,可用于判断寂静无声段和有声段的起点和终点位置。在孤立词的语音识别中,必须要在一连串连续的语音信号中进行适当的分割,用以确定一个一个单词的语音信号,即找出每一个单词的开始和终止位置,这在语音处理中是一个基本的问题。此时,在背景噪声较小时用平均能量识别较为有效,而在背景噪声较大时用平均过零率识别较为有效。但是研究表明,在以某些音为开始或结尾时,如当弱摩擦(如[f]、[h]等音素)、弱爆破音(如[p]、[t]、[k]等音素)为语音的开头或结尾;以鼻音(如[ng]、[m]、[n]等音素)为语音的结尾时,只用其中一个参量来辨别语音的起点和终点是有困难的,必须同时使用这两个参数。

短时能量、短时平均幅度和短时过零率都是随机参数,但是对于不同性质的语音它们具有不同的概率分布。对于无声、清音、浊音三种情况,短时能量和短时过零率具有不同的概率密度函数,浊音的短时平均幅度最大而短时过零率最低;反之清音的短时平均幅度居中而短时过零率最高;无声的短时平均幅度最低而短时过零率居中。这些条件概率密度函数都很接近于正态分布。如果能够求出这三种状态下的短时平均幅度或短时能量和短时过零率的条件联合概率密度函数,那么就可以采用统计学中的最大似然算法,根据一帧信号的短时平均幅度和短时过零率来判断它的类别。这就是计算如下的后验概率:

P(XM,Z)?P(M,Z|X)?P(X)P(M,Z) (4-13)

其中S、U、V分别代表无声、清音和浊音,X=S或U或V。后验概率最大者即作为判别结果。事实上,仅依靠短时平均幅度和短时过零率两个参数还不够。如果能选取更多的有效参数,例如相关系数等,可以得到更佳的分类效果[?]。 4.3.3 短时相关分析

相关分析是一种常用的时域波形分析方法,并有自相关和互相关之分。这里主要讨论自相关函数。自相关函数具有一些性质,如它是偶函数;假设序列具有周期性,则其自相关函数也是同周期的周期函数等。我们可以把自相关函数的这些性质应用于语音信号的时域分析中。对于浊音语音可以用自相关函数求出语音波形序列的基音周期。此外,在进行

19

江南大学学士学位论文

语音信号的线性预测分析时,也要用到自相关函数。和其他语音参数一样,在语音信号分析中,我们分析的是短时自相关函数。

1、短时自相关函数

定义语音信号xn(m)的短时自相关函数Rn(k)的计算式如下:

N?1?kRn(k)??m?0xn(m)xn(m?k)

(0?k? K ) (4-14)

这里K是最大的延迟点数。

短时自相关函数具有以下性质:第一,如果xn(m)是周期的(设周期为Np),则自相关函数是同周期的周期函数,即Rn(k)?Rn(k?Np);第二,Rn(k)是偶函数,即

Rn(k)?Rn(?k);第三,当k=0

时,自相关函数具有最大值,即Rn(0)?Rn(k),并且等于

确定性信号序列的能量或随机性序列的平均功率。

语音信号在一段时间内是周期变化的,所以短时自相关函数是具有一定周期性的,但是甚至在很短一段语音内也不同于一个真正的周期信号段,不同周期内的信号波形也有一定变化。浊音语音的自相关函数具有一定的周期性,在相隔一定的取样后,自相关函数达到最大值,而清音语音的自相关函数有一个类似于噪声的高频波形,没有很强的周期性。

2、修正的短时自相关函数

在传统的自相关函数的计算中,是两个等长的序列进行乘积和的,这样随着延迟k的增加,进行乘积和的项数在减少,所以总体上自相关函数的幅度值随着延迟k的增加而下降。因此,在利用传统自相关函数计算波形周期时,如果窗长不足够长,包含的周期不足够多,则会给周期计算带来困难。例如,浊音的短时自相关的函数在基音周期的各个整数倍点上有很大的峰值,看来只要找到第一最大峰值点(除Rn(0)外最近的一个最大值点)的位置并计算它与k=0点的间隔,便能估计出基音周期。实际上并不是那么简单,第一最大峰值点的位置有时不能与基音周期相吻合。产生这种情况的原因之一就是窗的长度不够,一般认为窗长至少应大于两个基音周期,才可能有较好效果。

因此,在语音信号处理中,计算自相关函数所用的窗口长度与平均能量等情况略有不同。这里,N值至少要大于基音周期的两倍,否则将找不到第一个最大值点。另一方面,N值也要尽可能地小,否则将影响短时性。因此长基音周期要用宽的窗,短基音周期要用窄的窗。虽然可采用自适应于基音周期的窗口长度法,但是这种方法比较复杂。为解决这个问题,可用“修正的短时自相关函数”来代替短时自相关函数。

修正的短时自相关函数是用两个长度不同的窗口,截取两个不等长的序列进行乘积和,两个窗口的长度相差最大的延迟点数K。这样就能始终保持乘积和的项数不变,即始终为短窗的长度。修正的短时自相关函数定义为:

?(k)?RnN?1?xm?0n(m)x'n(m?k)

(0?k?K) (4-15)

其中,

xn(m)??(m)x(n?m)

0?m?N?1 (4-16)

基于Matlab的语音特征参数的提取

?(m)???1,m?0?(N?1)?0,m?else (4-17)

xn'(m)??'(m)x(n?m)

0?m?N?1? K (4-18)

(4-19)

?1,m?0?(N?1?K)?'(m)???0,m?else这里K是最大的延迟点数。为了消除传统的自相关函数中可变上限引起的自相关函数的下降,而选取不同长度的窗口,使一个窗口包括另一个窗口的非零间隔以外的取样,这

?(k)具有互相关函数的特样计算自相关函数时序列总是取N个抽样来进行。严格地说,Rn?(0)与最接近?(k)在周期信号周期的倍数上有峰值,所以R性,而不是自相关函数。然而Rnn的第一个最大值点仍然代表了基音周期的位置[??]。 4.3.4 短时平均幅度差分析

短时自相关函数是语音信号时域分析的重要参量。但是计算自相关函数的运算量很大,其原因是乘法运算所需要的时间较长。利用快速傅里叶变换(FFT)等简化计算方法都无法避免乘法运算。为了避免乘法,一个简单的方法就是利用差值。为此常常采用另一种与自相关函数有类似作用的参量,即短时平均幅度差函数(AMDF)。

平均幅度差函数能够代替自相关函数进行语音分析,是基于这样一个事实:如果信号是完全的周期信号(设周期为Np)则相距为周期的整数倍的样点上的幅值是相等的,差值为零。即:

d(n)=x(n)-x(n+k)=0 (k=0,?Np,?2Np,···) (4-20)

对于实际的语音信号,d(n)虽不为零,但其值很小。这些极小值将出现在整数倍周期的位置上。为此,可定义短时平均幅度差函数:

N?1?kFn(k)??m?0xn(m)?xn(m?k) (4-21)

显然,如果x(n)在窗口取值范围内具有周期性,则Fn(k)在k=Np,2Np,···时将出现极小值。如果两个窗口具有相同的长度,则可以得到类似于相关函数的一个函数。如果一个窗口比另一个窗口长,则有类似于修正自相关函数的那种情况。对于周期性的x(n),

Fn(k)也呈现周期性,与Rn(k)相反的是在周期的各个整数倍点上具有谷值而不是峰值。

可以证明平均幅度差函数和自相关函数有密切的关系,两者之间的关系可由下式表达:

Fn(k)?2?(k)[Rn(0)?Rn(k)]1/2 (4-22)

式中?(k)对不同的语音段在0.6?1.0之间变化,但是对一个特定的语音段,它随k值变化并不明显。AMDF函数对于浊音会在基音周期上出现极小值,而在清音语音时没有明显的极小值。

21

基于Matlab的语音特征参数的提取

将预加重后的信号进行加窗分帧。窗函数的选择(形状和长度),对于短时分析参数的特性影响很大。为此应选择合适的窗口,使其短时参数更好地反映语音信号的特性变化。下面从窗口形状和长度来讨论这个问题。

分别使用窗长240点即30ms的矩形窗和汉明窗,得到加窗后的信号波形如图5-6所示。可以观察出加窗后信号的时域特征更加明显,对应“s”和“d”的信号幅值加强;而加汉明窗的时域波形辅音的加强程度更甚于加矩形窗的波形,这是由两种窗函数的频域特性所决定的,汉明窗的带宽比矩形窗大了约一倍,同时其带外衰减也比矩形窗大,矩形窗的谱虽然平滑性能好,但损失了高频成分,从而使波形的细节丢失。所以汉明窗比矩形窗更适合做语音信号的窗函数。

研究窗长对信号时域、频域的影响。图5-7、图5-8及图5-9是对信号加窗长分别为15ms、30ms、60ms的汉明窗的时域、频域的比较。比较图5-7、图5-8中各加窗信号与原信号的频谱,得到窗长越长所得频谱与原信号频谱越相近,频率分辨率越高,将图5-9中各波形与图5-6原信号波形比较,发现窗口越长,波形变形就越明显,时域分辨率就越低;这是因为频率分辨率?f?1/NTs(其中N为窗口长度,Ts为采样周期),N越大,频域分辨率越高,时域分辨率越低。综合时、频域两方面特性,N值既不能太大,也不能太小。考虑到一个语音帧应包含1?7个基音周期,基音周期变化范围较大(从女性、儿童的2ms到老年男子的14ms),后续处理中窗长折中选为30ms(240点)。

原信号频谱4030幅值2010000.10.20.30.50.60.7w(单位pi)窗长15ms的信号频谱0.40.80.914030幅值2010000.10.20.30.40.50.6w(单位pi)0.70.80.91

图5-7 原信号频谱与窗长15ms信号频谱

27

江南大学学士学位论文

窗长30ms的信号频谱4030幅值2010000.10.20.30.50.60.7w(单位pi)窗长60ms的信号频谱0.40.80.914030幅值2010000.10.20.30.40.50.6w(单位pi)0.70.80.91

图5-8 窗长分别为30ms和60ms的信号频谱

窗长15ms的信号时域波形0.1幅值0-0.1200040006000800010000120001400016000窗长30ms的信号时域波形0.05幅值0-0.05200040006000800010000120001400016000窗长60ms的信号时域波形0.05幅值0-0.05200040006000800010000120001400016000

图5-9 窗长分别为15ms、30ms和60ms的信号时域波形

基于Matlab的语音特征参数的提取

综上所述,本文选择加30ms的汉明窗,将加窗后信号存为“d.wav”文件。以30ms为一帧,为保持帧之间的连续性,采用交叠分段的方法,取帧移为10ms,完成加窗分帧。

5.2 语音信号的时域分析

5.2.1 短时平均能量分析

三种定义的短时能量分别用下面三行Matlab命令实现:

amp1=sum(abs(y),2); amp2=sum(y.*y,2);

amp3=sum(log(y.*y+eps),2);

其中amps3中加上小的浮点数eps,是为了防止log运算中可能出现的溢出。图5-10显示了三种短时能量的波形。由图可见,第二种短时能量对高电平敏感,对于低电平分辨率低,因为它计算时用的是信号幅值的平方;使用第一种和第三种短时能量函数可以得到较理想的效果,在计算小取样值和大取样值短时能量时不会产生较大差异。

由短时能量图可以找到清音“s”及浊音“d”大约分别出现在50?70和120?140帧区域内,观察得清音的短时能量比浊音小得多;从图中可以得出语音大约从40帧开始,结束于160帧,因为静音段能量低于语音段。因此得到浊音的短时能量最高,静音的短时能量最低,清音居中,应用此性质可以区分无声、有声,清音、浊音。

100amp150040020406080100120140160180200amp22000020406080100120140160180200amp3-1000-2000-3000020406080100120140160180200

图5-10 三种短时能量

5.2.2 短时过零率分析

本节使用经过滤波和预加重但未加窗的语音信号“c.wav”进行分析,并给出两种计算短时过零率的方法,加以比较。

29

江南大学学士学位论文

第一种方法先将语音分帧存为二维数组,采用两重循环计算过零率zcr1,如果前后两个采样值异号则说明过零一次,同时为排除噪声干扰或系统轻微振动所引起的过零,该方法设置了门限delta(这是一个经验值取为0.02),因此该方法思路为:分别对每一帧进行扫描,当前后两个采样值异号并且差的绝对值大于delta时,zcr1自加1,最后得到数列zcr1。

第二种方法是将语音的第一点至倒数第二点分帧存为二维数组tmp1,将语音的第二点到最后一点用相同方法分帧存为二维数组tmp2,两个二维数组中的对应元素错开一位,将两个数组中的对应元素分别相乘,结果小于零,则在二维数组signs相应位置存1,反之存0,同理将tmp1、tmp2对应元素作差,绝对值大于门限delta,则在二维数组diffs中存1,反之存0,最后将signs、diffs数组对应位置上的元素相乘,将所得二维数组的每列求和,结果存到一维数组zcr2中,即为各帧的过零率数组。此方法判别条件与第一种方法相同,但该法运用了矢量化的计算方法[??]。

如图5-11所示,用两种方法算得的过零率相同,可见效果相同。而用tic和toc命令对两种方法的运行时间进行计时,第一种方法用时0.019839s,第二种方法用时0.014780s,可见用矢量化的计算方法可以提高程序效率,虽然差别仅是10?3数量级,但对于时长较长的语音或者实时语音处理意义重大,因此得到选用矢量化的计算方法更优。

对过零率进行分析,发现在对应清音“s”的50?70帧处过零率出现峰值,并高于对应浊音“d”的120?140帧处的过零率而静音段的过零率几乎为零。因此,可以得出结论:清音段的过零率最高,静音段的过零率最低。浊音段的过零率居中。

10080ZCR160402002040608010012014016018010080ZCR2604020020406080100120140160180

图5-11 两种不同方法求得的过零率

基于Matlab的语音特征参数的提取

5.2.3 静音段、清音段、浊音段的判别

语音中可以分为静音、清音、浊音,本节基于上面各节的结论,运用短时能量和短时过零率作为条件,分别用两种方法进行了判断。

第一种方法设置单门限。若待定帧的短时能量、短时过零率均小于门限值,则判为静音;若只有短时能量大于规定门限,则判为浊音;否则,判为清音。关于门限值的规定采用了自适应的方式,即首先规定了门限的经验值,根据算得的短时能量和短时过零率进行调整,如此可以使程序具有普遍性,适应不同人的语音信号。

第二种方法增强了对语音开始和结束的判别条件。为短时能量和短时过零率分别设定了两个门限,数值较小的门限对信号变化比较敏感,数值较大的只有在信号达到一定强度才可能被超过。静音段、清音段、浊音段的状态转换图如下所示,其中,短时能量为amp,其高、低门限分别是amp1、amp2;短时过零率为zcr,其高、低门限分别是zcr1、zcr2;count是连续语音帧帧数,silence是连续静音帧帧数,minlen为由静音段进入语音段的最小连续语音帧帧数(经验值),minsilence为由语音段进入静音段的最小连续静音帧帧数(经验值)。amp1、zcr1、amp2、zcr2也采用自适应的设置方式。

zcr>zcr1 或 amp>amp1且count>minlen(条件1)不满足条件3不满足 条件1 清音不满足 条件2 静音段语音段amp>amp1(条件3)zcr

用两种方法去处理经过预处理和数字化的语音信号,其中短时能量是用经滤波、预加重、加汉明窗后的“d.wav”文件算得的,短时过零率是由经滤波、预加重,但未加窗的“c.wav”文件算得的,所得判别结果如图5-13所示,幅值为“0”代表静音,“1”代表清音,“2”代表辅音。可见用第二种方法语音段开始和结束的都较晚,并且只有第二种方法检测出了大约90?95帧处语音结束段的清音帧,因此可以看出在噪声已被抑制的情况下,两种方法效果基本相同,只是第二种方法在语音开始时有minlen的延迟,在语音结束时有minsilence的延迟,但是第二种方法对语音结束时的清音更加敏感。从效率上看,显然第一种方法简单易行、效率更高,第二种方法比较繁琐、效率低。

31

基于Matlab的语音特征参数的提取

第6章 结论与展望

6.1 结论

本文对语音信号特征参数提取进行了Matlab仿真。第一,通过录音采集信号。第二,经滤波、预加重、加窗,排除电源工频及随机噪声干扰、提高信号频谱的高频特性、消除直流漂移,使提取的特征参数更加准确;本文对所加窗的形状和长度进行了讨论,由仿真得到结论,与矩形窗相比,汉明窗因为带宽大、带外衰减剧烈,所以更能突出时域波形的细节,效果更佳;窗口越长频域分辨率越高,时域分辨率越低,选择窗长时要结合时域、频域特性以及语音基音周期综合考虑,仿真中得到加30ms的汉明窗效果较好。第三,经过分帧,计算语音信号每帧的短时平均能量和短时过零率;本文讨论了三种短时平均能量表述方式,得到结论信号平方和的表述方式对高电平敏感,因此选用绝对值和以及对数表述较为理想,对于短时过零率的计算,本文采用了二重循环和矢量化两种方法,得到结论:矢量化的编程方法提高了计算效率;对静音、清音和浊音的两种时域参数进行比较,得到结论:浊音的短时平均能量最高,静音最低,清音居中,对于短时过零率,清音最高,静音最低,浊音居中。第四,根据静音、清音、浊音的时域参数区别,本文用单门限和双门限两种方法仿真判别了三种语音,单门限方法简单高效,适合噪声被抑制时的判别,而双门限方法增强了语音开始和结束的判别条件,能够排除瞬时噪声干扰对结果的影响。第五,通过短时自相关函数和短时平均幅度差函数两种方法提取基音周期,而以上两种函数形式均有原形式及修正形式两种。得到结论:同样形式、加同样长度窗的两种函数,后者的效率更高;而同种函数情况下,原形式加等长的窗,窗长需要随基音周期而增减,修正形式由于加不等长的窗,窗长可以始终保持短窗的长度,保证了信号的短时性,避免了自适应的繁琐;清音没有明显的基音周期,浊音的基音周期对应于自相关函数第一个波峰的时间坐标和平均幅度差函数第一个波谷的时间坐标。

本文用Matlab进行仿真,具有方法简单、误差小、速度快、便于结果分析的优点。免去了数字卷积、快速傅里叶变换等复杂运算;运用了Matlab命令对实验程序计时;利用workplace窗口分析中间变量,查找程序漏洞;绘制比较实验数据图像,得到结论。利用Matlab提高了研究的准确度和效率,加深了对语音信号时域分析理论的理解。

6.2 不足之处及未来展望

本文的不足之处有四方面:第一,对于特征参数的研究不全面,只研究了时域参数,未研究频域参数;第二,对于语音信号的研究不全面,着重于对辅音的研究,未研究元音的重要特性;第三,分析样本单一,没有用男女老少的不同语音进行验证,使论证缺乏说服力;第四,论文论述仅讨论了已存信号特征参数提取,未讨论实时提取。

通过对语音信号时域特征参数的研究,得到不同参数在语音识别等后续处理中的不同作用。短时平均能量进行归一化处理,可以用于模型参数,也可以把能量包络作为参数用于语音识别;短时过零率可以与短时平均能量一起用在语音预处理中,识别语音是清音还是浊音,判断语音的开始与结束,进行端点检测等,尤其在孤立词语音识别系统中作用明显;短时自相关函数和短时平均幅度差函数在时域给出了语音信号的一些重要特征,用于

37

江南大学学士学位论文

语音信号分析可以判断一个语音是清音还是浊音,确定浊音的基音周期,这两个特征能够在时域反映语音频谱特性,与频域特征参数比较,计算简便、高效,可用于各种实时系统。

正确提取语音的特征参数后,根据实际需要选择有效特征为语音识别提供数据,压缩语音特征维数,使后续处理更加快捷,经处理得到语音识别结果,可以应用于语音合成,也可以与其他学科相结合,满足人们的实际需要。它与办公、交通、金融、公安、商业、旅游等行业相接轨,可以实现语音咨询与管理、工业生产部门的语声控制、电话自动拨号等,并有望成为下一代操作系统和应用程序的用户界面。因此语音信号特征参数提取技术的研究是一项极具市场价值和挑战性的工作。

基于Matlab的语音特征参数的提取

参考文献

[1] 蔡莲红,黄德智,蔡锐.现代语音技术基础与应用[M].北京:清华大学出版社,2003:

1-4.

[2] 高新涛,陈乖丽.语音识别技术的发展现状及应用前景[J].甘肃科技纵横,2007,36(4):13.

[3] Bellanger.M. Digital processing of speech signals [J]. Acoustics Speech and Signal

Processing, 1980,28(1):118-119. [4] 刘瑞桢.MATLAB简介[J].电脑编程技巧与维护,1997,7:48-50.

[5] 何强,何英.MATLAB扩展编程[M].北京:清华大学出版社,2002:289-291. [6] 王世一.数字信号处理[M].北京:北京理工大学出版社,2003:68-70,123. [7] 叶培建.语音信号处理综述[J].控制工程,1986,5:35-41. [8] 赵力.语音信号处理[M].北京:机械工业出版社,2003:31-35.

[9] 王昆仑.语音识别中信号特征的提取和选择[N].新疆师范大学学报,2000-6(自然科学版). [10] Oveisgharan.S,Shamsollahi.M.B. Speech modeling and voiced/unvoiced/mixed/silence

speech segmentation with fractionally Gaussian noise based models[J]. Acoustics Speech and Signal Processing, 2004,1:1-6,13-16. [11] 陈宇锋.基于声卡和MATLAB的语音信号采集和处理[J].中国现代教育装备,2006,

5:49-56.

[12] 李春泉,伍军云,熊殷.基于MATLAB的语音信号时频域参数分析[J].科技广场,2007,

9:22-24.

39

江南大学学士学位论文

致 谢

本文是在导师李英教授的悉心指导下完成的,在整个设计过程中,李老师非常认真负责、专业经验丰富,正确解答同学的提问,使我受益匪浅,在此表示谢意!

同时我还要感谢我的同学们,他们为我提供Matlab软件、收集相关资料,共同讨论解答问题,对我的学习和研究有很大帮助。

感谢李英老师和帮助我的同学们。

附录

附录: 仿真程序

filter.m

%将数字化后的语音信号滤波 %a.wav为原始录音信号 clear all close all

%将a.wav中的数据存如一维数组x中 [x,fs,bit]=wavread(‘a.wav’);

%设定滤波器为4阶比特沃斯滤波器 %上下截止频率分别为100Hz、3400Hz [b,a]=butter(4,[0.025 0.85]); %语音信号通过上述滤波器 %得到数据存入一维数组y中 y=filter(b,a,x);

[Rows,Cols]=size(x); L=Rows; w=0:(L-1);

W=2*pi/Rows*w; %数字角频率 X=abs(fft(x)+eps);

X(1)=X(2); %滤波前信号频谱 Y=abs(fft(y)+eps);

Y(1)=Y(2); %滤波后信号频谱 figure(1); %做时域波形图 subplot(211); plot(x);

title(‘滤波前信号波形’) grid on

subplot(212); plot(y);

title(‘滤波后信号波形’) grid on

%做频域波形图

%放大低频部分便于观察 figure(2); subplot(221)

plot(W/pi,X(1:L));

title(‘滤波前信号频谱’); xlabel(‘w(单位pi)’); ylabel(‘幅值’);

axis([0 1 0 max(X)]) grid on

subplot(223)

plot(W/pi,Y(1:L));

title(‘滤波后信号频谱’); xlabel(‘w(单位pi)’); ylabel(‘幅值’);

axis([0 1 0 max(X)]) grid on

subplot(222)

plot(W/pi,X(1:L));

title(‘滤波前低频段放大的信号频谱’); xlabel(‘w(单位pi)’); ylabel(‘幅值’);

axis([0 0.02 0 max(X)])

grid on

subplot(224)

plot(W/pi,Y(1:L));

axis([0 0.02 0 max(X)])

title(‘滤波后低频段放大的信号频谱’); xlabel(‘w(单位pi)’); ylabel(‘幅值’); grid on

yujiazhong.m

%将滤波后的语音信号预加重 %b.wav为经过滤波后的语音信号 clear all close all

[x,fs,bit]=wavread('b.wav'); %读取要处理的信号 x=double(x);

x=x/max(abs(x)); %幅度归一化

y=filter([1 -0.9375],1,x); %进行预加重 FrameLen=240; %帧长设定为30ms FrameInc=80; %帧移设定为10ms %预加重前的信号短时能量

amp1=sum(abs(enframe(x,FrameLen,FrameInc)),2); %预加重后的信号短时能量

amp2=sum(abs(enframe(y,FrameLen,FrameInc)),2); [Rows,Cols]=size(x); L=Rows; w=0:(L-1);

W=2*pi/Rows*w; X=abs(fft(x)+eps);

X(1)=X(2); %滤波前信号频谱 Y=abs(fft(y)+eps);

Y(1)=Y(2); %滤波后信号频谱

figure(1); %比较预加重对短时能量的影响 subplot(211) plot(amp1);

axis([1 length(amp1) 0 max(amp1)]) ylabel(‘短时能量’);

title(‘预加重前的短时能量’); grid on

subplot(212) plot(amp2);

axis([1 length(amp2) 0 max(amp2)]) ylabel(‘短时能量’);

title(‘预加重后的短时能量’); grid on

figure(2); %比较预加重对信号频谱的影响 subplot(211)

plot(W/pi,X(1:L));

title(‘预加重前信号频谱’); xlabel(‘w(单位pi)’); ylabel(‘幅值’);

axis([0 1 0 max(X)]) grid on

41

subplot(212)

plot(W/pi,Y(1:L));

title(‘预加重后信号频谱’); xlabel(‘w(单位pi)’); ylabel(‘幅值’);

axis([0 1 0 max(X)]) grid on

win_compare.m

%加窗形状(矩形窗和汉明窗)比较 %c.wav为经过预加重的语音信号 clear all close all

x=wavread('c.wav');

y=conv(x,boxcar(240)); %加30ms的矩形窗 z=conv(x,hamming(240)); %加30ms的汉明窗 [Rows,Cols]=size(x); L=Rows; w=0:(L-1);

W=2*pi/Rows*w; X=abs(fft(x)+eps);

X(1)=X(2); %计算未加窗信号频谱 Y=abs(fft(y)+eps);

Y(1)=Y(2); %计算加30ms矩形窗的信号频谱 Z=abs(fft(z)+eps);

Z(1)=Z(2); %计算加30ms汉明窗的信号频谱 subplot(311) %比较加不同窗信号的时域波形 plot(x);

ylabel(‘幅值’);

title(‘原语音信号的时域波形’); grid on

subplot(312) plot(y);

ylabel(‘幅值’);

title(‘加矩形窗的时域波形’); axis tight grid on

subplot(313) plot(z);

ylabel(‘幅值’);

title(‘加汉明窗的时域波形’); axis tight grid on

winlength.m

%预处理中加不同长度的汉明窗比较 % c.wav为经过预加重的语音信号 clear all close all

a=wavread('c.wav');

x=conv(a,hamming(120)); %加15ms的汉明窗 y=conv(a,hamming(240)); %加30ms的汉明窗 z=conv(a,hamming(480)); %加60ms的汉明窗 [Row,Col]=size(a); LL=Row;

附录

b=0:(LL-1); B=2*pi/Row*b; A=abs(fft(a)+eps);

A(1)=A(2); %计算加窗前信号频谱 [Rows,Cols]=size(x); L=Rows; w=0:(L-1);

W=2*pi/Rows*w; X=abs(fft(x)+eps);

X(1)=X(2); %计算加15ms汉明窗的信号频谱 Y=abs(fft(y)+eps);

Y(1)=Y(2); %计算加30ms汉明窗的信号频谱 Z=abs(fft(z)+eps);

Z(1)=Z(2); %计算加60ms汉明窗的信号频谱 figure(1); %比较加不同长度的窗后的时域波形 subplot(311) plot(x);

ylabel(‘幅值’);

title(‘窗长15ms的信号时域波形’); axis tight grid on

subplot(312) plot(y);

ylabel(‘幅值’);

title(‘窗长30ms的信号时域波形’); axis tight grid on

subplot(313) plot(z);

ylabel(‘幅值’);

title(‘窗长60ms的信号时域波形’); axis tight grid on

figure(2); %比较加不同长度的窗后信号频谱 subplot(211)

plot(B/pi,A(1:LL)); title(‘原信号频谱’); xlabel(‘w(单位pi)’); ylabel(‘幅值’);

axis([0 1 0 max(A)]) grid on

subplot(212)

plot(W/pi,X(1:L));

title(‘窗长15ms的信号频谱’); xlabel(‘w(单位pi)’); ylabel(‘幅值’);

axis([0 1 0 max(A)]) grid on figure(3); subplot(211)

plot(W/pi,Y(1:L));

title(‘窗长30ms的信号频谱’); xlabel(‘w(单位pi)’); ylabel(‘幅值’);

axis([0 1 0 max(A)]) grid on

附录

subplot(212)

plot(W/pi,Z(1:L));

title(‘窗长60ms的信号频谱’); xlabel(‘w(单位pi)’); ylabel(‘幅值’);

axis([0 1 0 max(A)]) grid on

end; %用双重循环计算过零率 toc; %计时结束 %方法二

tic; %开始计时

tmp1=enframe(y(1:end-1),FrameLen,FrameInc); tmp2=enframe(y(2:end),FrameLen,FrameInc); signs=(tmp1.*tmp2)<0;

diffs=abs(tmp1-tmp2)>delta; zcr2=sum(signs.*diffs,2); %用矢量化方法计算 energy.m toc; %计时结束 %比较语音信号短时能量不同表述形式的效果 subplot(211) %比较这两种方法 %d.wav是预处理后的语音信号 plot(zcr1) clear all axis tight close all ylabel('ZCR1');

subplot(212) [x,fs,bit]=wavread('d.wav'); %读取信号

plot(zcr2) x=double(x);

axis tight x=x/max(abs(x)); %幅度归一化

ylabel('ZCR2'); FrameLen=240; %帧长30ms

FrameInc=80; %帧移10ms

y=enframe(x,FrameLen,FrameInc); %分帧

panbie1.m

amp1=sum(abs(y),2);

%低噪声情况下,静音、清音、浊音判别方法

amp2=sum(y.*y,2);

%c.wav是滤波后的语音信号

amp3=sum(log(y.*y+eps),2); %短时能量不同表述

%d.wav是预处理后的语音信号

subplot(311) %比较三种表述

clear all

plot(amp1);

close all

ylabel('amp1');

x=wavread('c.wav');

subplot(312)

y=wavread('d.wav'); %读取信号

plot(amp2);

x=double(x); ylabel('amp2');

x=x/max(abs(x)); %幅度归一化 subplot(313)

FrameLen=240; %帧长30ms plot(amp3)

FrameInc=80; %帧移10ms ylabel('amp3');

amp1=10; amp2=5; zcr.m zcr1=10; %比较语音信号短时过零率不同算法的效果 zcr2=5; %设置双门限 %c.wav是滤波后的语音信号 minsilence=3; %语音结束前静音最少持续3帧 clear all minlen=3; %语音开始前语音最少持续3帧 close all count=0; y=wavread('c.wav'); %读取信号 silence=0; y=double(y); tmp1=enframe(x(1:length(x)-1),FrameLen,FrameInc); y=y/max(abs(y)); %幅度归一化 tmp2=enframe(x(2:length(x)),FrameLen,FrameInc);

signs=(tmp1.*tmp2)<0; delta=0.02; %设置门限

diffs=(tmp1-tmp2)>0.02; FrameLen=240; %帧长30ms

zcr=sum(signs.*diffs,2); %计算过零率 FrameInc=80; %帧移10ms

y=enframe(y,FrameLen,FrameInc);

%方法一

amp=sum(y.*y,2); %计算短时能量

tic; %开始计时

amp1=min(amp1,max(amp)/4);

z=enframe(y,FrameLen,FrameInc); %分帧

amp2=min(amp2,max(amp)/8);

zcr1=zeros(size(z,1),1); zcr1=max(zcr1,max(zcr)/4); for i=1:size(z,1)

zcr2=max(zcr2,max(zcr)/8);%调整能量门限

x=z(i,:);

%用单门限方法判断

for j=1:length(x)-1

judge1=zeros(1,length(zcr)); if x(j)*x(j+1)<0&&abs(x(j)-x(j+1))>delta

for n=1:length(zcr) zcr1(i)=zcr1(i)+1;

if amp(n)

zcr(n)

43

附录

elseif amp(n)>amp1 %浊音 judge1(n)=2; else

judge1(n)=1; %清音 end end

%用双门限方法判断

judge2=zeros(1,length(zcr)); for n=1:length(zcr)-1 switch judge2(n)

case 0, %静音段

if amp(n+1)>amp1 ||... zcr(n+1)>zcr1 count=count+1;

if count>minlen %进入语音段 silence=0;

if amp(n+1)>amp1

judge2(n+1)=2;%浊音 else

judge2(n+1)=1;%清音 end

end %否则保持静音段 end

case {1,2} %语音段

if amp(n+1)

if silence>minsilence%静音段 count=0;

else %保持语音段

judge2(n+1)=judge2(n); end

elseif amp(n+1)>amp1 %保持语音段 judge2(n+1)=2; else %保持语音段 judge2(n+1)=1; end end end

subplot(211) %比较两种方法的判别结果 plot(judge1); axis tight

title(‘第一种方法判别静音、清音、浊音’); subplot(212) plot(judge2); axis tight

title(‘第二种方法判别静音、清音、浊音’);

panbie2.m

%噪声情况下,静音、清音、浊音判别方法 %a.wav是原语音信号 clear all close all

x=wavread('a.wav');

y=wavread('a.wav'); %读取信号

x=double(x);

x=x/max(abs(x)); %幅度归一化 FrameLen=240; %帧长30ms FrameInc=80; %帧移10ms amp1=0.02; amp2=0.01; zcr1=8;

zcr2=5; %设置双门限

minsilence=3; %语音结束前静音最少持续3帧 minlen=3; %语音开始前语音最少持续3帧 count=0; silence=0;

tmp1=enframe(x(1:length(x)-1),FrameLen,FrameInc); tmp2=enframe(x(2:length(x)),FrameLen,FrameInc); signs=(tmp1.*tmp2)<0; diffs=(tmp1-tmp2)>0.001;

zcr=sum(signs.*diffs,2); %计算过零率 y=enframe(filter([1

-0.9375],1,y),FrameLen,FrameInc); amp=sum(y.*y,2); %计算短时过零率 amp1=min(amp1,max(amp)/4); amp2=min(amp2,max(amp)/8); zcr1=max(zcr1,max(zcr)/4);

zcr2=max(zcr2,max(zcr)/8); %调整门限 %用单门限判别

judge1=zeros(1,length(zcr)); for n=1:length(zcr)

if amp(n)

zcr(n)amp1 %浊音 judge1(n)=2; else

judge1(n)=1; %清音 end end

%用双门限法判别

judge2=zeros(1,length(zcr)); for n=1:length(zcr)-1 switch judge2(n)

case 0, %静音段

if amp(n+1)>amp1 ||... zcr(n+1)>zcr1 count=count+1;

if count>minlen %进入语音段 silence=0;

if amp(n+1)>amp1

judge2(n+1)=2;%浊音 else

judge2(n+1)=1;%清音 end

end %否则保持静音段 end

case {1,2} %语音段

if amp(n+1)

附录

if silence>minsilence%静音段 ylabel(‘浊音自相关函数’); count=0; grid;

subplot(212) else %保持语音段

plot(Rq); judge2(n+1)=judge2(n);

axis tight end

elseif amp(n+1)>amp1 %保持语音段 ylabel(‘清音自相关函数’);

judge2(n+1)=2;

else %保持语音段

judge2(n+1)=1;

end

end

end

figure(1); %比较两种方法的判别结果

subplot(221)

plot(judge1);

axis tight title(‘第一种方法判别静音、清音、浊音’); subplot(222) plot(judge2); axis tight title(‘第二种方法判别静音、清音、浊音’); subplot(223) plot(judge1); axis([1 20 0 max(judge1)]); title(‘第一种方法判别静音、清音、浊音’); subplot(224) plot(judge2); axis([1 20 0 max(judge2)]); title(‘第二种方法判别静音、清音、浊音’);

R.m %比较清音、浊音的自相关函数

% d.wav是预处理后的语音信号

clear all;

close all;

y=wavread('d.wav');

x=y(9900:10300); %读取浊音信号

tic;

Rz=zeros(1,250);

for k=1:250

for n=1:400-k Rz(k)=Rz(k)+x(n)*x(n+k); end end %浊音自相关函数

toc;

x=y(5400:5800); %读取清音信号 Rq=zeros(1,250); for k=1:250 for n=1:400-k Rq(k)=Rq(k)+x(n)*x(n+k); end end %清音自相关函数 subplot(211)%比较两种自相关函数 plot(Rz); axis tight grid; R_length.m %比较不同窗长的自相关函数 % d.wav是预处理后的语音信号 clear all; close all; y=wavread('d.wav'); %读取语音信号 x=y(9900:10300); %窗长400点 Rz1=zeros(1,250); %初始化赋值,加快运算速度for k=1:250 for n=1:400-k Rz1(k)=Rz1(k)+x(n)*x(n+k); end end x=y(10000:10240); %窗长240点 Rz2=zeros(1,120); for k=1:120 for n=1:240-k Rz2(k)=Rz2(k)+x(n)*x(n+k); end

end x=y(10000:10120); %窗长120点 Rz3=zeros(1,60); for k=1:60

for n=1:120-k Rz3(k)=Rz3(k)+x(n)*x(n+k); end end subplot(311) %比较不同窗长浊音段自相关函数 plot(Rz1); axis tight ylabel(‘浊音段自相关函数’); title(‘窗长400点’) grid; subplot(312) plot(Rz2);

axis([1 250 0 max(Rz2)]) ylabel(‘浊音段自相关函数’); title(‘窗长240点’) grid; subplot(313) plot(Rz3); axis([1 250 0 max(Rz3)]) ylabel(‘浊音段自相关函数’); title(‘窗长120点’) grid;

R_xiuzheng_length.m

45

附录

%比较不同窗长的修正的短时自相关函数 % d.wav是预处理后的语音信号 clear all; close all;

y=wavread('d.wav'); %读取语音信号 x1=y(10000:10240); %窗长240点 x2=y(10000:10360); Rz1=zeros(1,120); for k=1:120

for n=1:240

Rz1(k)=Rz1(k)+x1(n)*x2(n+k); end end

x1=y(10000:10120); %窗长120点 x2=y(10000:10240); Rz2=zeros(1,120); for k=1:120

for n=1:120

Rz2(k)=Rz2(k)+x1(n)*x2(n+k); end end

x1=y(10000:10060); %窗长60点 x2=y(10000:10180); Rz3=zeros(1,120); for k=1:120 for n=1:60

Rz3(k)=Rz3(k)+x1(n)*x2(n+k); end end

subplot(311) %比较不同窗长修正短时自相关函数 plot(Rz1);

axis([1 250 0 max(Rz1)]) ylabel(‘浊音段自相关函数’); title(‘窗长240点’) grid;

subplot(312) plot(Rz2);

axis([1 250 0 max(Rz2)]) ylabel(‘浊音段自相关函数’); title(‘窗长120点’) grid;

subplot(313) plot(Rz3);

axis([1 250 0 max(Rz3)]) ylabel(‘浊音段自相关函数’); title(‘窗长60点’) grid;

AMDF.m

%比较两种不同的短时平均幅度差函数 % d.wav是预处理后的语音信号 clear all; close all;

y=wavread('d.wav'); %读取语音信号 x1=y(10000:10240); %窗长240点

Rz1=zeros(1,120); for k=1:120

for n=1:240-k

Rz1(k)=Rz1(k)+abs(x1(n)-x1(n+k)); end

end %计算短时短时平均幅度差函数函数 x1=y(10000:10060); %窗长60点 x2=y(10000:10180); Rz2=zeros(1,120); for k=1:120 for n=1:60

Rz2(k)=Rz2(k)+abs(x1(n)-x2(n+k)); end

end %计算修正的短时平均幅度差函数

subplot(211) %比较两种短时平均幅度差函数 plot(Rz1);

title(‘窗长240点短时平均幅度差’) grid;

subplot(212) plot(Rz2);

title(‘窗长60点修正的平均幅度差’) grid;

本文来源:https://www.bwwdw.com/article/28qx.html

Top