1.模型构建
考虑一个M个说话人,N个麦克风的场景。
s
m
[
k
]
(
1
≤
m
≤
M
)
s^{m}[k](1 \leq m \leq M)
sm[k](1≤m≤M):第m个说话人k时刻的信号。
y
n
[
k
]
y^{n}[k]
yn[k]和
v
n
[
k
]
(
1
≤
n
≤
N
)
v^{n}[k](1 \leq n \leq N)
vn[k](1≤n≤N):第n个麦克风k时刻的接收信号和噪声。
则有:
y
[
k
]
=
∑
τ
=
0
J
−
1
H
T
[
τ
]
s
[
k
−
τ
]
+
v
[
k
]
(
1
)
\boldsymbol{y}[k]=\sum_{\tau=0}^{J-1} \boldsymbol{H}^{T}[\tau] \boldsymbol{s}[k-\tau]+\boldsymbol{v}[k]\ \ \ \ \ \ \ \ \ \ (1)
y[k]=τ=0∑J−1HT[τ]s[k−τ]+v[k] (1)
其中
y
[
k
]
=
[
y
1
[
k
]
,
…
,
y
N
[
k
]
]
T
\boldsymbol{y}[k]=\left[y^{1}[k], \ldots, y^{N}[k]\right]^{T}
y[k]=[y1[k],…,yN[k]]T,
s
[
k
]
=
[
s
1
[
k
]
,
…
,
s
M
[
k
]
]
T
\boldsymbol{s}[k]=\left[s^{1}[k], \ldots, s^{M}[k]\right]^{T}
s[k]=[s1[k],…,sM[k]]T,
v
[
k
]
=
[
v
1
[
k
]
,
…
,
v
N
[
k
]
]
T
\boldsymbol{v}[k]=\left[v^{1}[k], \ldots, v^{N}[k]\right]^{T}
v[k]=[v1[k],…,vN[k]]T
H
[
τ
]
\boldsymbol{H}[\tau]
H[τ]为房间的脉冲响应矩阵,J表示响应的阶数。
H
[
τ
]
=
[
h
1
,
1
[
τ
]
⋯
h
N
,
1
[
τ
]
⋮
⋱
⋮
h
1
,
M
[
τ
]
⋯
h
N
,
M
[
τ
]
]
M
×
N
\boldsymbol{H}[\tau]=\left[\begin{array}{ccc} h^{1,1}[\tau] & \cdots & h^{N, 1}[\tau] \\ \vdots & \ddots & \vdots \\ h^{1, M}[\tau] & \cdots & h^{N, M}[\tau] \end{array}\right]_{M\times N}
H[τ]=
h1,1[τ]⋮h1,M[τ]⋯⋱⋯hN,1[τ]⋮hN,M[τ]
M×N
{
h
n
,
m
[
τ
]
}
0
≤
τ
≤
J
−
1
\left\{h^{n, m}[\tau]\right\} 0 \leq \tau \leq J-1
{hn,m[τ]}0≤τ≤J−1为说话人m与麦克风n之间的冲击响应。
式(1)其实就是卷积的矩阵形式。
为了减少滤波器的阶数,原论文中还对
y
[
k
]
\boldsymbol{y}[k]
y[k]进行了子带分解,本文不做考虑。
我们希望能够减少混响响应的长度来对混响效果进行削弱。
将
y
[
k
]
\boldsymbol{y}[k]
y[k]写为:
y
[
k
]
=
∑
τ
=
0
Δ
H
T
[
τ
]
s
[
k
−
τ
]
+
∑
τ
=
Δ
J
−
1
H
T
[
τ
]
s
[
k
−
τ
]
+
v
[
k
]
\boldsymbol{y}[k]=\sum_{\tau=0}^{\Delta} \boldsymbol{H}^{T}[\tau] \boldsymbol{s}[k-\tau]+\sum_{\tau=\Delta}^{J-1} \boldsymbol{H}^{T}[\tau] \boldsymbol{s}[k-\tau]+\boldsymbol{v}[k]
y[k]=τ=0∑ΔHT[τ]s[k−τ]+τ=Δ∑J−1HT[τ]s[k−τ]+v[k]
希望削减混响响应的长度到
Δ
\Delta
Δ,即只保留第一项。
首先采用多通道线性预测技术用
Δ
−
(
J
−
1
)
\Delta -(J-1)
Δ−(J−1)的麦克风接收信号去估计
Δ
−
(
J
−
1
)
\Delta -(J-1)
Δ−(J−1)部分的混响:
y
~
(
k
)
=
∑
τ
=
Δ
Δ
+
K
−
1
G
T
(
τ
)
y
(
k
−
τ
)
\tilde{\boldsymbol{y}}(k)=\sum_{\tau=\Delta}^{\Delta+K-1} G^{T}(\tau) \boldsymbol{y}(k-\tau)
y~(k)=τ=Δ∑Δ+K−1GT(τ)y(k−τ)
其中
{
G
(
τ
)
}
Δ
≤
τ
≤
Δ
+
K
−
1
\left\{G(\tau)\right\}_{\Delta \leq \tau \leq \Delta+K-1}
{G(τ)}Δ≤τ≤Δ+K−1为
N
×
N
N\times N
N×N的预测矩阵,由于实际中混响的效果随着时间逐渐减弱,所以只需要估计长度为K的混响信号。
然后与
y
[
k
]
\boldsymbol{y}[k]
y[k]作差:
x
(
k
)
=
y
(
k
)
−
y
~
(
k
)
(
2
)
\boldsymbol{x}(k)=\boldsymbol{y}(k)-\tilde{\boldsymbol{y}}(k)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (2)
x(k)=y(k)−y~(k) (2)
如果最小化(2),由于
y
~
(
k
)
\tilde{y}(k)
y~(k)只与
y
(
k
)
{y}(k)
y(k)的
Δ
≤
τ
≤
Δ
+
K
−
1
\Delta \leq \tau \leq \Delta+K-1
Δ≤τ≤Δ+K−1的部分相关,所以会对消掉。
理想的预测误差
x
(
k
)
\boldsymbol{x}(k)
x(k)等于
x
(
k
)
=
∑
τ
=
0
Δ
−
1
H
T
(
τ
)
s
(
k
−
τ
)
+
noise
(
3
)
\boldsymbol{x}_{}(k)=\sum_{\tau=0}^{\Delta-1} \boldsymbol{H}^{T}(\tau) \boldsymbol{s}(k-\tau)+\text { noise }\ \ \ \ \ \ \ \ \ \ \ (3)
x(k)=τ=0∑Δ−1HT(τ)s(k−τ)+ noise (3)
2.GWPE损失函数定义
假设我们收集T点的预测误差数据 ( x ( k ) ) k ∈ T \left(\boldsymbol{x}(k)\right)_{k \in {T}} (x(k))k∈T,干净的语音信号在延迟时间大于几十毫秒后,其自相关系数基本为0,但是混响信号在延迟时间较长时自相关系数仍然很大,所以GWPE损失函数就是通过最小化T点麦克风阵列接收信号的相关性来达到去混响的目的。
- GWPE使用Hadamard-Fischer mutual correlation作为损失函数,其定义如下:
C H F ( U 1 , … , U N ) = 1 N ∑ n log ( det E ( U n U n H ) ) − log ( det E ( U U H ) ) C_{H F}\left(\boldsymbol{U}_{1}, \ldots, \boldsymbol{U}_{N}\right)=\frac{1}{N} \sum_{n} \log \left(\operatorname{det} E\left(\boldsymbol{U}_{n} \boldsymbol{U}_{n}^{H}\right)\right)-\log \left(\operatorname{det} E\left(\boldsymbol{U} \boldsymbol{U}^{H}\right)\right) CHF(U1,…,UN)=N1n∑log(detE(UnUnH))−log(detE(UUH))
其中 U 1 , … , U N \boldsymbol{U}_{1}, \ldots, \boldsymbol{U}_{N} U1,…,UN表示复随机变量,当 U 1 , … , U N \boldsymbol{U}_{1}, \ldots, \boldsymbol{U}_{N} U1,…,UN互不相关时:
C H F ( U 1 , … , U N ) = 0 C_{\mathrm{HF}}\left(\boldsymbol{U}_{1}, \ldots, \boldsymbol{U}_{N}\right) = 0 CHF(U1,…,UN)=0
所以我们就可以通过上述损失函数来最小化
(
x
(
k
)
)
k
∈
T
\left(\boldsymbol{x}(k)\right)_{k \in {T}}
(x(k))k∈T的相关性。
令
x
T
=
[
x
T
(
T
)
,
…
,
x
T
(
1
)
]
T
\boldsymbol{x}_{T}=\left[\boldsymbol{x}^{T}(T), \ldots, \boldsymbol{x}^{T}(1)\right]^{T}
xT=[xT(T),…,xT(1)]T损失函数可以写为:
F
(
G
)
=
C
H
F
(
x
(
1
)
,
…
,
x
(
T
)
)
=
1
∣
T
∣
∑
t
∈
T
log
(
det
E
(
x
T
(
t
)
x
T
T
(
t
)
)
)
−
log
(
det
E
(
x
T
x
T
T
)
)
(
4
)
\begin{aligned} F\left(\mathcal{G}\right)=& C_{\mathrm{HF}}\left(\boldsymbol{x}(1), \ldots, \boldsymbol{x}(T)\right) \\ =& \frac{1}{|T|} \sum_{t \in T} \log \left(\operatorname{det} E\left(\boldsymbol{x}_{T}(t) \boldsymbol{x}_{T}^{T}(t)\right)\right) -\log \left(\operatorname{det} E\left(\boldsymbol{x}_{T} \boldsymbol{x}_{T}^{T}\right)\right) \end{aligned}(4)
F(G)==CHF(x(1),…,x(T))∣T∣1t∈T∑log(detE(xT(t)xTT(t)))−log(detE(xTxTT))(4)
其中
G
=
{
G
(
τ
)
}
Δ
≤
τ
≤
Δ
+
K
−
1
\mathcal{G}=\left\{\boldsymbol{G}(\tau)\right\}_{\Delta \leq \tau \leq \Delta+K-1}
G={G(τ)}Δ≤τ≤Δ+K−1.
损失函数第二项实际上是常数,证明如下:
我们将式(2)写为矩阵形式:
x
T
=
G
⋅
y
T
x_{T}=G \cdot y_{T}
xT=G⋅yT
其中
y
T
=
[
y
T
(
T
)
,
…
,
y
T
(
1
)
]
T
\boldsymbol{y}_{T}=\left[\boldsymbol{y}^{T}(T), \ldots, \boldsymbol{y}^{T}(1)\right]^{T}
yT=[yT(T),…,yT(1)]T,
G
=
{
I
,
O
,
…
,
O
,
−
G
(
Δ
)
,
…
,
−
G
(
Δ
+
K
l
−
1
)
}
G=\left\{\boldsymbol{I}, \boldsymbol{O}, \ldots, \boldsymbol{O},-\boldsymbol{G}(\Delta), \ldots,-\boldsymbol{G}\left(\Delta+K_{l}-1\right)\right\}
G={I,O,…,O,−G(Δ),…,−G(Δ+Kl−1)}因此有:
det
E
(
x
T
x
T
T
)
=
∣
det
G
∣
2
det
E
(
y
T
y
T
T
)
=
det
E
(
y
T
y
T
T
)
=
constant.
\begin{aligned} \operatorname{det} E\left(\boldsymbol{x}_{T} \boldsymbol{x}_{T}^{T}\right) &=\left|\operatorname{det} \boldsymbol{G}\right|^{2} \operatorname{det} E\left(\boldsymbol{y}_{T} \boldsymbol{y}_{T}^{T}\right) \\ &=\operatorname{det} E\left(\boldsymbol{y}_{T} \boldsymbol{y}_{T}^{T}\right) \\ &=\text { constant. } \end{aligned}
detE(xTxTT)=∣detG∣2detE(yTyTT)=detE(yTyTT)= constant.
(上标T表示转置/共轭转置)所以式(4)的第二项可以去掉。
F
(
G
)
=
1
∣
T
∣
∑
t
∈
T
log
(
det
E
(
x
T
(
t
)
x
T
T
(
t
)
)
)
(
5
)
\begin{aligned} F\left(\mathcal{G}\right)=& \frac{1}{|T|} \sum_{t \in T} \log \left(\operatorname{det} E\left(\boldsymbol{x}_{T}(t) \boldsymbol{x}_{T}^{T}(t)\right)\right) \end{aligned}(5)
F(G)=∣T∣1t∈T∑log(detE(xT(t)xTT(t)))(5)
上式就是GWPE的损失函数,现在混响抑制的目标可以写为:
G
=
arg
min
G
F
(
G
)
\mathcal{G}_{}=\arg \min _{\mathcal{G}_{}} F\left(\mathcal{G}_{}\right)
G=argGminF(G)
3.优化算法
最小化(5)来获得
G
\mathcal{G}
G的估计,但是由于(5)没有解析解,所以论文中给出辅助函数的方法,构造辅助函数:
F
~
(
G
,
L
)
=
1
∣
T
∣
∑
t
∈
T
(
E
(
x
T
(
t
)
Λ
(
t
)
−
1
x
T
(
t
)
)
−
N
+
log
(
det
Λ
(
t
)
)
)
\begin{array}{r} \tilde{F}\left(\mathcal{G}, \mathcal{L}\right)=\frac{1}{|T|} \sum_{t \in T}\left(E\left(x^{T}(t) \boldsymbol{\Lambda}(t)^{-1} \boldsymbol{x}_{T}(t)\right)\right. \left.-N+\log \left(\operatorname{det} \boldsymbol{\Lambda(t)}\right)\right) \end{array}
F~(G,L)=∣T∣1∑t∈T(E(xT(t)Λ(t)−1xT(t))−N+log(detΛ(t)))
其中
Λ
=
E
(
x
T
x
T
T
)
\mathbf{\Lambda}=E\left(\boldsymbol{x}_{T} \boldsymbol{x}_{T}^{T}\right)
Λ=E(xTxTT)
为空间相关矩阵,
Λ
\mathbf{\Lambda}
Λ通常通过时间平均的方法得到
Λ
=
∑
k
=
t
−
δ
t
+
δ
1
2
δ
+
1
x
T
x
T
T
{\boldsymbol{\Lambda}}=\sum_{k=t-\delta}^{t+\delta}\frac{1}{2 \delta+1} \mathbf{x}_{T} \mathbf{x}_{T}^{T}
Λ=k=t−δ∑t+δ2δ+11xTxTT
然后估计
G
\mathcal{G}
G:
R
^
=
∑
t
∈
T
ψ
(
t
−
Δ
)
‾
Λ
^
(
t
)
−
1
ψ
∗
(
t
−
Δ
)
‾
r
^
=
∑
t
∈
T
ψ
(
t
−
Δ
)
‾
Λ
^
(
t
)
−
1
y
(
t
)
\begin{aligned} \hat{\boldsymbol{R}} &=\sum_{t \in \mathcal{T}} \overline{\boldsymbol{\psi}(t-\Delta)} \hat{\boldsymbol{\Lambda}}(t)^{-1} \overline{\boldsymbol{\psi}^{*}(t-\Delta)} \\ \hat{\boldsymbol{r}} &=\sum_{t \in \mathcal{T}} \overline{\boldsymbol{\psi}(t-\Delta)} \hat{\boldsymbol{\Lambda}}(t)^{-1} \boldsymbol{y}(t) \end{aligned}
R^r^=t∈T∑ψ(t−Δ)Λ^(t)−1ψ∗(t−Δ)=t∈T∑ψ(t−Δ)Λ^(t)−1y(t)
g
^
=
R
^
−
1
r
^
\hat{\boldsymbol{g}}=\hat{\boldsymbol{R}}^{-1} \hat{\boldsymbol{r}}
g^=R^−1r^
g
g
g为预测矩阵
G
=
{
G
(
τ
)
}
Δ
≤
τ
≤
Δ
+
K
−
1
\mathcal{G}=\left\{\boldsymbol{G}(\tau)\right\}_{\Delta \leq \tau \leq \Delta+K-1}
G={G(τ)}Δ≤τ≤Δ+K−1的列向量拼接起来的向量:
g
=
[
g
1
(
Δ
)
⋮
g
N
(
Δ
)
⋮
g
1
(
Δ
+
K
−
1
)
⋮
g
N
(
Δ
+
K
−
1
)
]
\boldsymbol{g}=\left[\begin{array}{c} \boldsymbol{g}^{1}(\Delta) \\ \vdots \\ \boldsymbol{g}^{N}(\Delta) \\ \hline \vdots \\ \hline \boldsymbol{g}^{1}\left(\Delta+K-1\right) \\ \vdots \\ g^{N}\left(\Delta+K-1\right) \end{array}\right]
g=
g1(Δ)⋮gN(Δ)⋮g1(Δ+K−1)⋮gN(Δ+K−1)
其中
g
n
(
τ
)
\boldsymbol{g}^{n}(\tau)
gn(τ)代表
G
(
τ
)
\boldsymbol{G}(\tau)
G(τ)的第n列。