对比IMCRA来研究一下Cohen的TBRR跟踪方法

2023-11-09 18:51

本文主要是介绍对比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,1kLF2,LFkMF5,MFkFs/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+1q(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=wwb(i)Y(ki,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,l1)+(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(ki,l)i=IwIwwin(i)I(ki,l)Y(ki,l)2,i=IwIwI(ki,l)=0S^(k,l1),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,l1)+(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γ11γ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(k1,l)+(1α^d)Y(k,l)2最后重新计算后验和先验信噪比。

TBRR的语音存在概率

Transient Beam-to-Reference Ratio 即瞬态波束与参考信号比,这是应用于GSC算法的一种后置滤波的噪声跟踪方法,利用FBF固定波束形成矩阵输出和阻塞矩阵的输出,进一步的优化语音不存在概率的计算,进而得到更加准确的语音存在估计。
根据GSC输出信号的假设,期望语音信号、类平稳噪声和瞬时非平稳噪声,有三种场景

  1. H 1 H_1 H1:表示存在期望语音信号,则 q = 0 q=0 q=0;
  2. H 0 s H_{0s} H0s:表示存在类平稳噪声,则 q = 1 q=1 q=1;
  3. H 0 t H_{0t} H0t:表示存在瞬态非平稳噪声,则 q = 1 q=1 q=1;

根据假设可以看出这种检测方法可以识别出瞬态非平稳噪声,那么除了上述固定的场景(键控值),不属于上述情况的概率该如何计算呢?

  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(γ01γ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=MAX1iM1{λ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)=MAX1iM1{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(γ01γ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跟踪方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/377970

相关文章

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

JavaScript DOM操作与事件处理方法

《JavaScriptDOM操作与事件处理方法》本文通过一系列代码片段,详细介绍了如何使用JavaScript进行DOM操作、事件处理、属性操作、内容操作、尺寸和位置获取,以及实现简单的动画效果,涵... 目录前言1. 类名操作代码片段代码解析2. 属性操作代码片段代码解析3. 内容操作代码片段代码解析4.