语音信号处理.docx
《语音信号处理.docx》由会员分享,可在线阅读,更多相关《语音信号处理.docx(19页珍藏版)》请在冰豆网上搜索。
语音信号处理
实验四减谱法语音增强技术研究
一、实验目的
本实验要求掌握减谱法语音增强的原理,会利用已学的相关语音特征,构建语音特征矢量,然后自己设计减谱法语音增强程序(也可参考相关文献),能显示干净语音和加噪语音信号及处理后的结果语音信号波形,分析实验结果,写出报告。
二、实验原理
谱减法的基本原理
谱相减方法是基于人的感觉特性,即语音信号的短时幅度比短时相位更容易对人的听觉系统产生影响,从而对语音短时幅度谱进行估计,适用于受加性噪声污染的语音。
由于语音是短时平稳的,所以在短时谱幅度估计中认为它是平稳随机信号,假设
、
和
分别代表语音、噪声和带噪语音,
、
和
分别表示其短时谱。
假设噪声
是与语音
不相关的加性噪声。
于是得到信号的加性模型:
(4-1)
对功率谱有
(4-4)
原始语音的估值为
(4-5)
只要在频域用(4-5)式得到纯净语音的谱估计,就可以根据(4-6)式得到增强后的语音。
(4-6)
根据前面分析,我们可以给出谱相减算法的整个算法流程,如图4-1所示:
带噪语音啊
图4-1谱减法的算法流程
三、实验程序
1、噪声叠加到信号上的比较
%在噪声环境下语音信号的增强
%语音信号为读入的声音文件
%噪声为正态随机噪声
clear;
input=wavread('C:
\Users\Administrator\Desktop\yuyinxinhao\b1.wav');
count=length(input);
noise1=0.1*randn(1,count);
signal=input;
fori=1:
count
voice1(i)=signal(i)+noise1(i);
end
noise2=0.01*randn(1,count);
fori=1:
count
voice2(i)=signal(i)+noise2(i);
end
noise3=randn(1,count);
signal=input;
fori=1:
count
voice3(i)=signal(i)+noise3(i);
end
n=1:
count;
figure%对比纯净语音信号,噪音信号和带噪语音信号
subplot(3,1,1);
plot(n,signal);
title('纯净信号')
subplot(3,1,2);
plot(n,noise1);
title('噪音信号')
subplot(3,1,3);
plot(n,voice1);
title('带噪信号')
figure%对比纯净语音信号频谱,噪音信号和带噪信号频谱
Fss=fft(signal);
subplot(3,1,1);
plot(n,abs(Fss));
title('纯净信号频谱')
Fss1=fft(noise1);
subplot(3,1,2);
plot(n,abs(Fss1));
title('噪音信号频谱')
Fv1=fft(voice1);
subplot(3,1,3)
plot(n,abs(Fv1));
title('带噪信号的频谱')
figure%对比纯净语音信号,噪音信号和带噪语音信号
subplot(3,1,1);
plot(n,signal);
title('纯净信号')
subplot(3,1,2);
plot(n,noise2);
title('噪音信号')
subplot(3,1,3);
plot(n,voice2);
title('带噪信号')
figure%对比纯净语音信号频谱,噪音信号和带噪信号频谱
Fss=fft(signal);
subplot(3,1,1);
plot(n,abs(Fss));
title('纯净信号频谱')
Fss2=fft(noise2);
subplot(3,1,2);
plot(n,abs(Fss2));
title('噪音信号频谱')
Fv2=fft(voice2);
subplot(3,1,3)
plot(n,abs(Fv2));
title('带噪信号的频谱')
figure%对比纯净语音信号,噪音信号和带噪语音信号
subplot(3,1,1);
plot(n,signal);
title('纯净信号')
subplot(3,1,2);
plot(n,noise3);
title('噪音信号')
subplot(3,1,3);
plot(n,voice3);
title('带噪信号')
figure%对比纯净语音信号频谱,噪音信号和带噪信号频谱
Fss=fft(signal);
subplot(3,1,1);
plot(n,abs(Fss));
title('纯净信号频谱')
Fss3=fft(noise3);
subplot(3,1,2);
plot(n,abs(Fss3));
title('噪音信号频谱')
Fv3=fft(voice3);
subplot(3,1,3)
plot(n,abs(Fv3));
title('带噪信号的频谱')
2、利用减谱法的基本原理给语音信号降噪
噪声为0.1*randn(1,coun)纯净信号为输入信号
%在噪声环境下语音信号的增强
%语音信号为读入的声音文件
%噪声为正态随机噪声
clear;
input=wavread('C:
\Users\Administrator\Desktop\yuyinxinhao\b1.wav');
count=length(input);
noise=1*randn(1,count);
signal=input';
fori=1:
count
voice(i)=signal(i)+noise(i);
end
Fv=fft(voice);
anglev=angle(Fv);
Fn=fft(noise);
power1=(abs(Fv)).^2;
power2=(abs(Fn)).^2;
power3=power1-power2;
power4=sqrt(power3);
Fs=power4.*exp(j*anglev);
sound=ifft(Fs);
n=1:
count;
%纯净语音信号频谱
Fss=fft(signal);
figure%对比纯净语音信号和输出信号
subplot(2,1,1)
plot(n,signal);
title('纯净信号')
subplot(2,1,2)
plot(n,sound);
title('输出信号')
figure%对比纯净语音信号频谱和输出语音信号频谱
subplot(2,1,1)
plot(n,abs(Fss));
title('纯净信号频谱')
subplot(2,1,2)
plot(n,abs(Fs));
title('输出信号频谱')
max_v=max(voice);%对带噪信号抽样值点进行归一化处理
re_voice=voice/max_v;
%对输出信号抽样点值进行归一化处理
max_s=max(sound);
re_sound=sound/max_s;
%读出带噪语音信号,存为'1001.wav'
wavwrite(re_voice,5500,16,'1001');
%读出处理后语音信号,存为'1002.wav'
wavwrite(re_sound,5500,16,'1002')
3、利用改进的减谱法给语音信号降噪
噪声为0.1*randn(1,coun)纯净信号为输入信号
%在噪声环境下语音信号的增强
%语音信号为读入的声音文件
%噪声为正态随机噪声
clear;
input=wavread('C:
\Users\Administrator\Desktop\yuyinxinhao\b1.wav');
count=length(input);
noise=0.1*randn(1,count);
signal=input';
fori=1:
count
voice(i)=signal(i)+noise(i);
end
Fv=fft(voice);
anglev=angle(Fv);
Fn=fft(noise);
power1=(abs(Fv)).^2;
power2=(abs(Fn)).^2;
fori=1:
count
if(power1(i)>=3*power2(i))
power3(i)=power1(i)-3*power2(i);
else
power3(i)=0.01*power2(i);
end
end
power4=sqrt(power3);
Fs=power4.*exp(j*anglev);
sound=ifft(Fs);
n=1:
count;
%纯净语音信号频谱
Fss=fft(signal);
figure%对比纯净语音信号和输出信号
subplot(2,1,1)
plot(n,signal);
title('纯净信号')
subplot(2,1,2)
plot(n,sound);
title('输出信号')
figure%对比纯净语音信号频谱和输出语音信号频谱
subplot(2,1,1)
plot(n,abs(Fss));
title('纯净信号频谱')
subplot(2,1,2)
plot(n,abs(Fs));
title('输出信号频谱')
四、实验结果
1、噪声叠加到信号上的比较
(1)噪声为0.1*randn(1,count)
(2)噪声为0.01*randn(1,count)
(3)噪声为randn(1,count)
2、利用减谱法的基本原理给语音信号降噪
噪声为0.1*randn(1,coun)纯净信号为输入信号
3、利用改进的减谱法给语音信号降噪
噪声为0.1*randn(1,coun)纯净信号为输入信号
(1)参数取a=3,b=0.01
(2)参数取a=10,b=0.01
(3)参数取a=0.8,b=0.01
(4)参数取a=3,b=0.0001
(5)参数取a=3,b=0.1
五、实验分析
1、噪声叠加到信号上时,噪声会对信号产生较大影响,噪声加强会使信号被噪声淹没;噪声减弱,对信号的影响减小;
2、用减谱法的基本原理対带噪信号进行处理后,信号质量明显提升,从而得到较纯净的语音信号;
3、用改进的减谱法対带噪信号进行处理后,信号质量更好,语音信号更纯净。
合理选择参数a、b很重要,由于实验所用的是辅音,去a=3,b=0.01左右较合适。
a太大或太小,不能取得较好的降噪效果,b太小,不能抑制纯音噪声,b太大会造成噪声,必须b<<1。
六、实验总结
通过本次实验,我知道了:
减谱法作为语音增强技术的有效方法之一,能够有效地降低包含在语音中的加性噪声,但是由于减谱法针对的是宽带噪声较为传统和有效的方法,它是在假定加性噪声与短时平稳的语音信号相互独立的条件下,从带噪语音的功率谱中减去噪声功率谱,从而得到较为纯净的语音频谱,可见存在一定的局限性。
如何寻求一种较通用的语音增强方法有待进一步探讨。
看似简单的问题,自己动手亲自写一下程序,才知道自己的不足,才会真正得到提高,为将来更深层次的学习打下良好的基础。
(学习的目的是增长知识,提高能力,相信一分耕耘一分收获,努力就一定可以获得应有的回报)