OMLSA算法推导
OMLSA算法推导LSA估计增益贝叶斯定理估计条件语音存在概率DD准则估计先验信噪比通过先验信噪比的软决策估计先验语音缺失概率MCRA方法估计底噪递归平滑最小值控制语音存在概率OM-LSA(Optimally-modified log-spectral amplitude)是经典的降噪算法,这里做一个学习总结,把中间的一些公式推导一下,写一些自己的想法,水平有限,欢迎指正。LSA估计增益OM-LS
OM-LSA(Optimally-modified log-spectral amplitude)是经典的降噪算法,这里做一个学习总结,把中间的一些公式推导一下,写一些自己的想法,水平有限,欢迎指正。
LSA估计增益
OM-LSA(Optimally-modified log-spectral amplitude)从名字上就可以看出来估计的是对数幅度谱,LSA做为最小优化目标,即,
e = E { ( l o g ( A ^ ( k , l ) ) − l o g ( A ( k , l ) ) ) 2 } (1) e=E\{(log(\hat{A}(k,l))- log(A(k,l)))^2\} \tag{1} e=E{(log(A^(k,l))−log(A(k,l)))2}(1)
这里使用的其实是贝叶斯MSE准则,通过对 l o g ( A ^ ( k , l ) ) log(\hat{A}(k,l)) log(A^(k,l))求导得到,
l o g ( A ^ ( k , l ) ) = E ( l o g ( A ( k , l ) ∣ Y ( k , l ) ) ) A ^ ( k , l ) = e x p ( E ( l o g A ( k , l ) ∣ Y ( k , l ) ) ) (2) log(\hat{A}(k,l))=E(log(A(k,l)|Y(k,l))) \\ \hat{A}(k,l) = exp(E(log A(k,l)|Y(k,l))) \tag{2} log(A^(k,l))=E(log(A(k,l)∣Y(k,l)))A^(k,l)=exp(E(logA(k,l)∣Y(k,l)))(2)
每一帧可以分为存在语音和不存在语音两种情况,即,
H 0 ( k , l ) : Y ( k , l ) = D ( k , l ) H 1 ( k , l ) : Y ( k , l ) = X ( k , l ) + D ( k , l ) (3) \begin{aligned} H_0(k,l):Y(k,l) &= D(k,l) \\ H_1(k,l):Y(k,l)&=X(k,l) + D(k,l) \end{aligned} \tag{3} H0(k,l):Y(k,l)H1(k,l):Y(k,l)=D(k,l)=X(k,l)+D(k,l)(3)
式(2)中需要求解E(log A(k,l)|Y(k,l)),在存在语音和不存在语音两种假设情况下可以写成,
E ( l o g A ( k , l ) ∣ Y ( k , l ) ) = E ( l o g A ( k , l ) ∣ Y ( k , l ) , H 1 ( k , l ) ) p ( k , l ) + E ( l o g A ( k , l ) ∣ Y ( k , l ) , H 0 ( k , l ) ) ( 1 − p ( k , l ) ) (4) \begin{aligned} E(log A(k,l)|Y(k,l)) &= E(log A(k,l)|Y(k,l),H_1(k,l))p(k,l) \\&+ E(log A(k,l)|Y(k,l),H_0(k,l))(1-p(k,l)) \end{aligned} \tag{4} E(logA(k,l)∣Y(k,l))=E(logA(k,l)∣Y(k,l),H1(k,l))p(k,l)+E(logA(k,l)∣Y(k,l),H0(k,l))(1−p(k,l))(4)
将式(4)带人(2),并且利用 e x y = ( e x ) y , e x + y = e x e y e^{xy}=(e^x)^y,e^{x+y}=e^xe^y exy=(ex)y,ex+y=exey的性质,可以得到,
A ^ ( k , l ) = e x p ( E ( l o g A ( k , l ) ∣ Y ( k , l ) , H 1 ( k , l ) ) ) p ( k , l ) + e x p ( E ( l o g A ( k , l ) ∣ Y ( k , l ) , H 0 ( k , l ) ) ) ( 1 − p ( k , l ) ) (5) \begin{aligned} \hat{A}(k,l)&= exp(E(log A(k,l)|Y(k,l),H_1(k,l)))^{p(k,l)} \\&+ exp(E(log A(k,l)|Y(k,l),H_0(k,l)))^{(1-p(k,l))} \end{aligned} \tag{5} A^(k,l)=exp(E(logA(k,l)∣Y(k,l),H1(k,l)))p(k,l)+exp(E(logA(k,l)∣Y(k,l),H0(k,l)))(1−p(k,l))(5)
当语音不存在时,使用一个最小值超参进行约束,即,
e x p ( E ( l o g A ( k , l ) ∣ Y ( k , l ) , H 0 ( k , l ) ) ) = G m i n ∣ Y ( k , l ) ∣ (6) exp(E(log A(k,l)|Y(k,l),H_0(k,l)))=G_{min}|Y(k,l)| \tag{6} exp(E(logA(k,l)∣Y(k,l),H0(k,l)))=Gmin∣Y(k,l)∣(6)
当语音存在时,可以推导出,
e x p ( E ( l o g A ( k , l ) ∣ Y ( k , l ) , H 1 ( k , l ) ) ) = G H 1 ∣ Y ( k , l ) ∣ G H 1 = ζ ( k , l ) 1 + ζ ( k , l ) ∫ v ( k , l ) ∞ 1 2 e − t t d t (7) exp(E(log A(k,l)|Y(k,l),H_1(k,l)))=G_{H_1}|Y(k,l)| \\ G_{H_1}=\frac{\zeta(k,l)}{1+\zeta(k,l)}\int_{v(k,l)}^\infty \frac{1}{2}\frac{e^{-t}}{t}dt \tag{7} exp(E(logA(k,l)∣Y(k,l),H1(k,l)))=GH1∣Y(k,l)∣GH1=1+ζ(k,l)ζ(k,l)∫v(k,l)∞21te−tdt(7)
其中 p ( k , l ) p(k,l) p(k,l)为条件语音存在概率, ζ ( k , l ) \zeta(k,l) ζ(k,l)为先验信噪比, γ ( k , l ) \gamma(k,l) γ(k,l)为后验信噪比, v ( k , l ) = γ ( k , l ) ζ ( k , l ) 1 + ζ ( k , l ) v(k,l)=\frac{\gamma(k,l)\zeta(k,l)}{1+\zeta(k,l)} v(k,l)=1+ζ(k,l)γ(k,l)ζ(k,l)是先验后验信噪比的函数。将式(7),(6)带入式(5)得,
A ^ ( k , l ) = { G H 1 ( k , l ) } p ( k , l ) G m i n 1 − p ( k , l ) ∣ Y ( k , l ) ∣ = G ( k , l ) ∣ Y ( k , l ) ∣ (8) \begin{aligned} \hat{A}(k,l)&= \{G_{H_1}(k,l)\}^{p(k,l)}G_{min}^{1-p(k,l)} |Y(k,l)| \\ &= G(k,l) |Y(k,l)| \end{aligned} \tag{8} A^(k,l)={GH1(k,l)}p(k,l)Gmin1−p(k,l)∣Y(k,l)∣=G(k,l)∣Y(k,l)∣(8)
要想得到 G ( k , l ) ) G(k,l)) G(k,l)),需要估计出条件语音存在概率和先后验信噪比(间接需要估计出底噪)。
贝叶斯定理估计条件语音存在概率
假设干净语音和噪声的短时傅里叶变换系数满足复高斯分布,且不相干,则可以得到概率密度函数为,
p ( Y ( k , l ) ∣ H 0 ( k , l ) ) = 1 π λ x ( k , l ) e x p ( − ∣ Y ( k , l ) ∣ 2 λ d ( k ) ) , p ( Y ( k , l ) ∣ H 1 ( k , l ) ) = 1 π ( λ x ( k , l ) + λ d ( k , l ) ) e x p ( − ∣ Y ( k , l ) ∣ 2 λ x ( k ) + λ d ( k ) ) (9) \begin{aligned} p(Y(k,l)| H_0(k,l)) &= \frac{1}{\pi\lambda_x(k,l)}exp(-\frac{|Y(k,l)|^2}{\lambda_d(k)}), \\ p(Y(k,l)| H_1(k,l)) &= \frac{1}{\pi(\lambda_x(k,l)+\lambda_d(k,l))}exp(-\frac{|Y(k,l)|^2}{\lambda_x(k)+\lambda_d(k)}) \end{aligned} \tag{9} p(Y(k,l)∣H0(k,l))p(Y(k,l)∣H1(k,l))=πλx(k,l)1exp(−λd(k)∣Y(k,l)∣2),=π(λx(k,l)+λd(k,l))1exp(−λx(k)+λd(k)∣Y(k,l)∣2)(9)
利用贝叶斯定理,
p ( H 1 ( k , l ) ∣ Y ( k , l ) ) = p ( Y ( k , l ) ∣ H 1 ( k , l ) ) p ( H 1 ) p ( Y ( k , l ) ) = p ( Y ( k , l ) ∣ H 1 ( k , l ) ) p ( H 1 ) p ( Y ( k , l ) ∣ H 1 ( k , l ) ) p ( H 1 ) + p ( Y ( k , l ) ∣ H 0 ( k , l ) ) p ( H 0 ) (10) \begin{aligned} p(H_1(k,l)|Y(k,l))&=\frac{p(Y(k,l)|H_1(k,l))p(H_1)}{p(Y(k,l))} \\ &=\frac{p(Y(k,l)|H_1(k,l))p(H_1)}{p(Y(k,l)|H_1(k,l))p(H_1) + p(Y(k,l)|H_0(k,l))p(H_0)} \end{aligned} \tag{10} p(H1(k,l)∣Y(k,l))=p(Y(k,l))p(Y(k,l)∣H1(k,l))p(H1)=p(Y(k,l)∣H1(k,l))p(H1)+p(Y(k,l)∣H0(k,l))p(H0)p(Y(k,l)∣H1(k,l))p(H1)(10)
将式(9)带入式(10),得到,
p ( k , l ) = { 1 + q ( k , l ) 1 − q ( k , l ) ( 1 + ζ ( k , l ) ) e x p ( − v ( k , l ) ) } − 1 (11) p(k,l)=\{1+\frac{q(k,l)}{1-q(k,l)}(1+\zeta(k,l))exp(-v(k,l)) \}^{-1} \tag{11} p(k,l)={1+1−q(k,l)q(k,l)(1+ζ(k,l))exp(−v(k,l))}−1(11)
其中 q ( k , l ) q(k,l) q(k,l)为先验语音缺失概率, ζ ( k , l ) = λ x ( k , l ) λ d ( k , l ) \zeta(k,l)=\frac{\lambda_x(k,l)}{\lambda_d(k,l)} ζ(k,l)=λd(k,l)λx(k,l)为先验信噪比, γ ( k , l ) = ∣ Y ( k , l ) ∣ 2 λ d ( k , l ) \gamma(k,l)=\frac{|Y(k,l)|^2}{\lambda_d(k,l)} γ(k,l)=λd(k,l)∣Y(k,l)∣2为后验信噪比, v ( k , l ) = γ ( k , l ) ζ ( k , l ) 1 + ζ ( k , l ) v(k,l)=\frac{\gamma(k,l)\zeta(k,l)}{1+\zeta(k,l)} v(k,l)=1+ζ(k,l)γ(k,l)ζ(k,l)是先验后验信噪比的函数(和上面的定义一样)。
根据式(11),要想得到条件语音存在概率,需要估计出先后验信噪比(需要估计底噪)和先验语音缺失概率。
DD准则估计先验信噪比
在假设噪声估计出来的情况下,后验信噪比的估计只需要利用当前帧的能量除以噪声能量就可以了,而先验信噪比的估计需要利用DD准则进行估计,即,
ζ ^ ( k , l ) = α G H 1 2 ( k , l − 1 ) γ ( k , l − 1 ) + ( 1 − α ) m a x { γ ( k , l ) − 1 , 0 } (12) \hat{\zeta}(k,l)=\alpha G_{H_1}^2(k,l-1)\gamma(k,l-1) + (1-\alpha)max\{\gamma(k,l)-1,0\} \tag{12} ζ^(k,l)=αGH12(k,l−1)γ(k,l−1)+(1−α)max{γ(k,l)−1,0}(12)
式(12)的第一部分是上一帧的先验信噪比估计,
G H 1 2 ( k , l − 1 ) γ ( k , l − 1 ) = { G H 1 ( k , l − 1 ) ∣ Y ( k , l − 1 ) ∣ } 2 λ d ( k , l − 1 ) = λ x ( k , l − 1 ) λ d ( k , l − 1 ) = ζ ( k , l − 1 ) \begin{aligned} G_{H_1}^2(k,l-1)\gamma(k,l-1)&=\frac{\{G_{H_1}(k,l-1)|Y(k,l-1)|\}^2}{\lambda_d(k,l-1)}\\ &= \frac{\lambda_x(k,l-1)}{\lambda_d(k,l-1)} \\ &= \zeta(k,l-1) \end{aligned} GH12(k,l−1)γ(k,l−1)=λd(k,l−1){GH1(k,l−1)∣Y(k,l−1)∣}2=λd(k,l−1)λx(k,l−1)=ζ(k,l−1)
式(12)的第二部分是当前帧的先验信噪比估计,
γ ( k , l ) − 1 = ∣ Y ( k , l ) ∣ 2 λ d ( k , l ) − 1 = ∣ Y ( k , l ) ∣ 2 − λ d ( k , l ) λ d ( k , l ) = λ x ( k , l ) λ d ( k , l ) = ζ ( k , l ) \gamma(k,l)-1 = \frac{|Y(k,l)|^2}{\lambda_d(k,l)} - 1 = \frac{|Y(k,l)|^2-\lambda_d(k,l)}{\lambda_d(k,l)} = \frac{\lambda_x(k,l)}{\lambda_d(k,l)} = \zeta(k,l) γ(k,l)−1=λd(k,l)∣Y(k,l)∣2−1=λd(k,l)∣Y(k,l)∣2−λd(k,l)=λd(k,l)λx(k,l)=ζ(k,l)
将两部分做一个平滑得到最终的先验信噪比估计。
通过先验信噪比的软决策估计先验语音缺失概率
首先将估计出来的先验信噪比进行平滑,即,
ζ ( k , l ) = β ζ ( k , l − 1 ) + ( 1 − β ) ζ ^ ( k , l − 1 ) (13) \zeta(k,l)=\beta \zeta(k,l-1) + (1-\beta)\hat{\zeta}(k,l-1) \tag{13} ζ(k,l)=βζ(k,l−1)+(1−β)ζ^(k,l−1)(13)
接着在频域进行综合,考虑频带间的影响,定义
ζ λ ( k , l ) = ∑ i = − w λ w λ h λ ( i ) ζ ( k − i , l ) \zeta_\lambda(k,l)=\sum_{i=-w_\lambda}^{w_\lambda}h_\lambda(i)\zeta(k-i,l) ζλ(k,l)=i=−wλ∑wλhλ(i)ζ(k−i,l)
其中 h λ h_\lambda hλ为hanning窗,下标 λ \lambda λ可以等于"local",也可以等于"global",当 w λ w_\lambda wλ=1时,为"local",代表局部信噪比的平均,当 w λ w_\lambda wλ=15时,为"global",代表全局信噪比的平均,根据 ζ λ ( k , l ) \zeta_\lambda(k,l) ζλ(k,l)的数值和超参 ζ m i n \zeta_{min} ζmin, ζ m a x \zeta_{max} ζmax定义,
p λ ( k , l ) = { 0 , if ζ λ ( k , l ) ≤ ζ m i n 1 , ζ λ ( k , l ) ≥ ζ m a x l o g ( ζ λ ( k , l ) / ζ m i n ) l o g ( ζ m a x / ζ m i n ) , o t h e r w i s e (14) p_\lambda(k,l)=\begin{cases} & 0, \text{if} \zeta_\lambda(k,l) \leq \zeta_{min} \\ & 1, \zeta_\lambda(k,l) \geq \zeta_{max}\\ & \frac{log(\zeta_\lambda(k,l)/\zeta_{min})}{log(\zeta_{max}/\zeta_{min})}, otherwise \end{cases} \tag{14} pλ(k,l)=⎩⎪⎨⎪⎧0,ifζλ(k,l)≤ζmin1,ζλ(k,l)≥ζmaxlog(ζmax/ζmin)log(ζλ(k,l)/ζmin),otherwise(14)
为了进一步在噪声帧加强噪声抑制,定义,
ζ f r a m e ( l ) = m e a n 1 ≤ k ≤ M / 2 + 1 { ζ ( k , l ) } \zeta_{frame}(l)=\underset{1\leq k \leq M/2+1}{mean}\{\zeta(k,l)\} ζframe(l)=1≤k≤M/2+1mean{ζ(k,l)}
u ( l ) = { 0 , if , ζ f r a m e ( l ) ≤ ζ p e a k ζ m i n 1 , if , ζ f r a m e ( l ) ≥ ζ p e a k ζ m a x l o g ( ζ f r a m e ( l ) / ζ p e a k ( l ) / ζ m i n ( l ) ) l o g ( ζ m a x / ζ m i n ) , o t h e r w i s e (15) u(l)=\begin{cases} &0,\text{if}, \zeta_{frame}(l) \leq \zeta_{peak}\zeta_{min} \\ & 1, \text{if}, \zeta_{frame}(l) \geq \zeta_{peak}\zeta_{max} \\ & \frac{log(\zeta_{frame}(l)/\zeta_{peak}(l)/\zeta_{min}(l))}{log(\zeta_{max}/\zeta_{min})}, otherwise \end{cases} \tag{15} u(l)=⎩⎪⎨⎪⎧0,if,ζframe(l)≤ζpeakζmin1,if,ζframe(l)≥ζpeakζmaxlog(ζmax/ζmin)log(ζframe(l)/ζpeak(l)/ζmin(l)),otherwise(15)
p f r a m e p_{frame} pframe的计算如下图所示,
先验语音缺失概率根据下式求得,
q ^ ( k , l ) = 1 − p l o c a l ( k , l ) p g l o b a l ( k , l ) p f r a m e ( l ) (16) \hat{q}(k,l)= 1 - p_{local}(k,l)p_{global}(k,l)p_{frame}(l) \tag{16} q^(k,l)=1−plocal(k,l)pglobal(k,l)pframe(l)(16)
MCRA方法估计底噪
常见的噪声估计方法有递归平滑,最小值跟踪,直方图统计和分位数噪声估计等方法,这里的MCRA(Minima controlled recursive averaging)算法使用了递归平均和最小值跟踪相结合的方法,这里的最小值跟踪体现在语音存在概率是由最小值跟踪确定的。
递归平滑
在噪声段进行语音平滑处理,在语音段不更新噪声,则,
H 0 ′ ( k , l ) : λ d ^ ( k , l + 1 ) = α d λ d ^ ( k , l ) + ( 1 − α d ) ∣ Y ( k , l ) ∣ 2 H 1 ′ ( k , l ) : λ d ^ ( k , l + 1 ) = λ d ^ ( k , l ) (17) \begin{aligned} H_0^{'}(k,l):\hat{\lambda_d}(k,l+1) &= \alpha_d\hat{\lambda_d}(k,l) + (1-\alpha_d)|Y(k,l)|^2 \\ H_1^{'}(k,l):\hat{\lambda_d}(k,l+1) &= \hat{\lambda_d}(k,l) \end{aligned} \tag{17} H0′(k,l):λd^(k,l+1)H1′(k,l):λd^(k,l+1)=αdλd^(k,l)+(1−αd)∣Y(k,l)∣2=λd^(k,l)(17)
α d \alpha_d αd是平滑参数,数值过大会导致跟踪较慢,数值过小,容易产生音乐噪声。利用条件语音存在概率 p ′ ( k , l ) p^{'}(k,l) p′(k,l)进行综合,可得,
λ d ^ ( k , l + 1 ) = ( α d λ d ^ ( k , l ) + ( 1 − α d ) ∣ Y ( k , l ) ∣ 2 ) ( 1 − p ′ ( k , l ) ) + λ d ^ ( k , l ) p ′ ( k , l ) = α ~ d λ d ^ ( k , l ) + ( 1 − α ~ d ) ∣ Y ( k , l ) ∣ 2 (18) \begin{aligned} \hat{\lambda_d}(k,l+1) &= (\alpha_d\hat{\lambda_d}(k,l) + (1-\alpha_d)|Y(k,l)|^2)(1-p^{'}(k,l)) + \hat{\lambda_d}(k,l)p^{'}(k,l) \\ & = \tilde\alpha_d\hat{\lambda_d}(k,l) + (1-\tilde\alpha_d)|Y(k,l)|^2 \end{aligned} \tag{18} λd^(k,l+1)=(αdλd^(k,l)+(1−αd)∣Y(k,l)∣2)(1−p′(k,l))+λd^(k,l)p′(k,l)=α~dλd^(k,l)+(1−α~d)∣Y(k,l)∣2(18)
其中, α d ~ = α d + ( 1 − α d ) p ′ ( k , l ) \tilde{\alpha_d}=\alpha_d + (1-\alpha_d)p^{'}(k,l) αd~=αd+(1−αd)p′(k,l)
最小值控制语音存在概率
首先对幅度谱在频域进行平滑,得,
S f ( k , l ) = ∑ i = − w w b ( i ) ∣ Y ( k − i , l ) ∣ 2 (19) S_f(k,l)=\sum_{i=-w}^{w}b(i)|Y(k-i,l)|^2 \tag{19} Sf(k,l)=i=−w∑wb(i)∣Y(k−i,l)∣2(19)
接着在时域进行平滑,
S ( k , l ) = α s S ( k , l − 1 ) + ( 1 − α s ) S f ( k , l ) (20) S(k,l)=\alpha_s S(k,l-1) + (1-\alpha_s )S_f(k,l) \tag{20} S(k,l)=αsS(k,l−1)+(1−αs)Sf(k,l)(20)
利用最小值跟踪法求出 S m i n ( k , l ) S_{min}(k,l) Smin(k,l),并且定义比值 S r ( k , l ) = S ( k , l ) / S m i n ( k , l ) S_r(k,l)=S(k,l)/S_{min}(k,l) Sr(k,l)=S(k,l)/Smin(k,l),如果 S r ( k , l ) S_r(k,l) Sr(k,l)大于阈值,则令 I ( k , l ) = 1 I(k,l)=1 I(k,l)=1,否则为0,条件语音存在概率根据I(k,l)平滑得到,即,
p ′ ( k , l ) = α p p ′ ( k , l − 1 ) + ( 1 − α ) I ( k , l ) (21) p^{'}(k,l)=\alpha_pp^{'}(k,l-1) + (1-\alpha_)I(k,l) \tag{21} p′(k,l)=αpp′(k,l−1)+(1−α)I(k,l)(21)
将式(21)带入式(18)得到最终的噪声估计值。
总结
算法流程为:首先使用MCRA方法估计出噪声,接着估计出后验信噪比和先验信噪比(DD准则),利用先验信噪比的软决策估计出先验语音缺失概率,之后利用贝叶斯准则求出条件语音存在概率,将前面求出的值带入增益函数表达式得到增益值。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)