webrtc语音增强处理算法综述

    作为实时音视频通信框架的webrtc,里面有着丰富的语音处理算法,其中主要涉及到AEC(声学回声抑制),NS(噪音抑制),AGC(自增益控制),VAD(语活检测)和CNG(舒适噪声)等。语音处理数据分为近端和远端,近端数据是采集到的音频数据,远端数据为接受到并播放的数据,一般算法都是以远端数据为参考,对近端数据,处理数据为pcm数据,支持8k、16k、32k和48k采样。webrtc语音处理算法大致顺序示意图如下:

                webrtc语音增强处理算法综述_第1张图片

    图中实线标书数据处理,虚线表示引用,下面对每个算法思想做一些简单的介绍。

    先来看看回声消除。播放的远端语音,通过直接传输或者反射被mic采集成为近端声音一部分,这部分信号叫echo(回声),所以从echo形成的原理来看,echo应该是近端采集信号中与远端信号相关的信号,也就是远端信号延时(时移)和衰减(权重)组合。AEC(Acoustic Echo Chancellor)亦即声学回声消除,其基本思想就是利用自适应滤波对设备回声系统进行辨识,也就是找出刚才说的时移和权重信息,当系统稳定了,就可以通过远端通过加权组合得到echo,然后近端信号减去echo即为需要的近端语音信号。webrtc中采用的是基于分段频域NLMS(归一化最小均方)自适应滤波算法,可参考论文Partioned block frequeney domain adaptive filter(PBFDAF)。详细可参考博客语音自适应回声消除(AEC)算法。我理解,aec应该需要一个DTD(Double Talk Detect),在没有近端语音的时候,也就是此时mic采集到的信号是回声(可能有噪声),这时候自适应滤波的理想信号就是近端信号,可以对自适应滤波器机型参数更新;当没有远端语音的时候,不做处理;当近端和远端都有语音的时候,利用系数进行滤波。但是在我分析webrtc aec的源码时,并没有看到DTD相关源码,不知道是不是我理解有误(望博友指教)。webrtc自适应滤波结束后,还进行了NLP(非线性处理)滤波,将残余echo消除(这部分代码也不是很明确,大概是将比较弱的信号剔除)。

    刚才说到了DTD,双端语音检测,我们顺便来看webrtc VAD(Voice Activity Detect)。语活检测就是检测信号中是否有语音存在。webrtc用的是混合高斯模型对语音和噪声进行建模,通过模型计算出语音和噪声的概率,然后通过似然比来对是否有语音进行判断。VAD检测用的是能量信息,将信号4khz以下部分分成六个子带,并计算能量,对每一个子带能量进行建模。每个模型中分为语音和噪声模型,分别由两个高斯分布组成,所以一共有24高斯分布(24组均值和方差),对每个模型参数具有初始化值。计算中,分为局部和全局似然比,如果某一个子带似然比大于阈值,就认为有语音,或者似然比之和大于阈值也认为有语音。模型更新采用的是梯度下降法。更详细可参考WebRTC之VAD算法和高斯混合模型(GMM model)以及梯度下降法(gradient descent)更新参数。

    现在我们来看看webrtc的NS(Noise Suppression),也就是降噪。降噪就是从给定的观察到数据里面,估计出噪声,然后将噪声部分剔除。这有点像两种墨水混合在一起,要分开他们的意思,难度比较大,既然要分开他们,必须有可区分特征可用才能区分,webrtc用的区分特征是似然比、频谱平坦度和频谱模板差异度,通过映射函数将特征转换成概率模型。因为信号短时平稳,假设语音和噪声都符合高斯分布,对信号进行分位数初始噪声估计(这一块算法不是很清楚),然后可以得到后验信噪比,通过DD决策,得到先验信噪比,将以上信息组合,利用贝叶斯方程,可以计算出语音和噪声的后验概率,然后利用后验对噪声进行更新,这样估计出噪声,再用维纳滤波器将噪声去除。不管是VAD还是NS都有对噪声的初始假设,也就是是噪声的先验概率,所以算法性能受限于此(VAD是固定初始化,NS是分位数估计初始化,不知道理解正确不,忘博友指正)。详细可参考WebRTC之noise suppression算法。

    最后我们看看AGC和CNG。AGC(Automatic Gain Control)就是对信号的幅度自动增益控制,根据信号的快慢包络,得到对应的增益,然后对信号进行增益处理。由于人耳对不同频率增益敏感度不一样,在处理的时候需要基于等响曲线的非线性增益表来获得不同频点的增益。CNG(Comfortable Noise Generate)舒适噪声生成,这个主要用在通信没有声音的时候,产生一个舒适噪声,既可以降低带宽,有不能让对方感觉已经断线,平时微信语音对方不说话的时候里面听到的斯斯生就是舒适噪声,舒适噪声生成算法可参考博客舒适噪声生成算法及其实现。

你可能感兴趣的:(webrtc语音增强处理算法综述)