麦克风阵列算法笔记之二(固定波束形成)
麦克风阵列算法有两大类,一类是波束形成算法,另一类是盲源分离算法,两者互有优劣,先记录波束形成算法的笔记。系列博客先介绍两种常见麦克风阵列结构,然后分别介绍固定波束形成(fixed beamforming, data-independent) 和自适应波束形成(adaptive beamforming, data-dependent)。
1. 波束形成的优缺点(Pros & Cons)
优点
- 波束形成的优点是可以利用空间信息做空间滤波(Spatial filtering)。
以单麦克风降噪为例。单麦克风接收到的信号,无法分辨来波方向。对于噪声的抑制主要抑制平稳噪声。因为语音信号是非平稳的,如何准确区分非平稳的噪声和语音比较困难。麦克风阵列至少有两颗麦克风,能够一定程度的区分来波方向。对于非期望方向的干扰语音或者其他非平稳噪声可以线性地衰减。
缺点
- 波束形成算法的性能依赖目标信号的VAD信息。
以GSC结构为例,MC的自适应噪声消除,其滤波系数更新依赖于这个VAD信息。只有当目标信号(有效语音)不存在时,才需要更新滤波器系数。否则会将有效语音消除掉。 - 波束形成算法的性能依赖目标信号的DOA信息。
恶劣的声场环境,强噪声和长混响都会影响DOA算法的准确性。准确的DOA算法运算量很大。 - 如果目标信号和干扰信号在同一个波束内,是无法消除的。
目标信号和干扰信号在同一个波束内,波束形成是无法分辨出它们的,空间滤波无法进行,自然无法消除。 - 长混响条件下,波束形成性能会下降。
长混响,比如 T 60 = 300 m s T_{60}=300ms T60=300ms,目标信号和干扰信号会相互泄露到对方的波束,空间滤波性能下降。原因同上。
2. 麦克风的指向性(Directivity pattern of a microphone)
这里说的是麦克风的指向性,后面将要说的麦克风阵列的指向性,需要区分开。
- 麦克风的指向性是由麦克风的物理特性决定的,它描述了麦克风对特定来波方向的信号增益和相位移动。类似于时不变系统对信号的幅频响应和相频响应。
- 来波方向应该是一个三维的,有水平角(elevation angle)和俯仰角(azimuth angle)。为了简化问题,先只考虑二维的场景。
- 麦克风的指向性就可以用
H
(
ω
,
θ
)
H(\omega, \theta)
H(ω,θ) 表示,其中
ω
\omega
ω表示频率,
θ
\theta
θ表示角度。如下图所示,为某一特定频率
ω
0
\omega_0
ω0的麦克风指向性
H
(
ω
0
,
θ
)
H(\omega_0, \theta)
H(ω0,θ)
3. 信号模型和定义
3.1 远场信号
麦克风接收到的信号响应,由两部分响应组成。一部分是麦克风的指向性,一部分是由麦克风位置决定的相位。
Y
m
(
ω
,
θ
)
=
H
m
(
ω
,
θ
)
∗
e
x
p
(
−
j
ω
τ
m
(
θ
)
)
∗
S
(
ω
)
Y_m(\omega, \theta) = H_m(\omega, \theta) * exp(-j \omega\tau_m(\theta)) * S(\omega)
Ym(ω,θ)=Hm(ω,θ)∗exp(−jωτm(θ))∗S(ω)
其中
H
m
H_m
Hm是麦克风的指向性,
τ
m
\tau_m
τm是与麦克风位置相关的延迟,
S
(
ω
)
S(\omega)
S(ω)是原信号。
3.2 导向矢量 (steer vector)
麦克风阵列接收到的信号,需要将上述信号(
m
=
1
,
2...
M
m=1,2...M
m=1,2...M)用向量形式来表达。
Y
(
ω
,
θ
)
=
d
(
ω
,
θ
)
∗
S
(
ω
)
Y(\omega,\theta) = d(\omega,\theta)*S(\omega)
Y(ω,θ)=d(ω,θ)∗S(ω)
d
(
ω
,
θ
)
=
[
H
1
(
ω
,
θ
)
e
x
p
(
−
j
ω
τ
1
(
θ
)
)
.
.
.
H
M
(
ω
,
θ
)
e
x
p
(
−
j
ω
τ
M
(
θ
)
)
]
d(\omega,\theta) = [H_1(\omega,\theta)exp(-j\omega\tau_1(\theta))...H_M(\omega,\theta)exp(-j\omega\tau_M(\theta))]
d(ω,θ)=[H1(ω,θ)exp(−jωτ1(θ))...HM(ω,θ)exp(−jωτM(θ))]
其中
d
d
d是导向矢量(steering vector),是由麦克风指向性和麦克风位置决定的。
如果所有的麦克风拥有同样的指向性,
H
0
(
ω
,
θ
)
H_0(\omega, \theta)
H0(ω,θ),则导向矢量可以提取公因式。如果使用的是全指向性麦克风,则有
H
0
(
ω
,
θ
)
=
1
H_0(\omega, \theta)=1
H0(ω,θ)=1,导向矢量只由麦克风的位置决定。
d
(
ω
,
θ
)
=
H
0
(
ω
,
θ
)
[
1
,
e
x
p
(
−
j
ω
τ
2
(
θ
)
)
,
.
.
.
,
e
x
p
(
−
j
ω
τ
M
(
θ
)
)
]
d(\omega,\theta) = H_0(\omega, \theta)[1, exp(-j\omega\tau_2(\theta)),...,exp(-j\omega\tau_M(\theta))]
d(ω,θ)=H0(ω,θ)[1,exp(−jωτ2(θ)),...,exp(−jωτM(θ))]
对于 n n n个麦克风的线性阵列,导向矢量维度为 n ∗ f f t b i n s ∗ n d e g r e e n*fftbins*ndegree n∗fftbins∗ndegree的复数矩阵,导向矢量计算的python代码如下,输入角度phi单位是rads,需要转换。
def linear_steer_vector(phi, freq, mic_num = 2, mic_dist = 0.03):
vsound = 340
mic_loc = np.linspace(0, (mic_num-1)*mic_dist, mic_num)
delay = mic_loc * np.cos(phi) /vsound
steer_vector = np.exp(-1j * 2 * np.pi * freq * delay)
return steer_vector
3.3 波束方向图 (beam pattern/directivity pattern)
-
麦克风阵列的输出信号,经过滤波相加(filter-and-sum)之后得到输出,其中 F ( ω ) F(\omega) F(ω)是滤波器系数。 滤波器系数有事先约定好的期望角度,所以系数和角度无关,只和频率有关。维度是
Z ( ω , θ ) = F H ( ω ) Y ( ω , θ ) = F H ( ω ) d ( ω , θ ) S ( ω ) Z(\omega, \theta) = F^H(\omega) Y(\omega,\theta) = {F^H(\omega)d(\omega,\theta)}S(\omega) Z(ω,θ)=FH(ω)Y(ω,θ)=FH(ω)d(ω,θ)S(ω) -
阵列传递函数,英文可以是directivity pattern,也可以是transfer function。
H ( ω , θ ) = Z ( ω , θ ) / S ( ω ) = F H ( ω ) d ( ω , θ ) H(\omega, \theta) = Z(\omega, \theta)/S(\omega) = F^H(\omega)d(\omega,\theta) H(ω,θ)=Z(ω,θ)/S(ω)=FH(ω)d(ω,θ)
下图是四颗麦克风,期望角度是0°,分别使用broadside和endfire的beampattern。
4. 评价指标
麦克风阵列的性能主要用白噪声增益和指向性来评价。
白噪声增益用来评价阵列在白噪声场景下的抑制能力,后者用来评价阵列在扩散场噪声下的阵列增益。其本质都是阵列增益,可以理解为输出信噪比除以输入信噪比,也可以表示为信号的传递函数
∣
∣
2
||^2
∣∣2除以噪声的传递函数
∣
∣
2
||^2
∣∣2。在表示噪声的输出函数之前,先引入噪声的相关矩阵和相干矩阵的概念,即noise correlation matrix 和 noise coherence matrix。
4.1 噪声相关矩阵 noise correlation matrix
噪声相关矩阵定义为
Φ
n
o
i
s
e
(
ω
)
=
E
{
N
(
ω
)
N
(
ω
)
H
}
\Phi_{noise}(\omega) = E\{N(\omega)N(\omega)^H\}
Φnoise(ω)=E{N(ω)N(ω)H}
假设噪声场是均匀的,主对角线上的元素都相同,即自相关为常数。
ϕ
i
i
(
ω
)
=
ϕ
n
o
i
s
e
(
ω
)
\phi_{ii}(\omega) = \phi_{noise}(\omega)
ϕii(ω)=ϕnoise(ω)
相干矩阵为相关矩阵除以对角线元素
Γ
n
o
i
s
e
(
ω
)
=
1
ϕ
n
o
i
s
e
(
ω
)
Φ
n
o
i
s
e
(
ω
)
\Gamma_{noise}(\omega) = \frac{1}{\phi_{noise}(\omega)}\Phi_{noise}(\omega)
Γnoise(ω)=ϕnoise(ω)1Φnoise(ω)
4.2 噪声相干矩阵 noise coherence matrix
白噪声的相干矩阵为单位阵
Γ
n
o
i
s
e
w
h
i
t
e
(
ω
)
=
I
(
ω
)
\Gamma^{white}_{noise}(\omega) = I(\omega)
Γnoisewhite(ω)=I(ω)
扩散噪声的相干矩阵对角线上为1,而反对角线上是sinc函数。可以用以下公式来表示
Γ
n
o
i
s
e
d
i
f
f
u
s
e
(
ω
)
=
s
i
n
c
(
ω
f
s
d
/
c
)
\Gamma^{diffuse}_{noise}(\omega) = sinc(\omega f_s d/c)
Γnoisediffuse(ω)=sinc(ωfsd/c)
4.3 白噪声增益 white noise gain
阵列增益,用来评估在某个角度上的信噪比提升:
G
(
ω
,
θ
)
=
S
N
R
o
u
t
S
N
R
i
n
=
∣
F
H
(
ω
)
d
(
ω
,
θ
)
∣
2
F
H
(
ω
)
Γ
n
o
i
s
e
(
ω
)
F
(
ω
)
G(\omega,\theta)=\frac{SNR_{out}}{SNR_{in}}=\frac{|F^H(\omega)d(\omega,\theta)|^2}{F^H(\omega)\Gamma_{noise}(\omega) F(\omega)}
G(ω,θ)=SNRinSNRout=FH(ω)Γnoise(ω)F(ω)∣FH(ω)d(ω,θ)∣2
根据噪声相干矩阵的不同分为白噪声增益和指向性两个指标。
白噪声增益的相干矩阵是单位阵,即
Γ
n
o
i
s
e
w
h
i
t
e
(
ω
)
=
I
(
ω
)
\Gamma^{white}_{noise}(\omega) = I(\omega)
Γnoisewhite(ω)=I(ω),因为白噪声主要来源于传感器的噪声,白噪声增益主要用来评估beamformer的稳定性。
W
N
G
(
ω
,
θ
)
=
∣
F
H
(
ω
)
d
(
ω
,
θ
)
∣
2
F
H
(
ω
)
F
(
ω
)
WNG(\omega,\theta)=\frac{|F^H(\omega)d(\omega,\theta)|^2}{F^H(\omega) F(\omega)}
WNG(ω,θ)=FH(ω)F(ω)∣FH(ω)d(ω,θ)∣2
举例:四颗麦克风,使用DSB时,无论是broadside还是endfire,白噪声增益都是6dB。
4.4 指向性 array directivity index
对于扩散场噪声而言,记为
Γ
n
o
i
s
e
d
i
f
f
u
s
e
(
ω
)
=
s
i
n
c
(
ω
∗
d
/
c
)
\Gamma^{diffuse}_{noise}(\omega) = sinc(\omega*d/c)
Γnoisediffuse(ω)=sinc(ω∗d/c)
D
I
(
ω
,
θ
)
=
∣
F
H
(
ω
)
d
(
ω
,
θ
)
∣
2
F
H
(
ω
)
Γ
n
o
i
s
e
d
i
f
f
u
s
e
(
ω
)
F
(
ω
)
DI(\omega,\theta)=\frac{|F^H(\omega)d(\omega,\theta)|^2}{F^H(\omega)\Gamma^{diffuse}_{noise}(\omega) F(\omega)}
DI(ω,θ)=FH(ω)Γnoisediffuse(ω)F(ω)∣FH(ω)d(ω,θ)∣2
举例:四颗麦克风,使用DSB,整体来说两种阵列结构的指向性都不好。尤其是低频部分,几乎没有指向性。
5. 固定波束形成设计
基于以上阵列的基础知识以及评价指标,固定波束形成的基本设计思路是在保证期望方向无失真的前提下,最大化白噪声增益或者最大化指向性,即首先保证
∣
F
H
(
ω
)
d
(
ω
,
ϕ
)
∣
=
1
|F^H(\omega)d(\omega,\phi)|=1
∣FH(ω)d(ω,ϕ)∣=1
5.1 最大化白噪声增益
最大化白噪声增益,即求出一组
F
(
ω
)
F(\omega)
F(ω)参数,使得白噪声增益最大。
F
(
ω
)
=
a
r
g
{
m
a
x
W
N
G
(
ω
,
θ
)
}
=
a
r
g
{
m
a
x
∣
F
H
(
ω
)
d
(
ω
,
θ
)
∣
2
F
H
(
ω
)
F
(
ω
)
}
F(\omega) = arg\{maxWNG(\omega, \theta)\} = arg\{max\frac{|F^H(\omega)d(\omega,\theta)|^2}{F^H(\omega) F(\omega)}\}
F(ω)=arg{maxWNG(ω,θ)}=arg{maxFH(ω)F(ω)∣FH(ω)d(ω,θ)∣2}
对于上式,有一个限制条件,
∣
F
H
(
ω
)
d
(
ω
,
ϕ
)
∣
=
1
|F^H(\omega)d(\omega,\phi)|=1
∣FH(ω)d(ω,ϕ)∣=1,即对期望方向
ϕ
\phi
ϕ的信号增益是0dB。这样最大化问题就转变为最小化噪声输出功率的问题。
F
(
ω
)
=
a
r
g
{
m
i
n
F
H
(
ω
)
F
(
ω
)
}
,
s
.
t
.
∣
F
H
(
ω
)
d
(
ω
,
ϕ
)
∣
=
1
F(\omega) = arg\{min{F^H(\omega) F(\omega)}\}, s.t. |F^H(\omega)d(\omega,\phi)|=1
F(ω)=arg{minFH(ω)F(ω)},s.t.∣FH(ω)d(ω,ϕ)∣=1
得到最优解为
F
(
ω
)
=
d
(
ω
,
ϕ
)
∣
d
(
ω
,
ϕ
)
∣
2
=
d
(
ω
,
ϕ
)
M
F(\omega) = \frac{d(\omega,\phi) }{|d(\omega,\phi)|^2}=\frac{d(\omega,\phi)}{M}
F(ω)=∣d(ω,ϕ)∣2d(ω,ϕ)=Md(ω,ϕ)
白噪声增益为
W
N
G
(
ω
,
θ
=
ϕ
)
=
∣
F
H
(
ω
)
d
(
ω
,
θ
)
∣
2
F
H
(
ω
)
F
(
ω
)
=
M
WNG(\omega,\theta=\phi)=\frac{|F^H(\omega)d(\omega,\theta)|^2}{F^H(\omega) F(\omega)}=M
WNG(ω,θ=ϕ)=FH(ω)F(ω)∣FH(ω)d(ω,θ)∣2=M
Delay&Sum
如下图,对于理想的全指向麦克风阵列,delay & sum 波束形成在所有频点上都具有M的白噪声增益。即获得了最大的白噪声增益,但是指向性很一般。
5.2 最大化指向性
h R S D ( k ) = Γ ( k ) − 1 d ( k ) d H ( k ) Γ ( k ) − 1 d ( k ) h_{RSD}(k)=\frac{\Gamma(k)^{-1}d(k)}{d^H(k)\Gamma(k)^{-1}d(k)} hRSD(k)=dH(k)Γ(k)−1d(k)Γ(k)−1d(k)
Super Directive
如下图,SD能获得非常好的指向性,最大的指向系数为
N
2
N^2
N2,即12db。但白噪声增益很差,在低频下,白噪声增益甚至是负无穷大。
5.3 提高稳定性
为了提高超指向的白噪声增益的下限,获得更为稳定的解,可以在设计时增加一个约束条件
1
h
H
h
⩾
c
o
n
s
t
(
k
)
\frac{1}{h^Hh}\geqslant const(k)
hHh1⩾const(k)
这是一个非凸优化问题,解具有以下形式,可以在噪声协方差矩阵对角线上增加一个小的常数。
h
R
S
D
(
k
)
=
[
Γ
(
k
)
+
c
(
k
)
I
]
−
1
d
(
k
)
d
H
(
k
)
[
Γ
(
k
)
+
c
(
k
)
I
]
−
1
d
(
k
)
h_{RSD}(k)=\frac{[\Gamma(k)+c(k)I]^{-1}d(k)}{d^H(k)[\Gamma(k)+c(k)I]^{-1}d(k)}
hRSD(k)=dH(k)[Γ(k)+c(k)I]−1d(k)[Γ(k)+c(k)I]−1d(k)
对角加载
经过对角加载之后可以看到低频部分的白噪声增益得到了明显提高,从负无穷提高到-15dB以上。而低频的指向性影响在-2dB左右。