双麦克风语音增强之ANF 自适应零点形成

来源:互联网 发布:淘宝手游充值代理 编辑:程序博客网 时间:2024/04/27 20:00

概述

  ANF(Adaptive Null-Forming,自适应零点形成)是双麦克风阵列处理中实现语音增强的一种方法。ANF算法适用的场景是目标信号来自于端射(endfire)方向,比如通话时的蓝牙耳机,说话人嘴的位置大致在两个麦克风连线的延长线上。ANF算法可以定向拾取端射方向的目标信号,并且自适应地在噪声来源方向形成零点,从而提高语音质量。
  符号表示:d表示两个Mic之间的距离,c表示声速,θ是声源入射角,f表示语音的采样率。

原理

时域ANF

  最简单的一种beamformer只包括图1的左上角部分,即x(n)为输出。响应可表示为1exp(j2πdf(1+cosθ)/c),波束图型(beam pattern)为图2中的实线,称为心形线(cardioid)。这种固定beamformer在0°形成最大增益,在180°形成零点,无法消除来自零点以外方向的噪声。


picture
图1

  图1是TD-ANF(TD:Time-Domain)的结构,包括两个差分beamformer和一个自适应滤波器。上下两个差分beamformer的pattern分别为图2中的实线和虚线。可见,x(n)主要包含目标语音,可以作为自适应滤波器的期望信号,y(n)主要包含0°之外的噪声,可以作为自适应滤波器的输入参考噪声。LMS自适应滤波的原理我在第一篇关于主动降噪的博文中已详述,在此不再多言。需要注意的是自适应滤波器的系数只在没有语音的情况下才更新,因此上述结构还需配合VAD(Voice Activity Detector)使用。


picture
图2

频域ANF

  频域ANF是时域ANF算法在频域的等价实现,如图3所示。其中FFT是N点,k=0~N-1表示频点索引,v(k)=2*pi*k*f/N/c是波数。需要注意的是频域自适应滤波器系数是复数。


picture
图3

  时域ANF包含延时d/c的模块,如果d/c不对应整数采样点,可能需要升采样来凑整。而频域ANF中延时模块变为复乘模块,避免了升采样。但频域ANF增加了FFT和IFFT的计算开销。

EQ补偿

  ANF结构中的两个差分beamformer都是高通滤波器,使得处理后的语音低频部分被削弱。为增强语音低频部分,建议在ANF之后加上一个补偿滤波器。文献给出其频响如下
 

WEQ={1sin(π2wwc),1,0<wwcotherwise

其中wc为高通滤波器的截止频率,wc=0.5πc/d.

Matlab验证

  模拟蓝牙耳机的场景,取3cm麦克风间距,用采集板采集前后两个mic的语音数据,使用频域ANF+补偿滤波器,matlab仿真情况如图4。


picture
图4

Reference

  主要参照如下资料,其中图1和图3来自[1],图2来自[2]。

[1]: Hu, X., et al. “Robustness analysis of time-domain and frequency-domain adaptive null-forming schemes.” Communications and Signal Processing IEEE, 2011:1-4.
[2]: Elko, G. W., and A. T. N. Pong. “A simple adaptive first-order differential microphone.” Applications of Signal Processing to Audio and Acoustics, 1995. IEEE ASSP Workshop on IEEE, 2002:169-172.
[3]: Buck, Markus, and M. Rößler. “First order differential microphone arrays for automotive applications.” Proc Iwaenc (2001).