前⾯的⼏篇⽂章讲了webRTC中的语⾳降噪。最近⼜⽤到了基于MCRA-OMLSA的语⾳降噪,就学习了原理并且软件实现了它。MCRA主要⽤于噪声估计,OMLSA是基于估计出来的噪声去做降噪。类⽐于webRTC中的降噪⽅法,也有噪声估计(分位数噪声估计法)和基于估计出来的噪声降噪(维纳滤波),MCRA就相当于分位数噪声估计法,OMLSA就相当于维纳滤波。本⽂先讲讲怎么⽤MCRA和OMLSA来做语⾳降噪的原理,后续会讲怎么来做软件实现。 ⼀, MCRA
MCRA的全称是Minima Controlled Recursive Averaging(最⼩值控制的递归平均),是cohen提出的⼀种常⽤的噪声估计⽅法,具体见论⽂《Noise Estimation by Minima Controlled Recursive Averaging for Robust Speech Enhancement》。 从名字就可看出这个⽅法主要包括两部分,最⼩值控制和递归平均。 最⼩值控制⽤来算语⾳存在概率,递归平均⽤来做噪声估计,即基于语⾳存在概率做噪声估计。先定义⼀些名称,然后分别看这两部分。⽤l表⽰第l帧,k表⽰第k个频点,Y(k, l)表⽰带噪语⾳第l帧的第k个频点的幅度谱,N(k, l)表⽰噪声第l帧的第k个频点的幅度谱,S(k, l)表⽰⼲净语⾳第l帧的第k个频点的幅度谱,H0(k, l)表⽰第l帧的第k个频点上只有噪声,H1(k, l)表⽰第l帧的第k个频点上有语⾳。P(H1(k, l) | Y(k, l)) 表⽰第l帧的第k个频点上是语⾳的概率,P(H0(k, l) | Y(k, l)) 表⽰第l帧的第k个频点上是噪声的概率,显然P(H0(k, l) | Y(k, l)) + P(H1(k, l) | Y(k, l)) = 1。 1, ⽤最⼩值控制来算语⾳存在概率
前⾯的⽂章()讲过webRTC的ANS是基于似然⽐等来算语⾳存在概率。⽽这⾥是⽤最⼩值控制来算语⾳存在概率,即基于当前带噪语⾳的能量谱与指定长度帧内带噪语⾳的能量谱的最⼩值的⽐值来计算,具体如下: 1) 对带噪语⾳的能量谱做频域平滑和时域平滑
从上式可见,平滑窗的长度是奇数(2w + 1),系数是b(i)。
其中,αs (0 < αs < 1)是平滑因⼦。
2) 搜索能量谱最⼩值
语音降噪芯片定义Smin(k, l)和Stmp(k, l),并对它们初始化如下:
然后按频点从第⼀帧开始逐帧⽐较:
当到第L帧后:
后⾯以L帧为⼀个周期,重复上⾯两步,得到这个周期内的Smin(k, l)和Stmp(k, l)。搜索窗的帧长度L会影响到噪声的跟踪速度,⼀般按照经验选0.5s~1.5s左右。
3) 计算语⾳存在概率
定义Sr(k, l)为当前帧相应频点的能量谱与最⼩值的⽐值,即
再定义⼆值I (k, l)如下:
最终语⾳存在概率通过下式得到:
其中,αp (0 < αp < 1)是平滑因⼦。此处的p(k, l)就是P(H1(k, l) | Y(k, l))。为书写⽅便,下⽂⽤p表⽰P(H1(k, l) | Y(k, l)),⽤1-p表⽰P(H0(k, l) | Y(k, l))。
2, ⽤递归平均来估计噪声
通常认为噪声都是加性噪声,所以有下式:
定义σ(k, l)表⽰第l帧的第k个频点上的噪声能量谱。这⾥噪声更新的思路如下:当语⾳不存在时更新噪声的估计,当语⾔存在时⽤前⼀帧的噪声估计值作为当前噪声的估计值,表⽰如下式:
其中,αd (0 < αd < 1)是平滑因⼦。
沥青电加热器所以噪声能量谱的估计如下式(p = P(H1(k, l) | Y(k, l)),为语⾳存在概率):
美容喷雾器
精细雾化喷嘴αd是tuning出来的,每个频点上的语⾳存在概率是上⾯基于最⼩控制的⽅法算出来的,上⼀帧估计出来的噪声能量谱σ(k, l-1)和当前帧的带噪语⾳的能量谱均已知,这样当前帧的估计出来的噪声的能量谱就可求出了。
通常令
,
这样上式就可写成下式:
这就是噪声估计的数学表达式。
⼆, OMLSA
噪声估计出来后就要基于它做降噪了。这⾥⽤的是OMLSA(Optimally Modified Log-Spectral Amplitude Estimator,最优修正的对数幅度谱估计),依旧是cohen提出来的,论⽂是《Optimal Speech Enhancement Under Signal Presence Uncertainty Using Log-Spectral Amplitude Estimator》。OMLSA是MMSE-LSA的改进算法,⽬的是得到增益gain。算法推导有些复杂,这⾥只给出gain的表达式,如下:
其中
,
Gmin为预先设定的值,p(k, l)是语⾳存在概率。这⾥
,
ξ(k, l)是先验性噪⽐,γ(k, l)是后验性噪⽐。先验性噪⽐和后验性噪⽐在⽂章()中讲过。后验性噪⽐的计算基于上⾯⽤MCRA估计出来的噪声,
sata连接器
,
5460a先验性噪⽐计算依旧⽤⽂章()中提到的DD⽅法,表达式如下:
其中,αSNR (0 < αSNR < 1)是平滑因⼦。
G(k, l)得到后,降噪后⼲净语⾳的每个频点的幅度谱可通过下式得到:
S(k, l) = G(K, l)Y(k, l)
以上就是基于MCRA-OMLSA的语⾳降噪原理。这⾥需要指出的是噪声估计和语⾳降噪相对独⽴,有不同的组合⽅式来降噪,⽐如MCRA 也可以和维纳滤波结合来降噪。