清华大学数字语音处理之语音增强

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数字语音处理之语音增强MATLAB仿真学校清华大学专业通信工程班级xxxx学号xxx姓名xxxxxxx年xx月xx日目录一、引言………………………………………………………1二、语音增强算法……………………………………………11、算法………………………………………………………12、算法实现(源程序)………………………………………23、改善算法,减少噪声干扰………………………………61一、引言语音增强的目标是从含有噪声的语音信号中提取尽可能纯净的原始语音。然而,由于干扰通常都是随机的,从带噪语音中提取完全纯净的语音几乎不可能。在这种情况下,语音增强的目的主要有两个:一是改进语音质量,消除背景噪音,使听者乐于接受,不感觉疲劳,这是一种主观度量;二是提高语音可懂度,这是一种客观度量。这两个目的往往不能兼得,所以实际应用中总是视具体情况而有所侧重的。带噪语音的噪声类型可以分为加性噪声和非加性噪声。加性噪声有宽带的,窄带的,平稳的,非平稳的,白噪声,有色噪声,等;非加性噪声如乘性噪声,卷积噪声等。一般,语音增强处理的噪声指环境中的噪声,而这些噪声主要是高斯白噪声,这种噪声一般符合如下的假设:(1)噪声是加性的。(2)噪声是局部平稳的。局部平稳是指一段加噪语音中的噪声,具有和语音段开始前那段噪声相同的统计特性,且在整个语音段中保持不变。也就是说,可以根据语音开始前那段噪声来估计语音中所叠加的噪声统计特性。(3)噪声与语音统计独立或不相关。二、语音增强算法根据语音和噪声的特点,出现了很多种语音增强算法。比较常用的有噪声对消法、谱相减法、维纳滤波法、卡尔曼滤波法、FIR自适应滤波法等。此外,随着科学技术的发展又出现了一些新的增强技术,如基于神经网络的语音增强、基于HMM的语音增强、基于听觉感知的语音增强、基于多分辨率分析的语音增强、基于语音产生模型的线性滤波法、基于小波变换的语音增强方法、梳状滤波法、自相关法、基于语音模型的语音增强方法等。此处主要介绍谱减法。1、算法使用谱减法是假设:①噪声叠加;②声与语音不相关;③对纯净语音无先验知识;③对统计噪声有先验知识。带噪语音模型为:y(n)=x(n)+v(n)式中,y(n)是带噪语音,s(n)是纯净语音,v(n)是噪声。对式子两边进行傅立叶变换,得Y(k)=X(k)+N(k)由于对噪声的统计参数的未知,所以在实际应用中,通常使用非语音段噪声谱的均值来作为对噪声谱N(k)的估计,2则对纯净语音幅度谱的估量表示为把带噪语音的相位当作是纯净语音的相位,那么纯净语音频谱的估量为2、算法实现(源程序)%SpectralSubtractionAlgorithmwinsize=256;%窗长n=0.05;%噪声电平[speech,fs,nbits]=wavread('shewai.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:winsize3ifmag(i)-nmag(i)0clean(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)']);运行结果:4563、改善算法,减少噪声干扰白噪声的短时功率谱上既有波峰,又有波谷。在一帧里,它们的频率分布是随机的;在帧与帧之间,它们的频率和幅度也是随机变化的。当我们从带噪语音的频谱中减去我们估计的噪声谱,所有的带噪语音频谱峰值都会变小,而谷值由于小于估计的噪声值被置零。因此,进行谱减法之后,在频谱上只留下波峰。在这些留下的波峰中,频带较宽的部分被视为时变宽带噪声,频带较窄的部分则被当成时变音调,也就是所谓的音乐噪声。改善的算法为:其中,是所求的语音幅度谱,是带噪语音幅度谱,是估计的噪声幅度谱。当,改善的算法通过消除那些宽波峰,去除所有的宽频带噪声。然后,提高频谱下限,使得波峰与波峰间的波谷不会那么深。两者结合,使噪声波峰间的频谱偏移不再那么大,从而减少了音乐噪声。程序如下:%·幅度谱减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);endend运行结果:7

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功