语音增强-----互补联合字典学习介绍

生成性字典学习

考虑加性噪声情况下,对于单通道语音增强来说,其信号模型可以表示为
x ( t ) = s ( t ) + n ( t ) x\left( t \right)=s\left( t \right)+n\left( t \right) x(t)=s(t)+n(t)
经过STFT写成幅度谱的表示形式为
X = S + N \mathbf{X}=\mathbf{S}+\mathbf{N} X=S+N
利用近似K-SVD算法(稀疏表示的算法改为LARC算法)对已有的干净语言训练样本 S t r a i n {{\mathbf{S}}^{train}} Strain和噪声训练样本 N t r a i n {{\mathbf{N}}^{train}} Ntrain进行学习,得到干净语音字典 D S {{\mathbf{D}}_{S}} DS和噪声字典 D N {{\mathbf{D}}_{N}} DN,将其组合成一个总字典 D = [ D S , D N ] \mathbf{D}=\left[ {{\mathbf{D}}_{S}},{{\mathbf{D}}_{N}} \right] D=[DS,DN]
在降噪阶段,对测试带噪语言可以表示为
X t e s t = D × C = [ D S , D N ] × [ C S C N ] {{\mathbf{X}}^{test}}=\mathbf{D}\times \mathbf{C}=\left[ {{\mathbf{D}}_{S}},{{\mathbf{D}}_{N}} \right]\times \left[ \begin{matrix} {{\mathbf{C}}_{S}} \\ {{\mathbf{C}}_{N}} \\ \end{matrix} \right] Xtest=D×C=[DS,DN]×[CSCN]
因此,利用LARC算法,对带噪语音进行稀疏表示,可以求得其在两个字典上的稀疏表示系数 C S t e s t \mathbf{C}_{S}^{test} CStest C N t e s t \mathbf{C}_{N}^{test} CNtest,从而得到增强后的语音幅度谱
S ^ = D S × C S t e s t \mathbf{\hat{S}}={{\mathbf{D}}_{S}}\times \mathbf{C}_{S}^{test} S^=DS×CStest
对增强后的语音幅度谱 S ^ \mathbf{\hat{S}} S^乘以带噪信号的相位后进行ISTFT即可增强后的时域语音信号.
具体过程可以表示为
在这里插入图片描述

互补联合字典学习

