预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共17页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

SpeechEnhancement语音增强方法的理论分析…………………………………21.引言……………………………………………………………………22.语音增强算法…………………………………………………………22.1谱减法…………………………………………………………22.2Wiener滤波法…………………………………………………3二、谱减法……………………………………………………………51.算法实现………………………………………………………………52.改善算法减少音乐噪声……………………………………………9三、Wiener滤波法…………………………………………………111.算法实现……………………………………………………………112.迭代Wiener滤波的算法实现………………………………………14四、Wiener滤波法与谱减法的比较……………………………17五、参考文献…………………………………………………………17语音增强方法的理论分析1.引言语音增强的目标是从含有噪声的语音信号中提取尽可能纯净的原始语音。然而由于干扰通常都是随机的从带噪语音中提取完全纯净的语音几乎不可能。在这种情况下语音增强的目的主要有两个:一是改进语音质量消除背景噪音使听者乐于接受不感觉疲劳这是一种主观度量;二是提高语音可懂度这是一种客观度量。这两个目的往往不能兼得所以实际应用中总是视具体情况而有所侧重的。带噪语音的噪声类型可以分为加性噪声和非加性噪声。加性噪声有宽带的窄带的平稳的非平稳的白噪声有色噪声等;非加性噪声如乘性噪声卷积噪声等。一般语音增强处理的噪声指环境中的噪声而这些噪声主要是高斯白噪声这种噪声一般符合如下的假设:(1)噪声是加性的。(2)噪声是局部平稳的。局部平稳是指一段加噪语音中的噪声具有和语音段开始前那段噪声相同的统计特性且在整个语音段中保持不变。也就是说可以根据语音开始前那段噪声来估计语音中所叠加的噪声统计特性。(3)噪声与语音统计独立或不相关。2.语音增强算法根据语音和噪声的特点出现了很多种语音增强算法。比较常用的有噪声对消法、谱相减法、维纳滤波法、卡尔曼滤波法、FIR自适应滤波法等。此外随着科学技术的发展又出现了一些新的增强技术如基于神经网络的语音增强、基于HMM的语音增强、基于听觉感知的语音增强、基于多分辨率分析的语音增强、基于语音产生模型的线性滤波法、基于小波变换的语音增强方法、梳状滤波法、自相关法、基于语音模型的语音增强方法等。此处主要介绍谱减法和wiener滤波法。2.1谱减法使用谱减法是假设:噪声叠加;声与语音不相关;③对纯净语音无先验知识;对统计噪声有先验知识。带噪语音模型为:y(n)=x(n)+v(n)式中y(n)是带噪语音s(n)是纯净语音v(n)是噪声。对式子两边进行傅立叶变换得Y(k)=X(k)+N(k)由于对噪声的统计参数的未知所以在实际应用中通常使用非语音段噪声谱的均值来作为对噪声谱N(k)的估计则对纯净语音幅度谱的估量表示为把带噪语音的相位θy(ejω)当作是纯净语音的相位那么纯净语音频谱的估量为2.2wiener滤波法一个线性系统如果它的单位样本响应为h(n)当输入一个随机信号x(n)且其中s(n)表示信号表示噪声则输出y(n)为我们希望x(n)通过线性系统h(n)后得到的y(n)尽量接近于s(n)因此称y(n)为s(n)的估计值用表示即维纳滤波器的输入—输出关系为:如上图所示。这个线性系统h(n)称为对于s(n)的一种估计器。如果我们以s与s分别表示信号的真值与估计值而用e(n)表示它们之间的误差即显然e(n)可能是正的也可能是负的并且它是一个随机变量。因此用它的均方值来表达误差是合理的所谓均方误差最小即它的平方的统计平均值最小:最小已知希望输出为:误差为:均方误差为:上式对求导得到:进一步得:从而有:于是就得到N个线性方程:写成矩阵形式为:简化形式:其中:是滤波器的系数是互相关序列是自相关矩阵由上可见设计维纳滤波器的过程就是寻求在最小均方误差下滤波器的单位脉冲响应或传递函数的表达式其实质就是解维纳-霍夫(Wiener-Hopf)方程。另外设计维纳滤波器要求已知信号与噪声的相关函数。二、谱减法1.算法实现%SpectralSubtractionAlgorithmwinsize=256;%窗长n=0.05;%噪声电平[speechfsnbits]=wavread('speech_clean.wav');%读入数据size=length(speech);numofwin=floor(size/winsize);%帧数%加窗ham=hamming(winsize)';%GeneratesHammingWind