去混响(Dereverberation)是语音会议中常用的算法之一,现在会议室大都采用玻璃幕墙导致会议室混响严重,在距离较远时语音会变得模糊不清,而去混响算法可以减少晚期混响以提升语音清晰度和改善听感。在多通道去混响算法中常用的是WPE(Weighted Prediction Error)算法,但是单通道中去混响的算法网上介绍的比较少,今天我们就介绍一种基础的去混响算法。
混响噪声的功率谱密度估计
房间脉冲响应(Room Impulse Response,RIR)可以视为随机过程的输出,其计算公式为:
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
其中b(t)是一个零均值的高斯稳态噪声,∆与混响时间有关
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
那么原始音频s(t)经过房间脉冲响应h(t)生成的混响信号x(t)可以表示为
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
因为h(t)是一个因果系统,如果s和b是两个独立随机过程,那么在t时刻x的自相关函数为
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
同样的我们考虑在t+T时刻,x的自相关函数为
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
我们将公式(5)改写成如下形式,
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
那么x在t+T时刻的自相关函数可以看做由两部分组成,第一部分依赖于过去的混响信号,第二部分则是t到t+T时刻的无混响信号决定的。我们将h(t)拆成两部分
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
如果T远小于混响时间Tr的话,那么s(t)和hd(t)卷积结果sd(t)可以认为是直达信号;s(t)和hr(t)卷积结果r(t)则包含了所有的反射信号,即晚期混响,因此我们将公式(5)写成直达信号与晚期混响和的形式
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
其中
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
由于指数衰减是比较慢的,因此上面的信号可以视为一个短时稳态信号,我们假设这个短暂的时间为D,那么有如下关系D≤T<<Tr。 在实际中D约为50ms,混响时间约为1s左右。基于上述假设x(t)和r(t)的短时功率谱密度函数为
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
单通道去混响算法
在知道混响噪声的功率谱密度之后我们就可以从混响信号中恢复原始信号,这里可以使用的方法有很多,这里使用最简单的谱减法,其原理如下所示:
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
此时,估计的干净语音信号计算方式为
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
其中G可以表示为
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
我们知道谱减法会产生音乐噪声,常用的两种方法是使用平均的SNR来减少随机干扰,另一种则是使用门限值来调整G,如下所示
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
其中SNRpri为先验信噪比,可以通过后验信噪比估计,即
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
有了以上的知识,我们剩下需要计算γxx和γrr,其中过去的混响信号一般要在时域进行平滑,即
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
计算γrr需要知道混响时间,我们先假定混响时间是缓慢变化的,因此可以认定混响时间只在更新周期之间进行更新,可以通过两步进行估计。
- 静音检测,混响信号是指数衰减的,首先检测信号包络是衰减的区域,然后选择其中最长的区域,它们被认为对应于语音信号中的静音,因此呈现与房间混响时间相对应的指数衰减
- 混响时间估计,通过线性回归估计递减周期内平滑能量包络线的对数斜率来估计混响时间
以上两阶段估计结果如下图所示:
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
至此,混响噪声完整计算流程如下所示
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
最后我们用实际的音频测试下算法效果,可以发现拖尾现象有所减弱,声音有比较清晰。
![探索单通道语音实时去混响算法](https://www.nxrte.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
参考文献:
[1]. https://www.semanticscholar.org/paper/A-New-Method-Based-on-Spectral-Subtraction-for-Lebart-Boucher/4c315953944fc0631fca4e28fbeb04471b60ecbc?p2df
[2]. Single-channel online enhancement of speech corrupted by reverberation and noise.
作者:Ryuk
来源:语音算法组
原文:https://mp.weixin.qq.com/s/mm2_-RBU-_Y1sPG2alWzFg
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。