今天终于攻破ADPCM解码为线性PCM,并生成wav文件,纠结了好几天终于搞定了。要提取语音的MFCC,那么网络传输过来的语音是有语音的时候才会发送,没有时就处于静默状态,那么对于传统机器学习来说,提取MFCC是需要有固定维度的,笔者使用MFCC均值来作为特征。
那么接下来就是一点小问题了。如果两段语音中间有静默期,而且两端语音其实没有强烈的逻辑性,就相当于你说一句话之后将这段话分成两段然后交换位置,那么对于接收者来说其实可以判断原始的话和交换位置的话其实是不同的,但是听完之后可能会联想也判定为同样的话。
对于机器学习来说,这两段话是否属于同一个语音呢?如果是计算MFCC进行语音信号处理时,为减少语音信号整体的非稳态、时变的影响,从而对语音信号进行分段处理,其中每一段称为一帧,帧长一般取 25ms。为了使帧与帧之间平滑过渡,保持其连续性,分帧一般采用交叠分段的方法,保证相邻两帧相互重叠一部分。对于计算MFCC均值是否存在不同呢?于是笔者使用一段3秒的语音来做测试。
1、librosa库载入语音
2、MFCCs特征提取,笔者这里提取16个特征
3、MFCC均值的方差
4、在原始语音上切割交换3秒语音, 3*8000=24000
5、比较两者的均值和方差,得到结论,语音交换后MFCC特征变化很小,可以认为是同一段语音。
于是在后期的语音特征提取中,就可以在不用根据静默期来分段语音,而是直接把语音直接送送到array中,然后按固定时间长或者数据点数来取就可以了。
网友评论