由于带噪语音和干净语音或者噪声之间存在包含与被包含的关系,即前者与后者存在着一定的映射关系,那么可以考虑基于联合训练字典的方法来进行语音增强。
在训练阶段,将带噪语音和干净语音联合训练
m i n D s , D x 1 , C 1   ∥ X − D x 1 C 1 ∥ F 2 + ∥ S − D s C 1 ∥ F 2 s . t .   f ( C 1 ) ≤ μ \underset{{{\mathbf{D}}_{s}},{{\mathbf{D}}_{x1}},{{\mathbf{C}}_{1}}}{\mathop{min}}\,\left\| \mathbf{X}-{{\mathbf{D}}_{x1}}{{\mathbf{C}}_{1}} \right\|_{F}^{2}\text{+}\left\| \mathbf{S}-{{\mathbf{D}}_{s}}{{\mathbf{C}}_{1}} \right\|_{F}^{2}s.t.\text{ }f\left( {{\mathbf{C}}_{1}} \right)\le \mu Ds,Dx1,C1minXDx1C1F2+SDsC1F2s.t. f(C1)μ
其中 D x 1 {{\mathbf{D}}_{x1}} Dx1 D s {{\mathbf{D}}_{s}} Ds分别为带噪语音字典和干净语音字典, C 1 {{\mathbf{C}}_{1}} C1为相同的稀疏表示系数, f ( C 1 ) f\left( {{\mathbf{C}}_{1}} \right) f(C1)表示对 C 1 {{\mathbf{C}}_{1}} C1的稀疏约束, μ \mu μ为稀疏约束阈值。
带噪语音和噪声联合训练
m i n D n , D x 2 , C 2   ∥ X − D x 2 C 2 ∥ F 2 + ∥ N − D n C 2 ∥ F 2 s . t .   f ( C 2 ) ≤ μ \underset{{{\mathbf{D}}_{n}},{{\mathbf{D}}_{x2}},{{\mathbf{C}}_{2}}}{\mathop{min}}\,\left\| \mathbf{X}-{{\mathbf{D}}_{x2}}{{\mathbf{C}}_{2}} \right\|_{F}^{2}+\left\| \mathbf{N}-{{\mathbf{D}}_{n}}{{\mathbf{C}}_{2}} \right\|_{F}^{2}s.t.\text{ }f\left( {{\mathbf{C}}_{2}} \right)\le \mu Dn,Dx2,C2minXDx2C2F2+NDnC2F2s.t. f(C2)μ
D x 2 {{\mathbf{D}}_{x2}} Dx2 D n {{\mathbf{D}}_{n}} Dn分别为带噪语音字典和噪声字典, C 2 {{\mathbf{C}}_{2}} C2为相同的稀疏表示系数。
更进一步地,可以表示为
min ⁡ D s , D x 1 , C 1   ∥ [ X S ] − [ D x 1 D s ] C 1 ∥ F 2 s . t .   f ( C 1 ) ≤ μ \underset{{{\mathbf{D}}_{s}},{{\mathbf{D}}_{x1}},{{\mathbf{C}}_{1}}}{\mathop{\min }}\,\left\| \left[ \begin{matrix} \mathbf{X} \\ \mathbf{S} \\ \end{matrix} \right]-\left[ \begin{matrix} {{\mathbf{D}}_{x1}} \\ {{\mathbf{D}}_{s}} \\ \end{matrix} \right]{{\mathbf{C}}_{1}} \right\|_{F}^{2}s.t.\text{ }f\left( {{\mathbf{C}}_{1}} \right)\le \mu Ds,Dx1,C1min[XS][Dx1Ds]C1F2s.t. f(C1)μ
min ⁡ D n , D x 2 , C 2   ∥ [ X N ] − [ D x 2 D n ] C 2 ∥ F 2 s . t .   f ( C 2 ) ≤ μ \underset{{{\mathbf{D}}_{n}},{{\mathbf{D}}_{x2}},{{\mathbf{C}}_{2}}}{\mathop{\min }}\,\left\| \left[ \begin{matrix} \mathbf{X} \\ \mathbf{N} \\ \end{matrix} \right]-\left[ \begin{matrix} {{\mathbf{D}}_{x2}} \\ {{\mathbf{D}}_{n}} \\ \end{matrix} \right]{{\mathbf{C}}_{2}} \right\|_{F}^{2}s.t.\text{ }f\left( {{\mathbf{C}}_{2}} \right)\le \mu Dn,Dx2,C2min[XN][Dx2Dn]C2F2s.t. f(C2)μ
利用近似K-SVD算法更新字典,利用LARC算法进行稀疏表示,交替迭代求解最终得到两组字典 D x 1 {{\mathbf{D}}_{x1}} Dx1 D s {{\mathbf{D}}_{s}} Ds D x 2 {{\mathbf{D}}_{x2}} Dx2 D n {{\mathbf{D}}_{n}} Dn
在增强阶段,用训练得到的两组联合字典 D x 1 {{\mathbf{D}}_{x1}} Dx1 D s {{\mathbf{D}}_{s}} Ds D x 2 {{\mathbf{D}}_{x2}} Dx2 D n {{\mathbf{D}}_{n}} Dn,我们对测试的带噪语音 X t e s t {{\mathbf{X}}^{test}} Xtest进行两路的稀疏表示
E 1 ∗ = arg ⁡ m i n E 1   ∥ X t e s t − D x 1 E 1 ∥ F 2 s . t .   f ( E 1 ) ≤ μ \mathbf{E}_{1}^{*}=\arg \underset{{{\mathbf{E}}_{1}}}{\mathop{min}}\,\left\| {{\mathbf{X}}^{test}}-{{\mathbf{D}}_{x1}}{{\mathbf{E}}_{1}} \right\|_{F}^{2}s.t.\text{ }f\left( {{\mathbf{E}}_{1}} \right)\le \mu E1=argE1minXtestDx1E1F2s.t. f(E1)μ
E 2 ∗ = arg ⁡ m i n E 2   ∥ X t e s t − D x 2 E 2 ∥ F 2 s . t .   f ( E 2 ) ≤ μ \mathbf{E}_{2}^{*}=\arg \underset{{{\mathbf{E}}_{2}}}{\mathop{min}}\,\left\| {{\mathbf{X}}^{test}}-{{\mathbf{D}}_{x2}}{{\mathbf{E}}_{2}} \right\|_{F}^{2}s.t.\text{ }f\left( {{\mathbf{E}}_{2}} \right)\le \mu E2=argE2minXtestDx2E2F2s.t. f(E2)μ
那么,可以得到两路信号
S ^ 1 t e s t = D s E 1 ∗ \mathbf{\hat{S}}_{1}^{test}={{\mathbf{D}}_{s}}\mathbf{E}_{1}^{*} S^1test=DsE1
N ^ 2 t e s t = D n E 2 ∗ \mathbf{\hat{N}}_{2}^{test}={{\mathbf{D}}_{n}}\mathbf{E}_{2}^{*} N^2test=DnE2
由于考虑的是加性噪声模型,那么
N ^ 1 t e s t = X t e s t − S ^ 1 t e s t \mathbf{\hat{N}}_{1}^{test}={{\mathbf{X}}^{test}}-\mathbf{\hat{S}}_{1}^{test} N^1test=XtestS^1test
S ^ 2 t e s t = X t e s t − N ^ 2 t e s t \mathbf{\hat{S}}_{2}^{test}={{\mathbf{X}}^{test}}-\mathbf{\hat{N}}_{2}^{test} S^2test=XtestN^2test
对两路信号进行加权
S ^ t e s t = ( 1 − α ) S ^ 1 t e s t + α S ^ 2 t e s t {{\mathbf{\hat{S}}}^{test}}=(1-\alpha )\mathbf{\hat{S}}_{1}^{test}+\alpha \mathbf{\hat{S}}_{2}^{test} S^test=(1α)S^1test+αS^2test
N ^ t e s t = ( 1 − α ) N ^ 1 t e s t + α N ^ 2 t e s t {{\mathbf{\hat{N}}}^{test}}=(1-\alpha )\mathbf{\hat{N}}_{1}^{test}+\alpha \mathbf{\hat{N}}_{2}^{test} N^test=(1α)N^1test+αN^2test
构造时频域上的维纳滤波器
M = ( S ^ t e s t ) 2 ( S ^ t e s t ) 2 + ( N ^ t e s t ) 2 \mathbf{M}=\frac{{{\left( {{{\mathbf{\hat{S}}}}^{test}} \right)}^{2}}}{{{\left( {{{\mathbf{\hat{S}}}}^{test}} \right)}^{2}}+{{\left( {{{\mathbf{\hat{N}}}}^{test}} \right)}^{2}}} M=(S^test)2+(N^test)2(S^test)2
得到增强后的语音幅度谱
S ~ t e s t = M ⊙ X t e s t {{\mathbf{\tilde{S}}}^{test}}=\mathbf{M}\odot {{\mathbf{X}}^{test}} S~test=MXtest
对增强后的语音幅度 S ^ \mathbf{\hat{S}} S^乘以带噪信号的相位后进行ISTFT即可增强后的时域语音信号。
具体过程可以表示为
在这里插入图片描述
下面对上述几种方法进行仿真,其中加权系数 α = 0 \alpha=0 α=0时,将其称作为JDL0,加权系数 α = 1 \alpha=1 α=1时,将其称为JDL1。

