AEC传统算法学习

回声消除

回声信号y(n):是扬声器播放的信号x(n)又被麦克风采集到的信号,x(n)经过了房间混响,扬声器的播放,麦克风采集之后会包含线性部分y’(n) 和非线性部分y‘’(n), y(n) = y’(n) + y’’(n)

**近端麦克风采集的信号d(n) **:y(n)=s(n) + y(n)+v(n), s(n) 为近端说话人语音信号,也是真正要获得的信号,y(n) 为回声信号,v(n) 为噪声信号;

回声消除的几种场景: 单讲(只有远端信号,没有近端信号),双讲(近端和远端同时有信号)

回声消除的目的:得到近端说话人信号;

AEC传统算法学习_第1张图片

回声消除的步骤

传统算法:延迟估计,线性回声消除,非线性回声消除

在webrtc中的步骤:window FFT -> delay estimation -> vad & double talk detection-> nlms -> wiener -> CNG (Comfort Noise Generator) -> ifft window

AEC传统算法学习_第2张图片

ps:WebRTC 有两个回声消除模块AEC (Acoustic Echo Canceller) 和 AECM (Acoustic Echo Canceller Mobile)。AEC是在电脑端使用的回声消除器,而AECM是在移动端使用。由于电脑与移动设备的差别比较明显,在处理速度上,编解码器的性能上和内存方面都有着较大的差异。

延迟估计

延迟有三类:farend Playout delay + echo path delay + capture delay, 其中playout和capture可以被提供,算法主要估计echo path delay。

常用的方法是基于相关的时延估计算法,在aecm中为了减少运算量,使用的是Bastiaan算法:

分别求远端信号和近端采集信号的二值谱[(0,0), (0,1), (1,0), (1,1)],并根据二值谱的相似程度(XOR后1的个数)进行匹配。

双讲检测

双讲模式时,应该减慢甚至停止系数的更新。现有的双讲检测(Double-Talk Detection,DTD)算法有能量比较法、相关比较法和基于概率统计的方法等。能量比较法基于双讲时d(n)能量显著高于单讲x(n)的假设,相关比较法基于双讲时d(n)与x(n)相关性低于单讲的假设,但是在噪声和回响的环境下上述两假设会失效,导致双讲检测性能下降。

自适应滤波

一般使用FIR滤波器,常用NLMS算法,远端信号为x(n),近段信号为d(n),W(n) 为滤波器参数,则误差信号:

e(n)=d(n)-w’(n)x(n) (此处‘表示转秩)

LMS 算法的步长是固定的,NLMS对滤波器的系数更新使用变步长方法,即步长u=u0/(gamma+x’(n)x(n));其中u0为更新步长因子,gamma是稳定因子,则滤波器系数更新方程为 W(n+1)=W(n)+ue(n)x(n);NLMS比传统LMS算法复杂度略高,但收敛速度明显加快。自适应FIR滤波器,估计参数w:
AEC传统算法学习_第3张图片
自适应滤波器算法的目标误差e:
file
webrtc 中使用分段块频域自适应滤波算法(PBFDAF)simonhaykin 的《自适应滤波器原理》

ps:(数字滤波器按结构可划分为输入不仅与过去和当前的输入有关、还与过去的输出有关的无限冲激响应滤波器(IIR),以及输出与有限个过去和当前的输入有关的有限冲激响应滤波器(FIR)

双滤波器结构(two-path method):

speex 中采用这种结构,不需要显式的双讲检测

包含: 迭代更新的自适应background filter 和 非自适应的foreground filter

当自适应的background filter 发散时,使用非自适应的foreground filter重置background filter,当自适应的background filter变好时,foreground filter 使用background 参数。
AEC传统算法学习_第4张图片
主要是如何判断foreground 是否要使用background 更新参数,只有非双讲情况下更新foreground filter(可能出现的情况:当远端信号很小,假定不会产生回声,不需要更新;当麦克风采集的信号很小,假定近端和远端语音都没有,不需要更新;background filter 的误差比foreground filter 的误差小;background filter ERLE 大于阈值;双讲可能性,非双讲情况下更新foreground filter)

非线性滤波

非线性滤波主要需要平衡残余回声的消除和近端语音的失真。

一般利用自适应滤波器处理后的残留回声与远端参考信号的相关性,判断远近端状态,再根据帧的类型进一步消除残留回声,相关性越大,残留回声越多,需要对残留回升消除的程度越大,再调节抑制系数,计算非线性滤波参数。
webrtc 中使用wiener滤波,wiener滤波同样是使用过均方误差最小作为优化目标,但不是迭代求解,传递函数的表达式,设估计的语音信号的功率谱为Ps(w),噪声信号的功率谱为Pn(w),则滤波器的传递函数为H(w)=Ps(w)/(Ps(w)+Pn(w))

CNG(Comfort Noise Generator) 舒适噪声产生

原因: Winer filter抑制回声时,也抑制了噪声,需要补回来。幅度谱根据nearend能量估计,相位谱为均匀分布; 然后算出实部虚部值。

自适应滤波器步长优化:https://www.cnblogs.com/icoolmedia/p/speex_aec_analyze.html
https://blog.csdn.net/u012931018/article/details/17045077
https://xjsxjtu.github.io/2017-07-05/LearningWebRTC-apm_aecm/
https://mp.weixin.qq.com/s?__biz=MzA4MjU1MDk3Ng==&mid=2451528785&idx=1&sn=abce8fbd0f39697a7bebe5563a0114ef&chksm=886ff5febf187ce8a48d2234ca53104b19ff5381a6bf9edbde6c1faefc5af139e4ab16748c1f&scene=27#wechat_redirect
https://www.cnblogs.com/LXP-Never/p/11703440.html

你可能感兴趣的:(语音相关)