您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 畜牧/养殖 > 语音增强报告(谱减法和维纳滤波)
-1-SpeechEnhancement一、语音增强方法的理论分析…………………………………21.引言……………………………………………………………………22.语音增强算法…………………………………………………………22.1谱减法…………………………………………………………22.2Wiener滤波法…………………………………………………3二、谱减法……………………………………………………………51.算法实现………………………………………………………………52.改善算法,减少音乐噪声……………………………………………9三、Wiener滤波法…………………………………………………111.算法实现……………………………………………………………112.迭代Wiener滤波的算法实现………………………………………14四、Wiener滤波法与谱减法的比较……………………………17五、参考文献…………………………………………………………17-2-一、语音增强方法的理论分析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)的估计,则对纯净语音幅度谱的估量表示为-3-把带噪语音的相位𝜃𝑦(𝑒𝑗𝜔)当作是纯净语音的相位,那么纯净语音频谱的估量为2.2wiener滤波法一个线性系统,如果它的单位样本响应为h(n),当输入一个随机信号x(n),且其中s(n)表示信号,)(n表示噪声,则输出y(n)为mmnxmhny)()()(我们希望x(n)通过线性系统h(n)后得到的y(n)尽量接近于s(n),因此称y(n)为s(n)的估计值,用)(ˆns表示,即)(ˆ)(nsny维纳滤波器的输入—输出关系为:h(n))(ˆ)(nsny)()()(nnsnx如上图所示。这个线性系统h(n)称为对于s(n)的一种估计器。如果我们以s与ŝ分别表示信号的真值与估计值,而用e(n)表示它们之间的误差,即)(ˆ)()(nsnsne显然,e(n)可能是正的,也可能是负的,并且它是一个随机变量。因此,用它的均方值来表达误差是合理的,所谓均方误差最小即它的平方的统计平均值最小:22)ˆ()(ssEneE最小已知希望输出为:)()()(nnsnx-4-10ˆ()()()()Nmynsnhmxnm误差为:10ˆ()()()()()()Nmensnsnsnhmxnm均方误差为:1220()(()()())NmEenEsnhmxnm上式对()m=0,1,,N-1hm求导得到:102(()()())()00,1,21NoptmEsnhmxnmxnjjN进一步得:10()()()()()0,1,1NoptmEsnxnjhmExnmxnjjN从而有:10()()()0,1,2,,1NxsoptxxmRjhmRjmjN于是就得到N个线性方程:0(0)(0)(0)(1)(1)(1)(1)1(1)(0)(1)(1)(0)(1)(2)1(1)(0)(1)(1)(2)(1)(0)xsxxxxxxxsxxxxxxxsxxxxxxjRhRhRhNRNjRhRhRhNRNjNRNhRNhRNhNR写成矩阵形式为:(0)(1)(1)(0)(0)(1)(0)(2)(1)(1)(1)(2)(0)(1)(1)xxxxxxxsxxxxxxxsxxxxxxxsRRRNRhRRRNRhRNRNRRNhN简化形式:xxxsRHR-5-其中:H=[h(0)h(1)h(N-1)]'是滤波器的系数(0),(1),(1)'xsxsxsxsRRRRN是互相关序列(0)(1)(1)(1)(0)(2)(1)(2)(0)xxxxxxxxxxxxxxxxxxxxRRRNRRRNRRNRNR是自相关矩阵由上可见,设计维纳滤波器的过程就是寻求在最小均方误差下滤波器的单位脉冲响应或传递函数的表达式,其实质就是解维纳-霍夫(Wiener-Hopf)方程。另外,设计维纳滤波器要求已知信号与噪声的相关函数。二、谱减法1.算法实现%SpectralSubtractionAlgorithmwinsize=256;%窗长n=0.05;%噪声电平[speech,fs,nbits]=wavread('speech_clean.wav');%读入数据size=length(speech);numofwin=floor(size/winsize);%帧数%加窗ham=hamming(winsize)';%GeneratesHammingWindowhamwin=zeros(1,size);%Vectorforwindowgainenhanced=zeros(1,size);%Vectorforenhancedspeech%产生带噪声信号x=speech'+n*randn(1,size);%Contaminatessignalwithwhitenoise%噪声估计noise=n*randn(1,winsize);%SampleofnoiseN=fft(noise);nmag=abs(N);%Estimatednoisemagnitudespectrumforq=1:2*numofwin-1frame=x(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2);%50percentoverlaphamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+ham;%Windowgain%对带噪声语音进行DFTy=fft(frame.*ham);mag=abs(y);%MagnitudeSpectrumphase=angle(y);%PhaseSpectrum%幅度谱减fori=1:winsizeifmag(i)-nmag(i)0-6-clean(i)=mag(i)-nmag(i);elseclean(i)=0;endend%在频域中重新合成语音spectral=clean.*exp(j*phase);%IDFT并重叠想加enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+real(ifft(spectral));end%除去汉宁窗引起的增益fori=1:sizeifhamwin(i)==0enhanced(i)=0;elseenhanced(i)=enhanced(i)/hamwin(i);endendSNR1=10*log10(var(speech')/var(noise));%加噪语音信噪比SNR2=10*log10(var(speech')/var(enhanced-speech'));%增强语音信噪比wavwrite(x,fs,nbits,'noise.wav');%输出带噪信号wavwrite(enhanced,fs,nbits,'enhanced.wav');%输出增强信号t=1:size;figure(1),subplot(3,1,1);plot(t/fs,speech');%原始语音波形xlabel('time(s)');title(['OriginalVoice(n=',num2str(n),')']);figure(2),specgram(speech');%原始语音语谱title(['OriginalVoice(n=',num2str(n),')']);figure(1),subplot(3,1,2);plot(t/fs,x);xlabel('time(s)');title(['NoiseAdded(SNR=',num2str(SNR1),'dB)']);figure(3),specgram(x);%加噪语音语谱title(['NoiseAdded(SNR=',num2str(SNR1),'dB)']);figure(1),subplot(3,1,3);plot(t/fs,enhanced);xlabel('time(s)');title(['ImprovedVoice(SNR=',num2str(SNR2),'dB)']);figure(4),specgram(enhanced);%增强语音语谱title(['ImprovedVoice(SNR=',num2str(SNR2),'dB)']);-7--8--9-2.改善算法、减少音乐噪声白噪声的短时功率谱上既有波峰,又有波谷。在一帧里,它们的频率分布是随机的;在帧与帧之间,它们的频率和幅度也是随机变化的。当我们从带噪语音的频谱中减去我们估计的噪声谱,所有的带噪语音频谱峰值都会变小,而谷值由于小于估计的噪声值被置零。因此,进行谱减法之后,在频谱上只留下波峰。在这些留下的波峰中,频带较宽的部分被视为时变宽带噪声,频带较窄的部分则被当成时变音调,也就是所谓的音乐噪声。我们改善的算法为:其中,𝑃′𝑠(𝑤)是所求的语音幅度谱,𝑃𝑠(𝑤)是带噪语音幅度谱,𝑃𝑛(𝑤)是估计的噪声幅度谱。当α1,改善的算法通过消除那些宽波峰,去除所有的宽频带噪声。然后,提高频谱下限β𝑃𝑛(𝑤),使得波峰与波峰间的波谷不会那么深。两者结合,使噪声波峰间的频谱偏移不再那么大,从而减少了音乐噪声。程序如下:%·幅度谱减fori=1:winsized(i)=mag(i)-2.5*nmag(i);f(i)=0.01*nmag(i);ifd(i)f(i)clean(i)=d(i);elseclean(i)=f(i);en
本文标题:语音增强报告(谱减法和维纳滤波)
链接地址:https://www.777doc.com/doc-6698595 .html