仿真参数设置

参数名称参数值
信噪比10dB
采样率8KHz
SFFT点数512
字典原子个数800

GDL算法的结果如下:

在这里插入图片描述

从图中可以看出,经过GDL算法处理后的增强后的语音有了明显的改善,但在细节方面仍存在一些不足。

JDL1算法结果:

在这里插入图片描述

从实验结果来看,虽然有一定的效果,但是效果有很大的不足,这是因为,直接利用估计的噪声进行语音增强,显然噪声的信息远不如信号的信息重要,直接利用噪声进行语音增强则会存在较大的误差。

JDL0结果如下:

在这里插入图片描述

从结果来看,效果较JDL1有很大的改善,这也验证了上述说法的正确性。
当然这里只给出了两种极端的 α \alpha α值,没有很好地利用信号或者是噪声的信息,比如有利用归一化残留分量、基尼系数、自适应权系数等进行加权的,则会取得更好的效果,这里就不再叙述。

关于语音及噪声文件,具体请参考:语音信号处理常用语料库下载地址

参考文献:
[1]罗友. 基于联合字典学习和稀疏表示的语音降噪算法研究[D].中国科学技术大学,2016.
[2]Y. Zhu, J. Fu, X. Xu and Z. Ye, “Modified Complementary Joint Sparse Representations: A Novel Post-Filtering to MVDR Beamforming,” 2019 IEEE International Workshop on Signal Processing Systems (SiPS), 2019, pp. 1-6, doi: 10.1109/SiPS47522.2019.9020522.
[3]Y. Luo, G. Bao, Y. Xu and Z. Ye, “Supervised Monaural Speech Enhancement Using Complementary Joint Sparse Representations,” in IEEE Signal Processing Letters, vol. 23, no. 2, pp. 237-241, Feb. 2016, doi: 10.1109/LSP.2015.2509480.
[4]贾海蓉,王卫梅,王雁,裴俊华.区分性联合稀疏字典交替优化的语音增强[J].西安电子科技大学学报,2019,46(03):74-81.
[5]孙林慧,吴子皓,谢可丽,李平安.基于双层字典学习的单通道语音增强方法[J].信号处理,2020,36(06):1001-1012.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值