《数字语音处理》大作业
语音去噪算法研究
学院:信息与通信工程学院 专业:通信工程 班级: 学号: 姓名:
1 研究意义
在语音的录制、传输过程中.引入各种各样的噪声是不可避免的。噪声的干扰不仅会降低语音通信的质量,而且会使基于特征参数提取的语音处理系统性能急剧下降。为抑制噪声,提高语音的质量,需要对含噪语音信号进行语音增强。
近些年。在语音增强研究领域出现了一些诸如小波变换、子空间分解等一些新方法。但是基于语音幅度谱(功率谱)估计的增强算法一直是研究热点,主要有频谱减法、维纳滤波方法等。相对于其它方法,频谱减法是一种发展较早且应用比较成熟的语音去噪方法。它引入的约束条件最少,物理意义最直接,运算量小。本研究采用频谱减法有效地去除了噪声,能够起到很好的语音增强效果,在不损伤语音信号的前提下能够大幅度提高信噪比。
2 研究现状
频谱减法算法是在假设噪声是统计平稳且与语音不相关的前提下,利用短时傅里叶变换在频域将带噪语音的功率谱减去估计噪声的功率谱,得到语音功率谱估计值。根据离散傅里叶变换的线性性质。将语音信号的离散傅里叶变换与噪声的离散傅里叶变换相减,即可得到语音信号的离散傅里叶变化,再进行离散傅里叶反变换即可得到去噪后的语音信号。利用MATLAB 的wavread 函数读取PCM 编码格式的WAV 音频文件数据。
频谱减法基本原理如下: 假设带噪语音信号为: y(i)=s(i)+n(i) 其中,s(i)为纯净语音,n(i)为噪声信号。
经FFT变换后,相应的频域表示为:Y=S+N
kkk由此可得:|Y ??k||Sk||Nk|SNSN??**kkkk222因为纯净语音信号与噪声信号是相互独立的,所以Sk与Nk也是相互独立的。 所以:E
????|Yk|2????= E
????|Sk|2????+ E
????|Nk|2????其中,E
????可以通过先验知识或者通过无语音|Nk|???2?时的统计平均得到,设为?n(K)。 对于一个分帧内的短时平稳过程则有:由此可得到原是语音的谱估计值:
|Yk||Sk|??(K)
?n?2)???122|SK|=|Yk|E|Nk|????2?2?21???=
????|Yk|??(Kn2
其中,
SK是增强后的语音幅度。
1
由于人耳对语音的感知是通过语音信号中各频谱分量的幅度获取的。对各分量的相位则不敏感,因此直接用带噪语音的相位作为增强以后的语音相位。就可得到原始语音的估计值。
具体做法如下,录制一段自己的话音和一段背景噪音,采样频率为32kHz 的文件,然后在Matlab 软件平台下,利用函数wavread 对语音信号进行采样。分别画出语音信号和背景噪音信号的的时域波形;然后音频信号进行快速傅里叶变换,得到信号的频谱特性。将两信号的频谱相减,得到去噪后的频谱。
3 仿真实验及分析
(1)由麦克风采集语音数据,将采集的数据存成WAV文件(要求采样率为32000Hz),存在G盘中。 clear; close all; Fs=32000;
y=wavrecord(5*Fs,Fs,'double'); wavwrite(y,'G:\\\\a'); soundview(y,Fs);
图1用soundview函数显示的语音信号
(2)由麦克风采集噪音数据,将采集的数据存成WAV文件(要求采样率为32000Hz),存在G盘中。 clear; close all; Fs=32000;
y=wavrecord(5*Fs,Fs,'double'); wavwrite(y,'G:\\\\x'); soundview(y,Fs);
2
图2用soundview函数显示的噪音信号
(3)MATLAB 代码如下:
clear;clc;%录音后用音频格式转换软件转为wav 格式fs=32kHz 的文件 x1=wavread('G:\\a.wav'); x2=wavread('G:\\x.wav'); N=size(x1,1);
x1=x1(1:N,1);%因录音时是立体声故去其中的第一通道的音频数据 x2=x2(1:N,1); n=1:N;
fs=32000;%语音信号采用频率为32000 赫兹 Y1=fft(x1,N);%对信号做N 点的FFT 变换 Y2=fft(x2,N);
magx1=abs(Y1(1:1:N/2+1));k1=[0:1:N/2];w1=fs/N*k1; magx2=abs(Y2(1:1:N/2+1));k2=[0:1:N/2];w2=fs/N*k1; figure(3);%作图3
subplot(2,1,1);stem(n,x1,'.k');title(' 处理前音频信号signal x(t)');grid; subplot(2,1,2);plot(w1,magx1,'k');title(' 处理前音频信号的频谱');grid; figure(4);%作图4
subplot(2,1,1);stem(n,x2,'.k');title(' 噪音信号n(t)');grid;
subplot(2,1,2);plot(w2,magx2,'k');title(' 噪音信号的频谱');grid; magx3=magx1-magx2; Y=Y1-Y2;%频谱相减
x3=ifft(Y);%离散傅里叶反变换 figure(5);%作图5
subplot(2,1,1);stem(n,x3,'.k');title(' 去噪后音频信号n(t)');grid;
subplot(2,1,2);plot(w1,magx3,'k');title(' 谱相减后音频信号频谱');grid; 得到波形如下:
3
处理前音频信号signal x(t)10.50-0.5-10246810121416x 10 处理前音频信号的频谱300020001000040200040006000800010000120001400016000
图3 处理前的音频信号
噪音信号n(t)0.10.050-0.05-0.10246810121416x 10 噪音信号的频谱15001000500040200040006000800010000120001400016000
图4 噪声信号
4
去噪后音频信号n(t)210-1-20246810121416x 10 谱相减后音频信号频谱400020000-200040200040006000800010000120001400016000
图5 处理后的音频信号
对比图3 和图5 发现经处理后噪声减少,有效的改善了声音频谱和时域波形,达到了语音增强的目的。
采用谱减法对语音信号进行增强处理方法在MATLAB平台下易于实现,计算量小。经处理后语音信号的频谱特征明显改善,与短时谱MMSE 法和维纳滤波法相比更容易实现。由于语音的信噪比较高,故在时域波形中的噪声分量比较小,导致在处理前后时域波形的变化不十分明显,但从频域中可以看出显著的去噪效果。基于MATLAB 谱减法语音处理程序简单易懂,对深刻理解数字信号处理过程有一定的促进作用。
4 参考文献
[1]姚天任.数字语音处理[M].武汉:华中科技大学出版社,2005. [2]田学勤.语音谱减算法[J].甘肃纵横科技,2004,33(1):19-20. [3]蔡斌.一种改进型MMSE 语音增强方法[J].信号处理,2004,20(1):70-74. [4]陈俊,孙洪,董航.基于MMSE 先验信噪比估计的语音增强[J].武汉大学学报: 理学版,2005,51(5):638-642.
[5]白文雅,黄健群,陈智伶.基于维纳滤波语音增强算法的改进实现[J].电声技 术,2007,31(1):44-46.
[6]樊昌信,曹丽娜.通信原理[M].北京:国防工业出版社,2008.
[7]王艳芬,王刚,张晓光,刘卫东.数字信号处理原理及实现[M].北京:清华大学 出版社,2008.
5