估值,从而得到纯净语音的频谱。由于人耳对语音频谱分量的相位不敏感,因而这种方法主要针对短时幅度谱。所谓“谱相减”就是从输入信号的幅度谱中减去估计得来的噪声平均幅度谱,其效果相当于在变换域对带噪信号进行了某种均衡化处理。相对于其它方法,谱相减法引入的约束条件最少,物理意义最直接,运算量小,而且经过改进后效果也较好。
传统的谱减法即在频域将带噪语音的功率谱减去噪声的功率谱,得到语音的功率谱估计,开方后就得到语音幅度估计,将其相位恢复后再采用逆傅立叶变换恢复时域信号。考虑到人耳对相位的感觉不灵敏,相位恢复时所采用的相位是带噪语音的相位信息。
由于语音是短时平稳的,所以在短时谱幅度估计中认为它是平稳随机信号,假设s?m?、n?m?和y?m?分别代表语音、噪声和带噪语音,Ss(?)、Sn(?)和Sy(?) 分别表示其短时谱。假设噪声n?m?是与语音s?m?不相关的加性噪声。于是得到信号的加性模型:
y?m??s?m??n?m? (3-1)
经过加窗处理后的信号分别表示为yw?m?,sw?m?,nw?m?,则有
yw?m??sw?m??nw?m? (3-2) 对上式两端分别做傅立叶变换,得
YW?w??SWw?NW?w? (3-3)
对功率谱有
Yw?w?Sw?w??Sw?w??Nw?w??Sw?w?N?w?w??S?w?w??S2222?w?w?Nw?w? (3-4)
可以根据观测数据估计|Yw(?)|2,其余各项必须近似为统计均值。由于错误!未
找到引用源。和n?m?独立,则互相的统计均值为0,所以原始语音的估值为
S?w??Yw?w??ENw?w?2?2?2? (3-5)
为了估计噪声功率,采用了端点检测法。因为噪声是局部平稳的,故可以认为发音前的噪声与发音期间的噪声功率谱相同,因而可以利用发语音前的“寂静帧”
来估计噪声。
从(3-5)式中可以看出,估计值S?w?不能保证是非负的,这是因为在估计噪声时存在误差,当估计噪声平均功率大于某帧带噪语音功率时,该帧得出的估计值这些负值我们可以通过改变它们的符号使之变为正S?w?就会出现为负的情况,
值,也可以直接给它们置零,本文我们采用后种处理方式。
只要在频域用(3-5)式得到纯净语音的谱估计,就可以根据(3-6)式得到增强后的语音。
???s?m??IFFT?sw???ej??w?? 3-6)
????2?2如前面分析,利用人耳对相位不敏感的特点,在式(3-6)中可利用原带噪语音的相位恢复到时域语音信号,从而得到处理后的语音信号,完成整个基于谱减法的语音增强过程。
根据前面分析,我们可以给出谱相减算法的整个算法流程,如图3-1所示:
带噪语音y(m)FFT |Yw(?)|2 减去估计噪声 相位信息 E[|Nw(?)|2] 增强后的语音s(m) ?IFFT |Sw(?)|1/2
图3-1 谱减法的算法流程
3.2 谱减法建立的假设
谱减法的建立要基于以下几点假设:
(1) 噪声信号和语音信号是互不相关的(独立的),并且在频域是加性的关
系。
(2) 背景噪声环境相对于语音活动区域来说是近似稳态的,这样就可以利用在无声段估测的平均噪声谱来逼近有声段的噪声谱。
(3) 如果背景噪声环境变化到一个新的稳态,则应有足够的时间(约300ms左右)以便于估计出新的背景噪声谱幅度估值。
(4) 对于缓慢变化的非平稳噪声环境,谱减法算法中有话音激活检测环节以
便适时的判断并进行调整。
(5) 假设主要噪声影响的消除可以通过仅仅从带噪语音谱幅度中减去噪声
而实现。
3.3 实现过程
3.3.1 基于谱减法的语音增强算法流程
本文采用了MATLAB语言实现了整个基于谱减法的语音增强算法,具体MATLAB程序见附录,其算法流程如下:
(1)对输入的语音信号进行预滤波; (2)对滤波后的语音信号进行预加重;
(3)将语音信号按每帧128个信号点进行分帧,帧移为64; (4)对信号帧加汉明窗(Haming); (5)对加窗后的信号帧进行FFT变换; (6)对各帧语音信号求功率谱; (7)根据前20帧求取平均噪声功率;
(8)利用VAD进行噪声估计检测寂静段,进而组合递归平滑,更新噪声谱; (9)进行谱减运算,得到估计出的语音信号功率谱; (10)插入相位谱,计算出语音谱; (11)进行IFFT变换,得到还原的语音帧; (12)根据各个语音帧组合为语音信号;
(13)对语音信号进行去加重处理,得到最终信号。
根据以上谱减法的算法流程,采用MATLAB语言进行仿真试验,试验用的
语音材料是WAV格式的语音,经处理后去噪效果明显,较好地抑制了噪声,提高了语音的可懂度。
3.3.2 仿真实验的结果
在仿真实验中,采用的是在实验室内录制的纯净男语音信号“基于谱减法的语音增强”,采样率8kHz,使用MATLAB函数wavread( )调用,在程序中对纯净语音加入高斯白噪声,调用MATLAB函数wavwrite( )进行输出,命名为“noised”。根据谱减法的假设:假定纯净语音与高斯白噪声相互独立,故我们可将两者直接相加得到带噪的语音信号。
当得到带噪语音信号后,对其进行谱减去噪处理,便到去噪后的语音信号,并调用MATLAB函数的wavwrite( )进行输出,命名为“zong”。从声音文件的测听效果来说,是令人满意的。
在本论文的MATLAB程序中,分别画出了加噪语音 (见图3-5)、增强后语音 (见图3-6)的语音图。从的语音图中可以很容易发现,本论文提出的算法具较明显的去噪效果。
0.20-0.20.511.52x 1040.30.20.10-0.1-0.20.511.52x 104
图3-5带噪语音信号(上) 增强后的语音信号(下)
400Frequency20000510Time1520500400Frequency30020010000510Time1520
图3-6带噪语谱信号(上) 增强后的语谱信号(下)
三、改善算法、减少音乐噪声
白噪声的短时功率谱上既有波峰,又有波谷。在一帧里,它们的频率分布是随机的;在帧与帧之间,它们的频率和幅度也是随机变化的。当我们从带噪语音的频谱中减去我们估计的噪声谱,所有的带噪语音频谱峰值都会变小,而谷值由于小于估计的噪声值被置零。因此,进行谱减法之后,在频谱上只留下波峰。在这些留下的波峰中,频带较宽的部分被视为时变宽带噪声,频带较窄的部分则被当成时变音调,也就是所谓的音乐噪声。
我们改善的算法为:
letD?w??ps?w???Pn?w?Ps??w???D?w?,ifD?w???Pn?w??Pn?w?,otherwisewith??1,and0????1
其中,错误!未找到引用源。是所求的语音幅度谱,错误!未找到引用源。是带