这次说一个single-channel noise reduction的经典方法,OMLSA(optimally-modified log-spectral amplitude)。这是Cohen在2001年提出的(目前matlab已经开源,在cohen的个人主页上),比较具有代表性,里面牵扯模块也比较多,涉及了很多signal processing领域非常经典的未知量估计问题,后面还被拓展到multi-channel中,和GSC-structure结合,做post-filtering等等,如果想要深纠的话,对这个算法还是要基本了解一下的。我头一次看的时候还被绕进去一两天……
MCRA
首先说一下MCRA(minima controlled recursive averaging)算法,这是noise spectrum估计的一个经典算法,后面还有一个improved版本IMCRA。为什么要提它呢?因为OMLSA第一步就要用它估计噪声谱。
估计出来的噪声谱我这里用$\lambda^d_{f,t}$表示。作为算法的入口,MCRA执行的时候,除了信号谱$Y_{f,t}$之外,再没有任何先验知识。
在speech存在/不存在的假设下,$\lambda_{f,t}$的估计方法为:
$\alpha_d$为平滑因子,如果已知speech在当前观测$Y_{f,t}$下存在的条件概率$p’_{f,t}$,上面两个式子可以联合写成:
因此关键在于导出条件概率$p’_{f,t}$,首先对观测谱在频率轴上加窗,时间轴上做平滑,得到$S_{f,t}$:
并追踪$S^\min_{f,t}$,定义$S^r_{f,t} = S_{f,t} / S^\min_{f,t}$,$p’_{f,t}$由:
$\delta$表示指示函数,$\Delta$表示预先设置的阈值。上式带入$(1)$即可得到noise spectrum的估计。
Algorithm
使用MCRA算法得到noise spectrum之后,现有的已知量包括$Y_{f,t}$和$\lambda^d_{f,t}$,OMLSA算法进行步骤如下:
用$Y_{f,t}, \lambda^d_{f,t}$计算posterior SNR $\gamma_{f, t}$
估计prior SNR $\xi_{f,t}$
估计prior probability for speech absence $q_{f,t}$
计算speech presence probability $p_{f,t}$
计算compute spectral gain function $G_{f,t}$
“Springer Handbook of Speech Processing”中”Spectral Enhancement Methods”一节中,也分别介绍了IMCRA,prior SNR和speech presence probability的估计方法,如果不参考原始论文的话,阅读这部分也完全可以。
OMLSA算法对于瞬时噪声(transient noise)消除能力有限,cohen等人后续还有一系列的工作,比如[2]。对于ASR而言,直接作用OMLSA的效果和masking方法类似,听觉上效果不错,但是一般不能带来WER上的提升,通常以SNR作为衡量指标。下面给出一个sample,直观感受一下OMLSA的去噪效果。
此外就是,OMLSA通常应用在single channel场景下,但是可以和beamforming结合,拓展到multi-channel中,比如[2]中的思路:spectral gain function计算涉及的统计量由GSC beamformer的一些中间结果估计得到,最终作用在beamforming output上,相比原始的OMLSA,算法整体的估计细节改动并不大,因此,熟悉这部分的细节对于了解cohen等人的后续工作帮助还是挺大的。
Reference
[1]. Cohen I, Berdugo B. Speech enhancement for non-stationary noise environments[J]. Signal processing, 2001, 81(11): 2403-2418.
[2]. Cohen I. Multichannel post-filtering in nonstationary noise environments[J]. IEEE Transactions on Signal Processing, 2004, 52(5): 1149-1160.