李 琦 张二华
(南京理工大学计算机科学与工程学院 南京 210094)
连续语音的自动切分,是指从连续的语音信号中切分独立的音素、音节或单词。汉字是单音节字[1],每个字都对应一个音节。在语音识别过程中,不宜直接对整段语音进行识别,因为其中可能包含大量汉字。由单字组合成句子的情况太多,并且字库的大小是有限的,必须通过连续语音的自动切分技术对语音切分,才能进行识别。
现有的连续语音自动切分技术主要有两类。一类是基于时域特征或频域特征的切分方法。基于双门限和倒谱的检测方法[2]是一种传统的连续语音切分方法,该方法对于不含明显辅音音节的汉字难以正确切分。曹冠斌[2]等提出了一种多级切分方法,该方法在分析汉语语音基础上利用双门限端点检测技术、基于倒谱的端点检测技术、相干分析和基音周期轨迹检测等方法对连续汉语语音进行切分。
另一类是基于模型的切分方法,该方法需要输入人工切分好的数据,对模型进行训练。张扬[3]等提出了一种基于时间长度的音节切分方法,利用高斯函数拟合音节的长度对音节进行切分。
本文综合利用端点检测、语谱图分析、基音周期轨迹检测等技术研究了汉语连续语音的自动切分。研究了一种连续语音多级切分方法,计算流程如图1。
图1 连续语音多级切分计算过程
语音信号是一种短时信号,在短时间内可看作平稳信号[6]。语音信号携带有语义和大量的说话人特征。语音特征参数可分为时域特征参数和频域特征参数。
计算语音特征参数之前,要对语音信号进行预处理,一般包括预加重、分帧和加窗[7]。预加重可以增强语音高频部分能量,使语音特征更明显。因为语音信号具有短时平稳性,所以对其进行分帧和加窗,以便用处理平稳信号的方法处理语音信号。
时域特征包括短时能量和短时过零率。短时能量表示每一帧语音信号包含能量的大小;短时过零率表示一帧语音信号经过零点的次数。时域特征是语音切分的基础,可以用来检测有声段边界[8]。
频域特征指的是信号的各个频率成分振幅的强弱变化,频域特征主要有频谱、功率谱和频谱包络等,分析方法包括傅里叶变换法、线性预测法和带通滤波器组法等。本文主要研究语音信号的语谱图和基音周期谱图。
相对于时域特征,频谱特征对于外界的干扰具有一定的鲁棒性。另外,频谱具有非常明显的声学特征,频域特征具有实际的物理意义,如共振峰参数和基音周期参数等。
2.3.1 语谱图
语谱图[9]可以显示语音的时-频特性。语谱图的横轴为时间(帧序号),纵轴为频率,二维坐标点的值表示对应时刻、对应频率成分的振幅,通过用像素点的颜色深浅来表示。颜色越深表示该时-频点的振幅越强。语谱图的绘制过程如下:
1)预处理,对语音信号进行分帧、加窗。
2)通过式(1),对第n 帧语音信号xn(m)做快速傅里叶变换,得到短时频谱。
该函数物理意义为:当n 固定时,将窗函数起点移到n 处截取信号xn(m),再做傅里叶变换得到短时频谱Xn(ω)。根据快速傅里叶变换的结果,可以得到每帧数据Xn(ω)对应的实部R和虚部I,通过式(2)得到振幅谱c:
根据振幅谱c 绘制语谱图,振幅越大,对应的像素点颜色越深;振幅越小,对应的像素点颜色越浅。因为实数的振幅谱为偶函数,每一帧数据都关于频率中心点对称,所以绘制语谱图时只需在每一帧的起始位置绘制前一半的频率样点即可。
2.3.2 基音周期谱图
人在发声时,声带振动的频率称为基频,相应的周期称为基音周期(pitch)。基音周期谱图是基音周期随时间的变化图,能够反映语音音调的变化、元音的起始位置和结束位置等多种信息。基音周期谱图的绘制方法仿照语谱图,根据式(3)求取倒谱ceps,根据ceps 振幅p 的排序绘制基音谱图。振幅越大,对应像素点颜色越深;振幅越小,对应像素点颜色越浅。并且在每一帧的起始位置绘制前一半的倒谱样点。
基于双门限和倒谱的端点检测技术是比较经典的语音端点检测方法。计算过程如下:
1)对语音做双门限端点检测,得到有声段边界。
2)对语音进行倒谱端点检测,得到元音段边界。
3)根据汉语的发音规律,当一个字的发音只有元音时,那么该元音段的起始和结束边界就是该汉字的语音边界;当一个字的发音既包含元音又包含辅音时,辅音往往在元音的前面,此时将辅音的起始位置和元音的结束位置作为该字的语音边界。从有声段中搜索元音段,取元音段的末尾边界作为切分的依据。
该方法对于基音周期轨迹不相连的多个字段切分正确率较高;但对于占少数的基音周期轨迹相连的字段,单字切分正确率不高。
语音切分点可分为三种。第一种切分点是有声段和无声段的交界处。连续语音往往包含有声段和无声段,它们在时间域的特征参数有着较大差异,可以通过双门限端点检测方法对其进行区分。
第二种切分点是元音段和辅音段的边界。因为有声段往往包含多个字段,所以第二种切分点的检测在有声段内部进行。在多个连续字段中,如果后面字段有辅音,那么前一个字段的元音会和后一个字段的辅音相连,因此元音末尾成为单字切分的依据。
第三种切分点是基音周期轨迹相连的字段边界。假设两汉字元音段相连,即后面的汉字没有辅音段。如“师恩难忘”的“师恩”,后面汉字“恩”的元音“en”可能会和前面汉字“一”的元音“i”连到一起。
尽管传统的双门限法[9]可以将大部分有声段与无声段的边界找出,但存在辅音段丢失和将无声段误判为有声段的情况。常规边缘端点检测在双门限法的基础上增设了疑似辅音段,提高了有声段检测的准确率。
传统双门限法在检测辅音时,对于短时平均过零率Z设置阈值ZX。当Z ≥ZX时,判定该语音段为辅音。在此过程中,双门限法忽略了短时能量的限制。这会导致一部分无声段混入辅音段,造成语音段切分误差。为解决此问题,增设短时能量阈值EC,定义如式(4):
其中0 ≤α1≤1,Eave为语音的短时能量,EL为双门限法中短时能量的低门限。
在此基础之上,增加判定辅音段的条件:当短时能量参数E满足EC≤E ≤EL,且短时平均过零率Z满足Z ≥ZX时,判定该段语音为辅音段。这种方法同时使用短时能量和短时平均过零率对辅音段进行判断,可以有效避免将无声段误检测为辅音段。
传统的双门限法分别设置EH、EL分别作为高低两个门限对元音段进行检测。当E ≥EH时,判定为元音段;当EH≤E ≤EL时,判定为过渡段,过渡段一般为辅音段;当E 图2 语音“师恩”的短时能量和语音波形图 从图2 可以看出,“师”的短时能量在元音段和辅音段的交界处大幅度降低,接近于无声段,这样会导致前面的辅音段整体丢失。因此,本文增设疑似辅音阈值ES,定义如式(5): 其中0 ≤α2≤1,Eave为语音的平均短时能量。在之前的判定基础上增设条件:当满足ES≤E ≤EC,且Z≤ZX时;或者满足EC≤E ≤EL且Z ≤ZX时,判定该段语音为疑似辅音段,在扩展辅音段时将相邻的疑似辅音段合并进去。 基音周期谱图横轴为时间(采样点序号),纵轴为语音对应的基音周期T。它可以反映语音的元音段位置,同时还能显示语音音调随时间的变化。 4.3.1 基音周期轨迹不相连的音节切分 基音周期轨迹检测目的是从基音周期谱图中找出语音的元音段,并将元音段的结束位置作为单字切分的依据。具体切分步骤如下: 1)在有声段内,检测存在基音周期轨迹的语音段,标记其起始和结束位置为W1、W2。在人的语音当中,只有元音段的语音才有基音周期,因此确定W1W2语音段为元音段。 2)根据汉字发音规律,每个汉字的语音都存在元音段,但不一定存在辅音段。当辅音段不存在时,就将存在基音周期轨迹部分的语音认定为该字对应的语音;当辅音段存在时,将W1W2左侧相邻的无基音周期轨迹语音段认定为该汉字的辅音段,如图3。 图3 语音“周岁”的基音周期谱图 在图3 中,找到元音段W1W2后,从W1向左延伸到上一段元音段的末尾,标记为W0,W0W2为字段“岁”的语音范围。若检测的字段为有声段的第一个字,在检测到元音段边界后,只需向左延伸到有声段左边界,将其作为该字段的边界即可。 4.3.2 基音周期轨迹相连的音节切分 通过观察大量数据发现,当音节发生变化时,语谱图中能量集中的位置也会发生变化。根据不同频带能量总和的变化,可以对基音周期轨迹相连且变化不明显的多个字段,进行单字切分。本文将语谱图的频率域分为多个频带,并对各个时间、各个频带的语音能量进行求和,称为频带能量。频带能量检测就是通过统计不同频带的能量,找到相邻音节之间频带能量发生突变的点,作为单字切分依据。具体实现过程如下。 1)计算语音的频谱并绘制其语谱图。语谱图的纵轴由256 个频率采样点有序排列构成,频率采样间隔Δt的计算公式如式(6)所示,其中帧长N 取512,采样频率f取16000Hz。 2)将256 个数据点序号分成多个频带分,并对其能量进行统计。由于元音段的能量主要集中在采样点序号0~128 范围内,因此将频率域分成[0,31]、[32,63]、[64,127]、[128,191]、[192,255]五个 频 带,分 别 对 应0~1000Hz、1000Hz~2000Hz、2000Hz~4000Hz、4000Hz~6000Hz、6000Hz~8000Hz频带,并将数据归一化至0~100 范围内,记为w1~w5,如图4(a)。 图4 语音“师恩”的语谱图和频带能量曲线 3)检测元音段相连的字段边界。分别统计w1~w5范围内语音的频带能量,并绘制频带能量曲线。如图4(b),“师恩”的元音段相连。在语音边界处,曲线w2、w3、w4发生突变,可推断此处能量变化较大。设置条件一:w2>40,w3>30,0 如“师恩难忘”其中“难”的辅音“n”和“恩”的元音段相连。“n”是浊辅音,它在语谱图中的能量主要集中在低频部分,且能量较低。设置条件二对其进行切分:w3<40、w4<40、0 本实验采用的是南京理工大学NJUST603语音库,该语音库含男、女生语音200 段。语音的采样频率为16kHz,诵读内容为作家刘绍棠所著《师恩难忘》,包含593 个汉字。本文采用命中率(Hit Rate,HR)作为算法的评价标准,HR 计算方式如式(7): 其中Nhit表示算法正确检测的分段边界个数,Nref表示算法检测的分段边界数。本文设置了基于双门限和倒谱的端点检测技术作为对比实验。 根据4.1 节~4.4 节对连续语音切分基础的阐述,可总结成连续语音多级切分方法,具体切分步骤如下: 1)利用改进的双门限法找出语音的有声段,将有声段范围集合记为S1,无声段集合记为S0。 2)利用基音周期轨迹检测,找出有声段S1中的元音段和辅音段,并根据辅音段和元音段的交界位置做切分,初步得到字与字之间的语音边界,将切分得到的范围集合记为S2。 3)根据4.2 节,由于S2中可能存在两个字的基音周期轨迹连续,且语音的音调没有明显变化的情况。本文对每个S2中对应的语音段做频带能量检测,通过频带能量的变化对如“师恩”一类的语音做切分,得到最终的语音切分范围集合S3,S3为最终得到的切分结果。 本实验选取男、女生语音共6 个,采用“师恩难忘,原题,老师领进门,刘绍棠,那年正月新春,我不满六周岁,便到邻近的乡村小学去读书”作为测试语音段,共228个音节。 本文结合常规边缘端点检测、语谱图分析、基音周期轨迹检测等技术将汉语语音切分为独立音节。通过对实验语音库的切分实验,得到表1 的对比结果。由表1 可以看出,对于相同的测试样本,多级切分方法的准确率更高,比传统的双门限-倒谱端点检测技术高出25.4%。 表1 多个语音实验结果对比 本文研究的连续语音多级切分方法综合利用了声学、语音学信号处理等知识,综合利用常规边缘端点检测、语谱图分析、基音周期轨迹检测等技术,获得了较高的准确率。同时,实验中也发现了一些问题需要解决,如一些词语诵读太快,音量偏小,能量较低,难以找到语音切分边界的问题。这是本文之后的研究方向。4.3 基音周期轨迹检测
5 实验设置
5.1 多级切分端点检测方法
5.2 实验结果
6 结语