清华大学数字语音处理之语音增强
更新时间:2023-09-27 19:39:01 阅读量: 综合文库 文档下载
- 清华大学数字媒体技术推荐度:
- 相关推荐
数字语音处理之语音增强
MATLAB仿真
学 校 清华大学
专 业 通 信 工 程
班 级 x xxx 学 号 xxx 姓 名 x x x
xxxx年xx月xx日
目 录
一、引言………………………………………………………1 二、语音增强算法……………………………………………1 1、算法 ………………………………………………………1 2、算法实现(源程序)………………………………………2 3、改善算法,减少噪声干扰 ………………………………6
一、引言
语音增强的目标是从含有噪声的语音信号中提取尽可能纯净的原始语音。然而,由于干扰通常都是随机的,从带噪语音中提取完全纯净的语音几乎不可能。在这种情况下,语音增强的目的主要有两个:一是改进语音质量,消除背景噪音,使听者乐于接受,不感觉疲劳,这是一种主观度量;二是提高语音可懂度,这是一种客观度量。这两个目的往往不能兼得,所以实际应用中总是视具体情况而有所侧重的。
带噪语音的噪声类型可以分为加性噪声和非加性噪声。加性噪声有宽带的,窄带的,平稳的,非平稳的,白噪声,有色噪声,等;非加性噪声如乘性噪声,卷积噪声等。一般,语音增强处理的噪声指环境中的噪声,而这些噪声主要是高斯白噪声,这种噪声一般符合如下的假设:
(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)的估计,
1
则对纯净语音幅度谱的估量表示为
把带噪语音的相位
当作是纯净语音的相位,那么纯净语音频谱的估量为
2、算法实现(源程序)
%Spectral Subtraction Algorithm winsize=256; %窗长 n=0.05; % 噪声电平
[speech,fs,nbits]=wavread('shewai.wav'); % 读入数据 size=length(speech);
numofwin=floor(size/winsize); % 帧数
%加窗
ham=hamming(winsize)'; %Generates Hamming Window hamwin=zeros(1,size); %Vector for window gain enhanced=zeros(1,size); %Vector for enhanced speech
%产生带噪声信号
x=speech'+ n*randn(1,size); %Contaminates signal with white noise %噪声估计
noise=n*randn(1,winsize); %Sample of noise N = fft(noise);
nmag= abs(N); %Estimated noise magnitude spectrum for q=1:2*numofwin-1
frame=x(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2); P percent overlap
hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+ham; %Window gain %对带噪声语音进行DFT y=fft(frame.*ham);
mag = abs(y); %Magnitude Spectrum phase = angle(y); %Phase Spectrum %幅度谱减
for i=1:winsize
2
if mag(i)-nmag(i)>0
clean(i)= mag(i)-nmag(i); else
clean(i)=0; end end
%在频域中重新合成语音
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
%除去汉宁窗引起的增益 for i=1:size if hamwin(i)==0
enhanced(i)=0; else
enhanced(i)=enhanced(i)/hamwin(i); end end
SNR1 = 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(['Original Voice (n=',num2str(n),')' ]); figure(2),specgram(speech'); %原始语音语谱
title(['Original Voice (n=',num2str(n),')' ]); figure(1),subplot(3,1,2); plot(t/fs,x); xlabel('time(s)');
title(['Noise Added (SNR=',num2str(SNR1),'dB)']); figure(3),specgram(x); %加噪语音语谱
title(['Noise Added (SNR=',num2str(SNR1),'dB)']); figure(1),subplot(3,1,3);plot(t/fs,enhanced); xlabel('time(s)');
title(['Improved Voice (SNR=',num2str(SNR2),'dB)']); figure(4),specgram(enhanced); %增强语音语谱
title(['Improved Voice (SNR=',num2str(SNR2),'dB)']);
运行结果:
3
正在阅读:
清华大学数字语音处理之语音增强09-27
《沁园春·长沙》同步练习12-01
第三章 三角函数、解三角形 阶段质量检测08-10
教师资格考试思维品质03-29
19-3波函数、薛定谔方程_12_0907-21
2010计算机考研大纲解读:计算机网络06-06
数据结构C语言版 无向图的邻接多重表存储表示和实现08-11
石太路基施工施组施组10-03
疫情下思考_预备党员心得感悟09-10
自动测试系统课外练习12-01