稀疏表示及区分性联合字典学习语音降噪算法
2020-05-14霍彦明
姜 峰,霍彦明,李 争
(河北科技大学 电气工程学院,河北 石家庄 050018)
E-mail :jiangfeng04@126.com
1 引 言
在日常生活中,不同类型的噪音常常会干扰到语音信号,而语音降噪的主要目标也是尽可能的在环境嘈杂的情况下,对原语音进行提取,降低原语音所处环境中的噪音,提高语音的可辨识度,对语音的质量予以优化,这便为解决噪声干扰问题提供了有效的方案[1].目前,语音降噪有多种思路,总体思路是基于IRM或者时频单元替换,文献[2]中估计的IRM和语音识别的VAD可以用更好的波束形成语音进行更新[2].近年来,深度神经网络在语音识别领域的应用取得了空前的成功.在现实世界的许多大词汇连续语音识别任务中,深度学习将识别错误率降低了三分之一,并且识别率也进入用户可接受的范围[3].目前的语音降噪算法主要有:谱减法[4]、维纳滤波算法[5]、基于统计模型算法[6]以及子空间算法[7]等.虽然这些算法在一定程度上解决了带噪语音的去噪问题,但都有不同程度的局限性.例如,谱减法容易产生较为粗糙的合成语音,而维纳滤波算法的最小均方误差意义下的最优估计是建立在平稳条件之上的.2006年,压缩感知理论[8]的提出为在信号处理领域中应用稀疏表示和字典学习理论做了铺垫.
对语音信号进行稀疏表示指的是在原子集合即字典中选取少数几个原子进行线性组合就能很好的近似该信号.因此字典学习的目的是找到语音信号的最优原子集合,使这些原子能够很好地反映语音信号的特征,从而能够以最稀疏的方式表示语音信号.传统的降噪方法是通过减少或去除噪声来获得纯净语音,而基于稀疏表示的语音降噪方法是从过完备字典中选择原子来表达纯净语音信号,将纯净语音从带噪语音中分离出来以实现降噪的目的[9].文献[10]中,为了能够得到具备判别能力的字典,其在字典学习的过程中添加了Fisher准则[10].文献[11]为了去除字典中元素的非负限制采用了K-SVD算法,使获得的字典更具一般性[11].文献[12]在频域上运用K-SVD算法训练纯净语音的过完备字典,运用最小角回归算法获得纯净语音信号谱的稀疏表示[12].文献[13]基于非负稀疏编码来实现语音降噪[13].
但是,上述模型都没有考虑两种字典对语音样本和噪声样本的区分性问题以及应对高维度信号运算速度不够快的问题.这是因为在字典学习过程中仅仅对每种类型的样本单独进行字典训练,训练后的字典中必然存在较相关的原子,从而造成降噪后的语音存在噪声残留及波形失真.而得到合适的相关性阈值需要通过大量实验予以验证,这会在一定程度上导致运算效率的降低[14].为解决上述问题,针对K-SVD算法的不足进行改进,提出一种新的字典训练算法双重稀疏K-SVD,使得改进后的算法能更准确的自适应获取字典和有助于更大规模更高维度的信号进行稀疏表示.同时,在字典学习阶段添加字典区分约束项使训练出的联合字典更具区分性,进而帮助带噪语音获得最优的降噪效果.
2 稀疏表示
稀疏表示是指尽量减少对非零系数的使用,来对原始信号的主要信息进行表示,从而实现简化信号处理问题以及压缩信息的目的.稀疏表示拥有更加简便、不死板和自我适应的优质特性,稀疏表示的模型是:
Y=DC+ε
(1)
其中,Y∈RM×1表示信号,D∈RM×N表示字典,字典中的每一列被称为一个原子,C∈RN×1为稀疏表示系数,ε∈RM×1表示误差向量.假设M为原子长度,N为字典维数.一般情况下M是小于N的,即字典是过完备的,所以这个线性问题是欠定的[15].信号本身或其在某个变换域中具有稀疏性是压缩感知理论重建信号的主要先决条件.如果字典矩阵的维数等条件不变,则信号越稀疏,就越容易将信号恢复.
用字典稀疏表示某一信号时,其目标就是找到最稀疏的表示系数即一种稀疏逼近过程.常见的有公式(2)与公式(3)两种形式:
(2)
(3)
其中,‖·‖2为l2范数,‖·‖1为l1范数,K是稀疏度约束,ε是近似误差约束.
3 K-SVD算法及其改进算法双重稀疏K-SVD
3.1 K-SVD算法概述
字典的构造一般有两种方法:使用固定字典的解析方法和自适应不同信号的字典学习方法.尽管使用固定字典的解析方法结构简单,计算也不复杂,但并没有对信号的特征信息加以应用.因此,利用该方法得到的字典,不仅原子形态单一,而且没有最大优化.而自我适应的字典学习方法则是根据信号的本身,对字典加以学习,通过捕获信号的特征信息去构建更匹配,更灵活的字典.
Aharon等学者在2006年提出了一种K-SVD字典训练算法.该算法是以误差最小原则为基础对误差项进行SVD分解,并选取使误差最小的分解项作为更新的字典原子和相应的原子系数,通过连续的迭代得到最优解[16].
K-SVD算法的每次迭代主要包括以下两个阶段:首先是稀疏编码阶段,采取稀疏分解优化算法求得满足所要实现的稀疏度的稀疏系数矩阵.其次是字典更新阶段,字典中的每一个原子都利用奇异值分解的方法进行更新.通过迭代使得对应于字典的稀疏表示系数矩阵足够稀疏是字典学习的主要目的,以提高算法的收敛速度.
3.2 双重稀疏K-SVD(D-Sparse K-SVD)算法
基于非负限制的K-SVD,稀疏分解字典D以得到子字典A,令其满足D=AB,便是双重稀疏K-SVD算法,其中B是A的稀疏矩阵.双重稀疏K-SVD算法对字典的稀疏表示可以使字典D的自适应性更好,同时提升了运算速度,有利于稀疏表示更高维度的信号.
定义Y为训练信号,其稀疏表示系数矩阵为C,双重稀疏K-SVD算法建立的目标函数可以使用公式(4)来表示:
(4)
双重稀疏K-SVD算法的具体过程如下:
令信号为Y,初始字典为D,子字典为A,信号与子字典的稀疏表示矩阵分别为C和B,目标原子与目标信号的稀疏度分别为w和t,迭代次数为L.
初始化:D=D(0);
字典更新阶段迭代:k=k+1,k=1,2,3,…,N,ck=ck/‖ck‖2(ck表示C的第k行);
ckεk=ck(YI-ABCI)(I为Y中指代ck的索引号);
bk=bk/‖bk‖2(bk表示B的第k行);
3.3 算法性能测试
为了比较这两种算法的性能,设计实验,构建一个随机字典,其大小为30×60,字典中的各项均为高斯随机变量,满足独立同分布,且已列归一化,以该字典为基础,形成4000个信号样本,其中每4个随机原子组合成一个样本,组合系数服从正态分布N(0,1).方差为0.1的零均值高斯随机噪声污染每个信号,对这组信号用两种算法各进行40次迭代,图1与图2展示了以平均表示误差和恢复原子的相对个数为评价指标的两种算法测试对比结果:
图1 平均表示误差
图2 恢复原子的相对个数
实验结果表明,两种算法都具有优越的性能,大约经过15次迭代,两种算法就都能让原始字典中的大多数原子恢复,随着迭代次数的增加,这两种算法下的平均表示误差均呈现递减的趋势,并最终都保持在0.1以下.从整个迭代过程来看,D-Sparse K-SVD算法的相对误差和收敛速度都优于K-SVD算法.
4 区分性联合字典语音降噪
4.1 联合字典
基于联合字典学习的语音增强算法具体流程如下[17]:
对单通道模型而言,如果只有加性噪声,经过采样得到的时域带噪音的语音信号可以表示为:
y(t)=s(t)+n(t)
(5)
其中,t表示采样点,y(t)、s(t)、n(t)分别表示带噪语音采样信号、纯净语音采样信号、噪声采样信号.由于语音信号在频域中的稀疏性,对公式(5)做短时傅里叶变换,对于第f频率点和第m帧可表示为:
Y(f,m)=S(f,m)+N(f,m)
(6)
对于相位信息来说,人耳不够敏感,通常只能处理频域信号的幅值部分,事先已经保留好的带噪语音相位信息放在了最终处理的语音信号的相位部分.公式(7)为公式(6)的矩阵形式:
Y=S+N
(7)
其中,Y∈RJ×M,S∈RJ×M,N∈RJ×M.J为总的频率索引数,M为总的帧索引数.
联合字典学习第t次迭代的稀疏编码要解决的问题为:
(8)
(9)
字典更新解决的问题为:
(10)
(11)
将DS和DN组合成联合字典D,在语音增强阶段,利用LARC算法并设置合适的相关性阈值μenh,将带噪语音信号Y(公式(12))在联合字典D上进行稀疏表示(公式(13)),从而得到纯净语音信号的幅度谱估计(公式(14)).
(12)
(13)
(14)
4.2 区分性联合字典
传统的基于联合字典学习的语音增强算法没有考虑到纯净语音样本和噪声样本之间的区别特征以及纯净语音字典和噪声字典之间的关系,在字典学习过程中仅针对每类样本单独训练字典,因此导致具有相关性的原子出现在训练后的字典当中,使得稀疏重构阶段更容易产生源混淆的情况.为了避免此类情况的发生,本文选择加入字典区分约束项,提出了基于区分性联合字典学习的语音降噪算法.同时,为了进一步提升运算效率,用D-Sparse K-SVD算法替代K-SVD算法应用于区分性联合字典学习中.
语音降噪的目标是当带噪语音在联合字典上进行稀疏表示时,必须保证每个信号只能被其所对应的字典稀疏表示,而不能被其他非对应字典稀疏表示.因此,可以得到如公式(15)所示目标函数:
(15)
目标函数由三部分组成,对样本Ai而言,可分别表示为在联合字典D上的稀疏表示误差、在其对应字典Di上的稀疏表示误差以及在其非对应字典Dj上的稀疏分解成分.
稀疏系数约束为:
fa(c)=‖Cj‖0≤T
(16)
Cj为C的第j列,T为系数向量的稀疏度约束,因此fa(c)为C的每一列的稀疏表示约束函数.
两种字典之间的相关性可以用两种字典之间最大的原子内积来衡量,因此可以用公式(17)所示目标函数来限制两种字典之间的相关性:
(17)
综上所述,区分性联合字典学习的目标函数为:
f(D,C)=fa(D,C)+fb(D)
(18)
求解区分性联合字典的目标函数最优化问题可分为两个阶段来实现:稀疏分解和字典更新.
稀疏分解阶段,为了让稀疏表示系数最优化,求解公式(19)时运用LARC算法.
(19)
第t次迭代的稀疏分解式如公式(20)所示:
(20)
字典更新阶段解决的是公式(21)目标函数的优化问题:
(21)
为了优化目标函数,本文选取有限记忆BFGS算法,此算法利用的是目标函数及其梯度来估计黑塞矩阵.所以,此算法比传统的拟牛顿法运算效率更高.
图3为本文提出的稀疏表示及区分性联合字典学习语音降噪算法的具体流程.
图3 稀疏表示及区分性联合字典学习语音降噪算法流程图
5 实验结果和讨论
5.1 实验设置
从NOIZEUS数据库中分别选取了男声女声各5句作为实验所需的纯净语音样本,并进行8k降采样,帧长取256,帧移50%.纯净语音和噪声字典的大小为200×800,采用D-Sparse K-SVD算法实现字典训练和语音稀疏重构,从训练样本中随机选取数据作为初始字典,训练迭代40次.采用NOISEX-92数据库中的volvo汽车噪声、白噪声和babble噪声作为噪声叠加源与纯净语音合成测试语音样本,在信噪比分别为-5dB、0dB、5dB和10dB的情况下进行测试.对比的算法是基于联合字典学习的语音增强算法,并分别使用主观语音质量评估(PESQ)[18]和分段信噪比(Segment SNR)[19]两种评价方式作为降噪后语音质量高低的衡量标准.
5.2 纯净语音字典与噪声字典之间相关性的验证
为了验证组合成区分性联合字典的两种子字典间的相关性,设计实验针对同一句纯净语音样本和volvo汽车噪声样本运用联合字典学习的语音增强算法和本文所提算法分别训练出各自的纯净语音字典DS和噪声字典DN,然后用公式(22)对这两种算法训练出的DS与DN进行相关性[20]计算:
αjk=|
(22)
其中,DS(:,j)表示DS的第j列原子,DN(:,k)表示DN的第k列原子.依据两种算法下所得αjk的结果分别绘制了图4和图5.
图4 联合字典的绝对相关系数统计
图5 区分性联合字典的绝对相关系数统计
如图5所示,区分性联合字典的绝对相关系数大多集中在0附近,而且基本上都低于0.5,由此可知基于区分性联合字典学习得到的两种字典间的相关程度要低于基于联合字典学习得到的两种字典间的相关程度.
5.3 语音降噪性能评测
表1和表2分别从PESQ和SegSNR两种评价方式入手对两种算法的性能进行了对比.从表1可以看出,在不同噪声条件不同输入信噪比下,区分性联合字典算法的PESQ 值均比联合字典算法的高.尤其在噪声类型为白噪声,输入信噪比为5dB和10dB的情况下,区分性联合字典算法相对于联合字典算法有更高的提升幅度;从表2可以看出,在不同噪声条件不同输入信噪比下,区分性联合字典算法的SegSNR都要比联合字典算法的高.运用联合字典算法提升作用不明显的类语音噪声,如babble噪声,区分性联合字典算法的提升效果要显著优于联合字典算法.
表1 两种算法的PESQ值评测对比
Table 1 Comparison of PESQ values of two algorithms
噪声类型输入信噪比/dBPESQ值联合字典男女区分性联合字典男女-52.63562.61252.79952.7762Volvo汽车噪声02.90572.89373.11233.015953.11273.10583.47593.4021103.52093.50373.72513.6937-51.31231.29171.61351.5939白噪声01.61251.60311.85611.832151.78311.70212.49672.4035102.09871.97632.93582.8977-51.79311.76272.29162.2879Babble噪声02.10762.09312.50172.472352.43272.39172.76392.7136102.77692.71393.11353.1026
表2 两种算法的SegSNR结果评测对比
Table 2 Comparison of SegSNR results of two algorithms
噪声类型输入信噪比/dBSegSNR /dB联合字典男女区分性联合字典男女-52.33152.45313.97693.9878volvo汽车噪声04.51294.67386.11346.225756.00125.93558.76218.9012108.52168.631410.211310.0135-50.96590.79563.80234.0117白噪声05.16764.46798.02137.789159.81299.901312.186912.51121011.347911.631515.157816.3412-5-4.1231-4.0569-3.2516-3.1578babble噪声0-2.7961-2.5987-1.0314-1.00255-1.0121-1.11381.29611.3687101.53211.67213.01253.2037
从测试情况看,本文所提算法性能相对稳定,具备响应速度快,准确率高,实用性强的优点.因此,本文所提算法成功解决了由联合字典学习引起的源混淆与源失真问题.
6 结 论
本文针对字典的区分性及其算法存在的问题,提出更符合实际需求的区分性联合字典以及计算时间更高效的双重稀疏K-SVD算法,通过在字典间添加字典区分约束项,提高训练字典的区分能力;通过改进K-SVD算法,令初始字典进一步稀疏分解来产生子字典,使最终获得的字典自适应性更强,降低了计算的复杂度.实验结果表明,区分性联合字典有效减少了重构语音中的残留噪声与失真成分,双重稀疏K-SVD算法可以显著减少计算时间,同时确保语音的降噪质量,验证了本文算法的有效性及实用性.