基于MATLAB基音检测分析
基于MATLAB基音检测分析
摘要:基音检测作为语音信号处理的重要手段,被广泛地应用于语音的合成、编码及识别等一系列语音信号处理技术问题。基音检测的准确性对于要求极高的语音识别、合成、分析、压缩编码等等都有重要的意义。该文用自相关函数法、平均幅度差函数法和倒谱法这三种常用的基音检测方法,运用MATLAB编程实现,对语音信号的基音周期轨迹图进行了比较分析,并由此得出和倒谱法进行语音信号基音的检测更为精确。
关键词:基音检测;MATLAB;自相关函数法;平均幅度差函数法;倒谱法
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)18-4293-03
1 概述
语音是人类相互之间进行信息交流的基本手段和重要载体,随着现代通信科学技术的迅速发展,尤其是计算机的日趋普及,对语音信号的处理发挥着越来越重要的作用。汉语中的声调对于语音的理解很重要,同时相同的汉语在不同的语气或词义下均有不同的声调[1]。因此,基音检测的准确性对于汉语语音信号的识别极为重要。
根据声带的震动情况,我们一般将语音信号分为清音和浊音两种[2]。清音和普通的白噪声相似,尚未发现明显的规律性;而浊音就是俗称的有声语言,携带着语音的大部分能量,并且具有明显的周期性。当人们在发出浊音的时候,气流往往会通过声门迫使声带产生规律性的震动,我们称之为激励脉冲串。通过声带震动产生的频率被定义为:基音频率,同样地,就有了基音周期[3]。通常所指的基音检测实际上就是一种对基音周期的估计,结果是希望能够找出与声带的振动频率相一致或较为吻合的轨迹曲线。
语音信号的处理包括四大类,分别为:语音合成、语音识别、语音编码以及语音识别 [2]。其中,准确提取语言信号参数对于整个的语音信号处理是至关重要的。只有当某些可以表示语音信号本质特征的参数被准确地提出,这些参数才可以被利用进行有效的语音合成,语音识别以及语音的压缩解码处理,其中语音周期提取的准确性会直接影响到语音合成的真实性,因此在众多参数中就会显得尤为重要[4]。
2 研究方法
2.1 自相关函数法(ACF函数法)
当采用ACF函数算法进行基音检测时,主要是利用了短时自相关函数能够取到最大值这一性质。使用此方法时,可以利用一个窗函数,使窗本身不动,而语音信号移动。窗口的长度[N]大于等于两倍的基音周期,当[N]越大,函数波形的细节会显示地越清晰,更加有利于基音的检测,然而会有繁重的计算量。
这一算法适用于在噪声环境下基音的提取。通过上面的性质可以知道,自相关函数都是在基音周期处出现峰值,并且标出出很强的规律性。在一般情况下,基波分量不是最强的分量,并且多变的谐波使得语音信号的波形变得较为复杂,对于基音检测是一大难题,经常发生的基频估计结果往往是:二次倍频或二次分频的实际基音频率。同时,还有一些清浊混杂的情况,使得基音检测成为目前的一大难题。
2.2 平均幅度差函数法(AMDF函数法
得到语音信号基音周期的具体过程是:首先对语音信号的序列进行z变换,然后对其取模再取对数,最后再进行逆z变换。根据语音信号的产生及瞬时平稳的特性可以得知:声道滤波器频谱与声源频谱的乘积就得到了短时谱的语音信号。对于浊音信号而言,脉冲激励源的周期性表现为快速变化的周期性细致结构[8]。语音信号倒谱的取得是:首先对语音信号的短时谱取对数,然后再进行反傅里叶变换,因此,浊音信号的倒谱会出现周期性的冲激,就可以从倒谱波形中提取出相对应的基音周期。
3 基于MATLAB基音检测
本文所采用的语音文件为:在windows附件中的录音机功能录制2-3秒 “啊”的四个音调,采样频率为11.025KHz,位数为16位,声道为单声道。
从已得到的语音信号中选取一段较理想的样本,取样点数应为帧长的整数倍。对语音信号的采样,通过软件MATLAB对语音文件的计算得知其语音长度为2.5秒,若采样频率为11KHz,共计27500个采样点。采样模块从采样频率为11KHz的语音信号中截取11000个样点进行分析,取帧长为20ms,即每帧为220个样点值,共分为50帧。运用matlab编写程序得出以下结果:
图1是原始语音信号的波形,图2是采样信号的波形,从原始语音信号中截取11000个样点进行分析.
图3是用ACF函数法得到的基音轨迹图,这一算法适用于在噪声环境下基音的提取。由图中可知,信号在是在基音周期处出现峰值,并且标出出很强的规律性。
图4是用AMDF函数法得到的基因轨迹图,平均幅度差函数法只需进行加减法和取绝对值等简单的计算,算法简单,运算量比自相关函数法大大减少,容易在计算机实现。
图5是运用倒谱法得到的基音检测轨迹图.倒谱法对于干净语