语音去混响之MCLP算法
概述
MCLP(Multichannel Linear Prediction)算法也被称为WPE(Weighted Prediction Error)算法,是实现语音信号去混响的一种方法。本文关注MISO(Multiple Input Single Output)版本的MCLP算法的原理,即输入为多个麦克风接收信号,输出为一路去除混响之后的语音信号。主要内容包括MCLP模型、待求解的目标函数、离线解,自适应解,并给出仿真波形。
符号表示:对语音信号做短时傅里叶变换,nnn表示帧号,lll表示频点,MMM表示麦克风个数。y1,n,ly_{1,n,l}y1,n,l表示第一个麦克风接收的第nnn帧第lll个频点的信号,sn,ls_{n,l}sn,l表示纯净信号,将多个麦克风的接收信号写成向量形式为yn,l=(y1,n,l,y2,n,l,...,yM,n,l)T\textbf{y}_{n,l}=(y_{1,n,l},y_{2,n,l},...,y_{M,n,l})^Tyn,l=(y1,n,l,y2,n,l,...,yM,n,l)T,将n−Δn-\Deltan−Δ帧到n−Δ−K+1n-\Delta-K+1n−Δ−K+1帧的接收信号记为yˉn−Δ,l=(yn−Δ,lT,...,yn−Δ−K+1,lT)T\bar{\textbf{y}}_{n-\Delta,l}=(\textbf{y}_{n-\Delta,l}^T,..., \textbf{y}_{n-\Delta-K+1,l}^T)^Tyˉn−Δ,l=(yn−Δ,lT,...,yn−Δ−K+1,lT)T。
原理
MCLP模型
MCLP模型表示当前接收信号由当前纯净信号与过去若干帧的接收信号线性组合而成。忽略噪声,用公式表示如下
y1,n,l=glHyˉn−Δ,l+sn,ly_{1,n,l}=\textbf{g}_l^H \bar{\textbf{y}}_{n-\Delta,l}+s_{n,l}y1,n,l=glHyˉn−Δ,l+sn,l
这里 gl\textbf{g}_lgl为长度为 MKMKMK的列向量,被称为线性系数(linear coefficients),去混响算法的目的就是估计出 gl\textbf{g}_lgl,从当前接收信号 y1,n,ly_{1,n,l}y1,n,l中减去混响部分“ glHyˉn−Δ,l\textbf{g}_l^H \bar{\textbf{y}}_{n-\Delta,l}glHyˉn−Δ,l”,从而恢复出 sn,ls_{n,l}sn,l。
目标函数
求解上述gl\textbf{g}_lgl的思路是最大化似然函数。假设已知n=1n=1n=1~NNN帧的接收信号,则最优化问题表示为
max∑n=1Nlogp(y1,n,l)max \sum\limits_{n=1}^N log p(y_{1,n,l})maxn=1∑Nlogp(y1,n,l)
<=> max∑n=1Nlogp(y1,n,l∣sn,l)p(sn,l)max \sum\limits_{n=1}^N log p(y_{1,n,l}|s_{n,l})p(s_{n,l})maxn=1∑Nlogp(y1,n,l∣sn,l)p(sn,l)
由MCLP模型,上式中 p(y1,n,l∣sn,l)=δ(y1,n,l−glHyˉn−Δ,l)p(y_{1,n,l}|s_{n,l})=\delta(y_{1,n,l}-\textbf{g}_l^H \bar{\textbf{y}}_{n-\Delta,l})p(y1,n,l∣sn,l)=δ(y1,n,l−glHyˉn−Δ,l),并假设 sn,ls_{n,l}sn,l服从时变复高斯分布,即 sn,ls_{n,l}sn,l~ NC(0,λn,l)N_C(0,\lambda_{n,l})NC(0,λn,l),将高斯分布的概率表达式代入上式,可知上述最优化问题等价于
minλn,l>0,gl∑n=1N(∣sn,l∣2λn,l+logπλn,l)\min \limits_{\lambda_{n,l}>0,\textbf{g}_l} \sum\limits_{n=1}^N (\frac{|s_{n,l}|^2}{\lambda_{n,l}}+log\pi\lambda_{n,l})λn,l>0,glminn=1∑N(λn,l∣sn,l∣2+logπλn,l)
离线解
上式目标函数包含两组参数:gl\textbf{g}_lgl与λn,l\lambda_{n,l}λn,l。可用EM算法求解,首先固定gl\textbf{g}_lgl不变求解λn,l\lambda_{n,l}λn,l,有
λn,l=∣y1,n,l−glHyˉn−Δ,l∣2\lambda_{n,l}=|y_{1,n,l}-\textbf{g}_l^H \bar{\textbf{y}}_{n-\Delta,l}|^2λn,l=∣y1,n,l−glHyˉn−Δ,l∣2
再固定 λn,l\lambda_{n,l}λn,l不变求解 gl\textbf{g}_lgl,即
mingl∑n=1N∣y1,n,l−glHyˉn−Δ,l∣2λn,l\min \limits_{\textbf{g}_l} \sum\limits_{n=1}^N \frac{|y_{1,n,l}-\textbf{g}_l^H \bar{\textbf{y}}_{n-\Delta,l}|^2}{\lambda_{n,l}}glminn=1∑Nλn,l∣y1,n,l−glHyˉn−Δ,l∣2
注意到上式目标函数为 gl\textbf{g}_lgl的二次函数,对 gl\textbf{g}_lgl求导置零可得解析解:
gl=(∑n=1Nyˉn−Δ,lyˉn−Δ,lHλn,l)−1(yˉn−Δ,ly1,n,l∗λn,l)\textbf{g}_l=(\frac{\sum\limits_{n=1}^N \bar{\textbf{y}}_{n-\Delta,l}\bar{\textbf{y}}_{n-\Delta,l}^H}{\lambda_{n,l}})^{-1}(\frac{\bar{\textbf{y}}_{n-\Delta,l} y_{1,n,l}^*}{\lambda_{n,l}})gl=(λn,ln=1∑Nyˉn−Δ,lyˉn−Δ,lH)−1(λn,lyˉn−Δ,ly1,n,l∗)
不断重复上式计算 gl\textbf{g}_lgl与 λn,l\lambda_{n,l}λn,l直至收敛即可。该 gl\textbf{g}_lgl的解析解通常被称为离线解,因为需要已知 n=1n=1n=1~ NNN帧所有接收信号来计算去混响之后的信号,属于“batch processing”。下一部分讨论 gl\textbf{g}_lgl的自适应解。
自适应解
自适应解也称为在线解,使算法可用于实时处理信号。将求解gl\textbf{g}_lgl的目标函数加入指数因子,
mingl∑n=1NαN−n∣y1,n,l−glHyˉn−Δ,l∣2λn,l\min \limits_{\textbf{g}_l} \sum\limits_{n=1}^N \alpha^{N-n}\frac{|y_{1,n,l}-\textbf{g}_l^H \bar{\textbf{y}}_{n-\Delta,l}|^2}{\lambda_{n,l}}glminn=1∑NαN−nλn,l∣y1,n,l−glHyˉn−Δ,l∣2
采用RLS(Recursive Least Square)算法求解上式,可得
kl(n)=Σl(n−1)yˉn−Δ,lαλn,l+yˉn−Δ,lHΣl(n−1)yˉn−Δ,l\textbf{k}_l(n)=\frac{\Sigma_l(n-1) \bar{\textbf{y}}_{n-\Delta,l} }{\alpha \lambda_{n,l}+\bar{\textbf{y}}_{n-\Delta,l}^H \Sigma_l(n-1)\bar{\textbf{y}}_{n-\Delta,l}}kl(n)=αλn,l+yˉn−Δ,lHΣl(n−1)yˉn−Δ,lΣl(n−1)yˉn−Δ,l
Σl(n)=Σl(n−1)−kl(n)yˉn−Δ,lHΣl(n−1)α\Sigma_l(n)=\frac{\Sigma_l(n-1)-\textbf{k}_l(n)\bar{\textbf{y}}_{n-\Delta,l}^H \Sigma_l(n-1)}{\alpha}Σl(n)=αΣl(n−1)−kl(n)yˉn−Δ,lHΣl(n−1)
gl(n)=gl(n−1)+kl(n)(y1,n,l−glH(n−1)yˉn−Δ,l)\textbf{g}_l(n)=\textbf{g}_l(n-1)+\textbf{k}_l(n)(y_{1,n,l}-\textbf{g}_l^H(n-1) \bar{\textbf{y}}_{n-\Delta,l})gl(n)=gl(n−1)+kl(n)(y1,n,l−glH(n−1)yˉn−Δ,l)
其中 kl\textbf{k}_lkl为 MKMKMK长度的列向量, Σl\Sigma_lΣl为 MK×MKMK\times MKMK×MK的复矩阵。
仿真图形
使用麦克风阵列为彼此间距6cm的四麦克风圆阵,在室内带一定混响的安静环境采集语音数据。采用上文所述自适应MCLP算法处理语音数据,输出一路数据,将其中一路输入信号与算法输出信号对比如下。从波形上可看出处理后的语音拖尾变小,可见MCLP能有效去除混响。
图1 MCLP算法处理语音
Reference
本文主要参照[1]和[2],其中离线解部分参照[1],自适应解部分参照[2]。
常见的MCLP算法还包括SISO(Single Input Single Output)版本和MIMO(Multiple Input Multiple Output)版本。其中SISO为本文MISO版本的算法的一个特例,上述推导过程只需修改使M=1即可。MIMO版本通常要求输出的多路去混响信号保持TDOA信息不变,以便后续接波束算法。MIMO版本的MCLP算法推导与本文有所不同,离线解可参照[3]、自适应解可参照[4]。
[1] GB/T 7714 Jukic A , Van Waterschoot T , Gerkmann T , et al. Multi-Channel Linear Prediction-Based Speech Dereverberation With Sparse Priors[J]. IEEE/ACM Transactions on Audio, Speech, and Language Processing, 2015, 23(9):1509-1520.
[2] Yoshioka T , Tachibana H , Nakatani T , et al. Adaptive dereverberation of speech signals with speaker-position change detection[C]// IEEE International Conference on Acoustics. IEEE, 2009.
[3] Yoshioka T , Nakatani T . Generalization of Multi-Channel Linear Prediction Methods for Blind MIMO Impulse Response Shortening[J]. IEEE Transactions on Audio Speech & Language Processing, 2012, 20(10):2707-2720.
[4] Nakatani T , Yoshioka T . Dereverberation for Reverberation-Robust Microphone Arrays[C]// Signal Processing Conference. IEEE, 2014.
语音去混响之MCLP算法相关推荐
- 双麦克风语音去混响算法C代码实现(附github项目链接)
1. 算法依据 算法的依据是论文<Multi-Channel Linear Prediction Speech Dereverberation Algorithm Based on QR-RLS ...
- 语音去混响算法之WPE( Weighted Prediction Error for speech dereverberation)
目录 简介 信号模型 WPE 算法(Weighted prediction error) TVG 模型(time-varying Gaussian model) 目标函数 迭代求权重离线解 参考文献 ...
- 【信息学】【2018.02】噪声环境下基于时频域信号模型的语音去混响
本文为德国埃尔朗根-纽伦堡大学(作者:Sebastian Braun)的博士论文,共164页. 混响是由所有反射声波的总和叠加而成,存在于任何传统的房间中.诸如免提模式的移动电话.平板电脑.智能电视. ...
- 语音信号去混响原理与技术
http://read.pudn.com/downloads94/sourcecode/speech/376618/sound/%E8%AF%AD%E9%9F%B3%E4%BF%A1%E5%8F%B7 ...
- 实时通信服务中的语音解混响算法实践
导读: 随着音视频通信会议越来越普及,与会各方在不同环境中遇到了越来越明显且差异的混响场景,譬如大会议室场景.玻璃会议室场景和小房间且隔音材料不佳场景等.为了保证更好的听音可懂度和舒适度,通信中的语音 ...
- 麦克风阵列技术 三 ( 声源定位 波束形成 去混响 麦克风阵列结构设计 声学结构确认流程)
麦克风阵列技术 麦克风阵列技术详解 声源定位 延时估计 角度计算 波束形成 波束形成模型 波束形成基本理论 去混响 麦克风阵列结构设计 声学结构确认流程 紧接上一个博客文章,此为第三部分.上一部分见: ...
- matlab提取语音信号基频检测,语音信号处理中基频提取算法综述
[实例简介] 语音信号处理中基频提取算法综述,论述了各种基频检测的算法,对比分析各方法与思想,不错的总结 增刊 张杰等:语音信号处理中基频提取算法综述 101 信号是由频率具有谐波关系的信号组成的,因 ...
- 解读:滴滴“猜你去哪儿”功能的算法实现
导读:最近看了一篇比较有意思的文章,关于滴滴"猜你去哪儿"功能的算法实现,在这里记录下. ▌产品 图:滴滴"猜你去哪儿"产品形态 从产品的角度,滴滴" ...
- 基于Python的去雾人脸识别算法
本文记录的是本人在学校小学期实现的基于Python的去雾+人脸识别算法,本次项目的很多资源都来源于网上的文献与博客,下面是项目的内容. 这次项目的完成主要分为三部分:去雾算法,人脸识别,去雾算法与人脸 ...
最新文章
- CSS布局之-水平垂直居中
- 孙正义:互联网流量将转化为智能AI流量,我的时代终于来了
- centos7.0安装php,centos7.3安装php7.0
- 一篇很形象的文章,什么是数字签名?
- nodejs+webpack+vue以及npm安装对应的库
- 数据库 数据库SQL语句一
- 面经 | 无论文、无实习拿下腾讯CV算法岗
- pid和linux的关系,linux – bash pid和$$之间的区别
- Python3.5学习之旅——day5
- sketchup边线设置_草图大师SketchUp改变模型边线颜色的方法
- 第三章 微分中值定理及其应用
- Linux之奇怪的知识---supervisor超级守护进程的意义和使用方法
- 启用Win11原生支持的DoH(DNS over HTTPS)和配置自定义的DoH服务
- 07 面向对象编程-结构、封装、继承、多态、接口
- spark读取文件夹数据
- Spring解析加密配置文件
- Linux-centos安装MySQL8.0.22连接驱动文件mysql-connector-java-8.0.22-1.el7.noarch.rpm
- Qt5官方demo解析集31——StocQt
- python对时间的灵活处理
- 23种设计模式(三大类)(转载)