具体实施方式
下面结合附图和实施例对本发明作进一步介绍:本发明的方法共分五步。
第一步:音频预处理
音频预处理分为采样量化,去零漂,预加重和加窗三个部分。
1、采样量化
A)、用锐截止滤波器对音频信号进行滤波,使其奈奎斯特频率FN为4KHZ;
B)、设置音频采样率F=2FN;
C)、对音频信号sa(t)按周期进行采样,得到数字音频信号的振幅序列
D)、用脉冲编码调制(PCM)对s(n)进行量化编码,得到振幅序列的量化表示s’(n)。
2、去零漂
A)、计算量化的振幅序列的平均值s;
B)、将每个振幅值减去平均值,得到去零漂后平均值为0的振幅序列s”(n)。
3、预加重
A)、设置数字滤波器的Z传递函数H(z)=1-αz-1中的预加重系数α,α可取比1稍小的值;
B)、s”(n)通过数字滤波器,得到音频信号的高、中、低频幅度相当的振幅序列s”’(n)。
4、加窗
A)、计算音频帧的帧长N(32毫秒)和帧移量T(10毫秒),分别满足:
这里F是音频采样率,单位为Hz;
B)、以帧长为N、帧移量为T,把s”’(n)划分成一系列的音频帧Fm,每一音频帧包含N个音频信号样本;
C)、计算哈明窗函数:
D)、对每一音频帧Fm加哈明窗:
第二步:特征提取
音频帧上的特征提取包括能量,过零率和基音频率(Pitch)的提取。
1、能量的提取:
2、能量阈值的计算
这里需要计算能量阈值进行随后的静音检测。用固定的能量阈值来检测静音有很大的局限性,因为各种环境下的音频能量相差很大,但语音和静音之间能量大小的相对关系是不变的,所以可以计算自适应阈值:
Threshold(E)=min(E)+0.3×[mean(E)-min(E)]
其中,Threshold(E)是自适应能量阈值,min(E)是各帧能量的最小值,mean(E)是各帧能量的平均值。
3、Pitch的提取:
A)、设置基音频率的搜索范围ffloor=50,fceiling=1250(Hz);
B)、设置语音的基音频率的取值范围fmin=50,fmax=550(Hz);
C)、做快速傅立叶变换FFT,将时域信号s(n)变成频域信号X(k)。
D)、计算每个频率的SHR(分谐波-谐波比例)
SHR=SS/SH
其中 N=fceiling/f
E)、找出SHR最高的频率f1
F)、如果f1>fmax或者f1的SS-SH<0,那么认为是非语音或静音帧,基音频率为0,Pitch=0
G)、在[1.9375f1,2.0625f1]的区间寻找SHR的局部极大的频率f2
H)、如果f2>fmax,或者f2的SHR>0.2,Pitch=f1
I)、其他情况,Pitch=f2
J)、对得到的基音频率进行自相关效验:
从帧的中点开始,前后各取1/pitch长的采样点,计算它们的自相关值C,如果C<0.2那么认为基音频率值不可靠,Pitch=0。
K)、最后对全部的Pitch值进行中值平滑滤波。
第三步、语音检测
在提取基音频率时已经进行过语音判断,所以只需要将连续的基音频率不为0的帧归为语音段,连续的基音频率为0的帧归为非语音段即可。
第四步、静音检测
1、静音预检
A)、语音段和非语音段的能量定义如下:
E=mean(E)+0.3×[max(E)-mean(E)]
其中,E是静音段的能量,mean(E)是段内各帧能量的平均值,max(E)是段内各帧能量的最大值。
B)、段能量与能量阈值比较,如果低于阈值则视为静音。
2、平滑处理
A)、将连续的静音段合并成一段;
B)、低于10帧(0.1秒)的静音段被视为连续语音间的短时停顿而舍去。
第五步、说话人改变检测
每一说话人的语音特征在特征空间中都形成了特定的分布,可以用这一分布来描述说话人的个性。不同说话人的分布也不同,所以可以用特征分布之间的相似度来检测说话人的改变。在这里我们用T2距离来计算每个语音段之间的Pitch特征距离。
1、T2距离计算
为了检测说话人改变,需要计算每两个相邻的语音段之间的T2距离。T2距离定义如下:
其中a,b是段的长度,μ1,μ2是各段内Pitch的平均值,Σ是共同的协方差矩阵。
2、自适应阈值计算
通过比较T2距离与阈值,可以检测是否存在说话人改变。自适应阈值的计算公式如下:
T=μ+λσ
其中μ是全局平均距离,σ是距离方差,λ是惩罚系数,这里设成-1.5。
3、合并
如果两个语音段之间的距离小于阈值,那么这两个语音段被视为属于同一个说话人,可以将这两个语音段合并成一个。如果这两个语音段之间存在静音,那么这段静音也将被合并进来。如果两个语音段之间存在非静音,则不合并。这是为了防止噪音的干扰。
实验结果
本系统在1997 Mandarin Broadcast News Speech Corpus(Hub4-NE)新闻广播语音上进行了实验。这个语音库包括CCTV,KAZN和VOA的新闻广播,总时间40个小时左右,其中约10小时的内容是音乐或噪音。
我们同时在这个库上用基于贝叶斯信息准则的分割方法和基于KL2距离的分割方法进行了同样的实验,用于和本系统进行对比。这两种方法都是直接用说话人特征MFCC在固定的窗长(1秒)之间搜索说话人改变。
基于贝叶斯信息准则的方法比较两个假设的参数估计的似然度和参数使用数。假设1;两个窗属于同一个说话人,特征服从同一个高斯分布;假设2:两个窗属于不同的说话人,特征分别服从两个高斯分布。如果假设2的贝叶斯值(似然度减去惩罚项参数个数)较高,则认为有说话人改变。
KL2距离是用于说话人分割的方法。通过计算两段语音的说话人特征之间的KL2距离并与阈值比较,以检测存在说话人改变。
我们对分割算法的结果进行五方面的评估:
1)分割点误检率;错误的分割点占检测出分割点的比例
2)分割点漏检率:未检测出的分割点占实际分割点的比例
3)纯语音比例:检测纯语音段总长度占实际语音总长度的比例
4)语音段召回率:被检测出的实际语音段比例
5)检索等错误率:说话人检索实验中错误拒绝率与错误接收率相等时的值
纯语音段的定义是只包含一个说话人语音的语音段。包含噪音或者多个说话人语音的语音段是不纯语音段。纯语音比例是纯语音段总长度占全部语音长度的比例。语音段召回率是指被检测出有对应纯语音段的语音段比例。这两个指标可以更好的衡量分割效果对说话人检索的作用,是误检率和漏检率的补充。检索等错误率是在分割的结果基础上做说话人检索实验的等错误率。这个指标用来衡量分割算法的最终效果。
实验结果如下:
算法 | 误检率 | 漏检率 | 纯语音比例 | 召回率 | 检索等错误率 |
BIC | 25.87% | 13.37% | 72.39% | 85.42% | 15.91% |
KL2 | 25.50% | 14.42% | 71.69% | 83.72% | 25.84% |
本方法 | 27.90% | 3.62% | 91.97% | 99.08% | 10.43% |
各方法运行时间如下:
算法 | 处理时间(秒) | 速度(分钟音频/秒) |
BIC | 2190 | 1.08 |
KL2 | 1331 | 1.78 |
本方法 | 545 | 4.35 |
实验用机器配置CPU为AMD Athlon(tm)XP2500+,内存为512M ddr400。
实验结果表明,与当前流行的KL2和BIC方法相比,本分割算法在检索性能和运算速度上均有绝对优势。在误检率比KL2和BIC方法低2%的情形下:本分割算法漏检率比KL2方法低9.75%、比BIC方法低10.8%;本分割算法召回率比KL2方法高20.28%、比BIC方法高19.62%;本分割算法纯语音比例比KL2方法高5.36%、比BIC方法高3.66%;本分割算法检索等错误率比KL2方法低15.41%、比BIC方法低5.48%。而且本算法运行速度最快,处理同样音频所耗时间为KL2方法的41%,为BIC方法的28%。