本文主要是介绍对比IMCRA来研究一下Cohen的TBRR跟踪方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
对比IMCRA来研究一下Cohen的TBRR跟踪方法
- 前言
- MCRA1vs2-信噪比门限得出的语音存在概率
- IMCRA vs TBRR-的语音存在概率计算:
- IMCRA的语音不存在算法
- TBRR的语音存在概率
- 后记
- 参考文献
前言
科恩大神的巅峰之作MCRA是菜鸟容易看懂的一个算法,但不妨碍它成为经典噪声跟踪的天花板,他再接再厉提出了Improved版本和TBRR版本的MCRA,罗爱洲也在专著中改进了一版号称MCRA-2。但这么多烟花缭乱的改进本质上改的是啥呢?答案是语音存在概率!
MCRA1vs2-信噪比门限得出的语音存在概率
MCRA1和MCRA2都是按照最小跟踪方法算出的S_r值,来判断这个值的门限来决定语音存在与否:
i f S r ( k , l ) > δ 1 , 2 p ( k , l ) = 1 语音存在 e l s e p ( k , l ) = 0 语音存在 if \ \ S_r(k,l) > \delta_{1,2}\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ p(k,l) = 1 \text{语音存在}\\ else\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ p(k,l) = 0 \text{语音存在} if Sr(k,l)>δ1,2 p(k,l)=1语音存在else p(k,l)=0语音存在
MCRA1中的门限是一个常数,而MCRA2中根据不同频段变成了分段常数:
δ ( k ) = { 2 , 1 ≤ k ≤ L F 2 , L F ≤ k ≤ M F 5 , M F ≤ k ≤ F s / 2 \delta(k) = \begin{cases} 2 ,1 \leq k \leq LF \\ 2 ,LF \leq k \leq MF \\ 5, MF \leq k \leq Fs/2 \end{cases} δ(k)=⎩⎪⎨⎪⎧2,1≤k≤LF2,LF≤k≤MF5,MF≤k≤Fs/2
IMCRA vs TBRR-的语音存在概率计算:
首先计算推导在OMLSA&IMCRA学习笔记可以找到,这两个进阶算法的语音存在概率都利用了这个结论: p ( k , l ) = { 1 + q ( k , l ) 1 − q ( k , l ) ( 1 + ξ ( k , l ) ) e x p ( − v ( k , l ) ) } − 1 \begin{aligned} p(k,l) = \big \{1+\frac{q(k,l)}{1-q(k,l)}(1+\xi(k,l))exp(-v(k,l)) \big \}^{-1} \end{aligned} p(k,l)={1+1−q(k,l)q(k,l)(1+ξ(k,l))exp(−v(k,l))}−1 其中 q ( k , l ) ≜ P ( H 0 ( k , l ) ) q(k,l)\triangleq P(H_0(k,l)) q(k,l)≜P(H0(k,l))被定义为语音不存在的先验概率。 ξ ( k , l ) ≜ λ x ( k , l ) / λ d ( k , l ) \xi(k,l)\triangleq\lambda_x(k,l)/\lambda_d(k,l) ξ(k,l)≜λx(k,l)/λd(k,l)为先验信噪比, γ ( k , l ) ≜ ∣ Y ( k , l ) ∣ 2 / λ d ( k , l ) \gamma(k,l)\triangleq|Y(k,l)|^2/\lambda_d(k,l) γ(k,l)≜∣Y(k,l)∣2/λd(k,l), v ( k , l ) ≜ γ ( k , l ) ξ ( k , l ) / ( 1 + ξ ( k , l ) ) v(k,l)\triangleq\gamma(k,l)\xi(k,l)/(1+\xi(k,l)) v(k,l)≜γ(k,l)ξ(k,l)/(1+ξ(k,l))。而所谓的改进就是改进这个语音不存在的概率,相比上面语音不存在是一个键控开关,改进算法的语音不存在有点概率的味道了。整个跟踪的基础也是local energy通过平滑时频窗口的STFT幅度平方来获取,先定义一个窗函数获取当前频率的附近能量:
S f ( k , l ) = ∑ i = − w w b ( i ) ∣ Y ( k − i , l ) ∣ 2 S_f(k,l)= \sum_{i=-w}^wb(i)|Y(k-i,l)|^2 Sf(k,l)=i=−w∑wb(i)∣Y(k−i,l)∣2
而时域的平滑采用一阶递归方程: S ( k , l ) = α s S ( k , l − 1 ) + ( 1 − α s ) S f ( k , l ) S(k,l)=\alpha_sS(k,l-1)+(1-\alpha_s)S_f(k,l) S(k,l)=αsS(k,l−1)+(1−αs)Sf(k,l),而两种改进的算法对 S ( k , l ) S(k,l) S(k,l)进一步平滑和估计,产生了不同的方案。
IMCRA的语音不存在算法
首先还是按照MCRA的算法:
if mod(l/L)=0S_min(k,l) = min(S_tmp(k,l-1),S(k,l))S_tmp(k,l) = S_f(k,l)
elseS_min(k,l) = min(S_min(k,l-1),S(k,l))S_tmp(k,l) = min(S_tmp(k,l-1),S(k,l))
end
找到 S m i n S_{min} Smin,此刻整出来两个新名词 γ m i n ( k , l ) = ∣ Y ( k , l ) ∣ 2 B m i n S m i n ( k , l ) \gamma_{min}(k,l)=\frac{|Y(k,l)|^2}{B_{min}S_{min}(k,l)} γmin(k,l)=BminSmin(k,l)∣Y(k,l)∣2和 ζ ( k , l ) = S ( k , l ) B m i n S m i n ( k , l ) \zeta(k,l)=\frac{S(k,l)}{B_{min}S_{min}(k,l)} ζ(k,l)=BminSmin(k,l)S(k,l), B m i n B_{min} Bmin被取名常数偏差因子【5】,再次得出初次的语音判决结果(二值域) I ( k , l ) = { 1 , γ m i n ( k , l ) ≤ γ 0 , a n d ζ ( k , l ) ≤ ζ 0 0 , o t h e r \ I(k,l) = \begin{cases} 1 ,\gamma_{min}(k,l)\leq \gamma_0, and\ \zeta(k,l)\leq \zeta_0\\ 0 ,other \\ \end{cases} I(k,l)={1,γmin(k,l)≤γ0,and ζ(k,l)≤ζ00,other再根据这个结果二次平滑 S S S值得到: S ^ ( k , l ) = { ∑ i = − I w I w w i n ( i ) I ( k − i , l ) ∣ Y ( k − i , l ) ∣ 2 ∑ i = − I w I w w i n ( i ) I ( k − i , l ) , ∑ i = − I w I w I ( k − i , l ) ≠ 0 S ^ ( k , l − 1 ) , o t h e r \hat S(k,l) = \begin{cases} \frac{\sum_{i=-I_w}^{I_w}win(i)I(k-i,l)|Y(k-i,l)|^2}{\sum_{i=-I_w}^{I_w}win(i)I(k-i,l)} ,\sum_{i=-I_w}^{I_w}I(k-i,l)\neq0\\ \hat S(k,l-1) ,other \\ \end{cases} S^(k,l)=⎩⎨⎧∑i=−IwIwwin(i)I(k−i,l)∑i=−IwIwwin(i)I(k−i,l)∣Y(k−i,l)∣2,∑i=−IwIwI(k−i,l)=0S^(k,l−1),other科恩觉得不过瘾,由加了一级一届的平滑公式 S ^ ( k , l ) = α s S ^ ( k , l − 1 ) + ( 1 − α s ) S ^ ( k , l ) \hat S(k,l) =\alpha_s\hat S(k,l-1) +(1-\alpha_s)\hat S(k,l) S^(k,l)=αsS^(k,l−1)+(1−αs)S^(k,l)
然后再根据
if mod(l/L)=0S_min(k,l) = min(S_tmp(k,l-1),S(k,l))S_tmp(k,l) = S_f(k,l)
elseS_min(k,l) = min(S_min(k,l-1),S(k,l))S_tmp(k,l) = min(S_tmp(k,l-1),S(k,l))
end
搜索到 S ^ m i n \hat S_{min} S^min,然后计算新名词的估计值 γ ^ m i n ( k , l ) = ∣ Y ( k , l ) ∣ 2 B m i n S ^ m i n ( k , l ) \hat\gamma_{min}(k,l)=\frac{|Y(k,l)|^2}{B_{min}\hat S_{min}(k,l)} γ^min(k,l)=BminS^min(k,l)∣Y(k,l)∣2和 ζ ( k , l ) = S ^ ( k , l ) B m i n S ^ m i n ( k , l ) \zeta(k,l)=\frac{\hat S(k,l)}{B_{min}\hat S_{min}(k,l)} ζ(k,l)=BminS^min(k,l)S^(k,l),这就是第二轮搜索。根据以上计算,再带入下式得出新的不存在概率 q ^ ( k , l ) = { 1 , γ m i n ( k , l ) ≤ 1 , a n d ζ ( k , l ) ≤ ζ 0 γ 1 − γ ^ m i n ( k , l ) γ 1 − 1 , 1 ≤ γ ^ m i n ( k , l ) ≤ γ 1 a n d ζ ( k , l ) ≤ ζ 0 0 , o t h e r \hat q(k,l) = \begin{cases} 1 ,\gamma_{min}(k,l)\leq1, and\ \zeta(k,l)\leq \zeta_0\\ \frac{\gamma_1-\hat\gamma_{min}(k,l)}{\gamma_1-1},1\leq \hat\gamma_{min}(k,l)\leq \gamma_1 and\ \zeta(k,l)\leq \zeta_0\\ 0 ,other \\ \end{cases} q^(k,l)=⎩⎪⎨⎪⎧1,γmin(k,l)≤1,and ζ(k,l)≤ζ0γ1−1γ1−γ^min(k,l),1≤γ^min(k,l)≤γ1and ζ(k,l)≤ζ00,other接着 α ^ d ( k , l ) = α d + ( 1 − α d ) p ′ ( k , l ) \hat\alpha_d(k,l)=\alpha_d+(1-\alpha_d)p^\prime(k,l) α^d(k,l)=αd+(1−αd)p′(k,l)更新平滑因子,以及 λ ^ d ( k , l ) = α ^ d λ ^ d ( k − 1 , l ) + ( 1 − α ^ d ) ∣ Y ( k , l ) ∣ 2 \begin{aligned} \hat\lambda_d(k,l)=\hat\alpha_d\hat\lambda_d(k-1,l)+(1-\hat\alpha_d)|Y(k,l)|^2 \end{aligned} λ^d(k,l)=α^dλ^d(k−1,l)+(1−α^d)∣Y(k,l)∣2最后重新计算后验和先验信噪比。
TBRR的语音存在概率
Transient Beam-to-Reference Ratio 即瞬态波束与参考信号比,这是应用于GSC算法的一种后置滤波的噪声跟踪方法,利用FBF固定波束形成矩阵输出和阻塞矩阵的输出,进一步的优化语音不存在概率的计算,进而得到更加准确的语音存在估计。
根据GSC输出信号的假设,期望语音信号、类平稳噪声和瞬时非平稳噪声,有三种场景
- H 1 H_1 H1:表示存在期望语音信号,则 q = 0 q=0 q=0;
- H 0 s H_{0s} H0s:表示存在类平稳噪声,则 q = 1 q=1 q=1;
- H 0 t H_{0t} H0t:表示存在瞬态非平稳噪声,则 q = 1 q=1 q=1;
根据假设可以看出这种检测方法可以识别出瞬态非平稳噪声,那么除了上述固定的场景(键控值),不属于上述情况的概率该如何计算呢?
- H r H_{r} Hr:tbrr概率= m a x ( γ 0 − γ s γ 0 − 1 , Ω h i g h ( k ) − Ω ( k , l ) Ω h i g h ( k ) − Ω l o w ( k ) ) max(\frac{\gamma_0-\gamma_s}{\gamma_0-1},\frac{\Omega_{high}(k)-\Omega(k,l)}{\Omega_{high}(k)-\Omega_{low}(k)}) max(γ0−1γ0−γs,Ωhigh(k)−Ωlow(k)Ωhigh(k)−Ω(k,l));
上述假设场景如何区分呢?首先令每一个路输出的信号都经过MCRA进行跟踪,主路 F B F FBF FBF矩阵的输出的广义信噪比 Λ Y = S ( k , l ) λ ( k , l ) \Lambda_Y=\frac{S(k,l)}{\lambda(k,l)} ΛY=λ(k,l)S(k,l)如果这个广义信噪比小于门限,认为主路输出基本上是噪声信号,否则可能是语音信号,这里注意是可能,因为阻塞矩阵的条件可能将这个可能翻转。然后定义辅路阻塞矩阵的广义能量噪声比为 Λ B M = M A X 1 ≤ i ≤ M − 1 { S B M i ( k , l ) λ B M i ( k , l ) } \Lambda_{BM}=MAX_{1\leq i \leq M-1}\{\frac{S_{BM_i}(k,l)}{\lambda_{BM_i}(k,l)}\} ΛBM=MAX1≤i≤M−1{λBMi(k,l)SBMi(k,l)}如果辅路的比值较低而且主路广义信噪比较高,毫无疑问是满足 H 1 H_1 H1。反之,如果主路广义信噪比较低,辅路也低,则满足 H 0 s H_{0s} H0s,辅路高,则可能是 H 0 t H_{0t} H0t。这几种判断比较好解释。
但是如果主辅路两个比值都高意味着什么呢?是瞬态信号,还是辅路泄露了语音信号,则需要进一步的判断,于是引入了一个新的定义,这个定义就是所谓的TBRR: Ω ( k , l ) = S ( k , l ) − λ ( k , l ) M A X 1 ≤ i ≤ M − 1 { S B M i ( k , l ) − λ B M i ( k , l ) } \Omega(k,l)=\frac{S(k,l)-\lambda(k,l)}{MAX_{1\leq i \leq M-1}\{S_{BM_i}(k,l)-\lambda_{BM_i}(k,l)\}} Ω(k,l)=MAX1≤i≤M−1{SBMi(k,l)−λBMi(k,l)}S(k,l)−λ(k,l)怎么理解这个TBRR呢?就是我们要相信GSC的输出基本靠谱,即主路主要输出有用的语音,辅路输出噪声,所以主路的频谱能量差如果大于辅路的,更倾向于是语音信号 H r H_{r} Hr,反之认为是 H 0 t H_{0t} H0t。同时为了更倾向于得出语音不存在的概率,加入了后验信噪比的参考,得出了 H r H_{r} Hr计算方法: q t b r r ( k , l ) = { 1 , H 0 s , o r H 0 t m a x ( γ 0 − γ s γ 0 − 1 , Ω h i g h ( k ) − Ω ( k , l ) Ω h i g h ( k ) − Ω l o w ( k ) ) , H r 0 , H 1 q_{tbrr}(k,l) = \begin{cases} 1 ,H_{0s}, or\ H_{0t}\\ max(\frac{\gamma_0-\gamma_s}{\gamma_0-1},\frac{\Omega_{high}(k)-\Omega(k,l)}{\Omega_{high}(k)-\Omega_{low}(k)}),H_{r}\\ 0 , H_1\\ \end{cases} qtbrr(k,l)=⎩⎪⎨⎪⎧1,H0s,or H0tmax(γ0−1γ0−γs,Ωhigh(k)−Ωlow(k)Ωhigh(k)−Ω(k,l)),Hr0,H1引用【2】中科恩总结的流程图如下:
后续的算法即可以按照imcra的方式,计算语音存在概率,更新噪声,等等。
后记
科恩的这几篇论文没有太多深奥的数学技巧,胜在心思缜密,想法新奇,每每阅知总会发出“我也能想到”和“我怎么就没想到呢”的感慨,嗨。
从上图的实验结果直观的感受一下差别,最后一段是非平稳噪声,确实沙雕了。
参考文献
1.Microphone array post-filterring for non-stationary noise suppression, Isarael Cohen and Baruch Berdugo
2.Adaptive Beamforming and Postfiltering, Speech enhancement, S.Gannot, I.Cohen
3.Noise Spectrum Estimation in Adverse Environments:Improved Minima Controlled Recursive Averaging, Isarael Cohen
4.Optimal Speech Enhancement Under Signal Presence Uncertainty Using Log-Spectral Amplitude Estimator
5.语音增强理论与实践, (美)罗爱洲, (译)高毅等
6.OMLSA&IMCRA学习笔记
7.麦克风阵列广义旁瓣消除及后置滤波算法研究,王贤祥 重庆邮电大学硕士学位论文
这篇关于对比IMCRA来研究一下Cohen的TBRR跟踪方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!