现代数字信号处理课程报告
题目:
维纳滤波在语音信号去噪中的应用
2017 年 12 月
【摘要】在语音处理中,基本上会牵扯到对噪声的处理,而维纳滤波对于高斯白
噪声处理具有重要的意义。本课题是基于 MATLAB 的维纳滤波实现对加噪声音信
号去噪的过程和效果的研究,从而加深对维纳滤波语音去噪过程的了解,对于日
后维纳滤波在语音处理中应用的扩展有很大的帮助。
关键词 语音处理、维纳滤波、去噪
一、引言
通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息的
形式。语言是人类持有的功能.声音是人类常用的工具,是相互传递信息的最主
要的手段。因此,语音信号是人们构成思想疏通和感情交流的最主要的途径。目
前许多的智能产品,以及其他一些领域都涉及到了语音。涉及到语音,就必然会
涉及到语音处理,而在语音处理中对于噪声的处理是至关重要的一个环节。维纳
滤波器就是典型的一种滤波器。20 世纪 40 年代,维纳滤波奠定了最佳滤波器研
究的基础。即假定输入时有用信号和噪声信号的合成,并且它们都是广义平稳过
程和他们的二阶统计特性都已知。维纳根据最小均方准则(即滤波器的输出信号
与需要信号的均方值最小),求得了最佳线性滤波器的参数,这种滤波器被称为
维纳滤波器。我们通过维纳滤波器对加噪的声音信号进行去噪,对声音进行还原,
这一过程的研究对维纳滤波在声音处理中应用的扩展由重要意义。
二、维纳滤波器的结构
X(n)=s(n)+v(n)
H(n)线性滤波器
-
+
)(y
n
)(ˆ
ns
E(n)
+
S(n)
维纳滤波的一般结构
维纳滤波器自身是一个 FIR 或 IIR 滤波器,对于一个线形系统,如果其冲
激响应为 h(n),则当输入某一随机信号 x(n)时,它的输出可表示为
)(
ny
m
(
mnxmh
()
)
其中输入为
)(
nx
)(
ns
)(
nv
式中 s(n)代表信号,v(n)代表噪声。我们希望这种线形系统的输出是尽可能地
逼 近 s(n) 的某种估计,并用 sˆ(n) 表示,即
)(y
n
)(ˆ
ns
因而该系统实际上也就是对于 s(n)的一种估计器。这种估计器的主要功能是 利
用当前的观测值 x(n)以及一系列过去的观测值 x(n-1),x(n-2),……来完成对
当 前信号值的某种估计。维纳滤波属于一种最佳线性滤波或线性最优估计,是
一最 小均方误差作为计算准则的一种滤波。设信号的真值与其估计值分别为
s(n)和 sˆ(n) ,而它们之间的误差
)(e
n
)(
ns
)(ˆ
ns
则称为估计误差。估计误差 e(n)为可正可负的随机变量,用它的均方值描述 误
差的大小显然更为合理。而均方误差最小,也就是
2
[
(
neE
)]
[(
sE
])ˆ
2
s
最小。利用最小均方误差作为最佳过滤准则比较方便,它不涉及概率的描述,而
且以它导出的最佳线性系统对其它很广泛的一类准则而言也属最佳。
三、维纳滤波器的设计
维纳滤波器的设计,实际上就是在最小均方误差条件下探索和确定滤波器的冲
激响应 h(n)或系统函数 H(z),也就是求解维纳-霍夫方程的问题。维纳滤波既可
以采用频域方法实现,也可以采用时域方法实现,但时域方法要求协方差矩阵的
逆,当数据比较长的时候,求逆的运算量非常大。而声音信号的数据很长,所以
我们采用频域的方法实现。
假定离散时间的观测过程为
( )
s n
( )
z n
( ),
v n n
,
n n
0
0
1,...,
n
f
其中 ( )v n 为噪声, ( )
s n 为原信号, 0n 为起始观测时刻,
fn 为观测结束时刻。
在实际中通常采用易于实现的线性最小均方准则。线性最小均方估计是观测的线
性函数,它可以作为观测序列通过离散时间线性系统,即
(
s n n
/
)
f
fn
k n
0
( , ) ( )
h n k z k
滤波器的系数的选择可以由线性最小均方估计的正交原理来求取,即
{[ ( )
E s n
n
k n
0
( , ) ( )] ( )} 0(
h n k z k z i
i
,
n n
0
0
1,..., )
n
即
( , )
R n i
sz
n
k n
0
( , )
h n k R k i
( , ),(
i
z
,
n n
0
0
1,..., )
n
上式也称为Wiener-Hopf方程。
对于信号和观测过程是平稳随机序列,并且是联合平稳随机序列,系统为因果的
线性时不变离散时间线性系统, 0n ,则有
( )
R n
sz
l
0
( )
h l R n l
(
)
z
( )
( ),
h n R n n
z
0
求解维纳滤波器即求系数 ( )h n 的过程。
将上式两边做 z 变换,得 ( )
( )
G z H z G z
( )
sz
z
所以,
( )
H z
sz
( )
G z
( )
G z
z
( )H z 称为维纳滤波器。当信号 ( )
s n 与观测噪声统计独立时,维纳滤波器为
( )
H z
( )
G z
s
( )
( )
G z G z
v
s
其中, ( )
vG z 为噪声的功率谱,维纳滤波器用离散傅里叶变换可表示为
H
(
)
G
s
(
)
(
)
G
v
G
s
(
)
四、实验仿真
本实验的仿真平台是 MATLAB R2012a,通过加载一个声音信号,得到它的信
号图和对其做傅里叶变换得到频谱图。然后给它加一定强度的噪声,得到观测信
号的信号图和频谱图,最后让加噪后的声音信号通过频域上的维纳滤波,在频域
上还原声音信号,得到还原声音信号的频谱图,在通过傅里叶反变换得到其声音
信号图。
1.原始声音信号:
2、对声音信号加噪后:
3、经过维纳滤波的还原
五、结论
从恢复的声音信号图与原始信号图的比较以及对声音辨识的可以看出,声音
信号基本被还原,即在维纳滤波在声音去噪中的性能很不错。
六、心得体会
通过 MATLAB 仿真实验,是我们更加深刻和具体地了解到维纳滤波的原理、
功能以及在声音去噪方面的应用。课堂的理论与实际的结合,让我对维纳滤波所
能实现的功能有了更加深刻的认识。
这是我在日后分析声音去噪的过程中,对克服处理过程中带入在噪声提供了
一种有效的解决方案。对我现在所在做得项目具有重要的意义,当然我也明白在
实际使用过程中还有很多需要解决的问题,在日后一定努力学习,探索更多的解
决问题的方法。最后很感谢胡教授的耐心教导,谢谢。
附录:
%读声音文件
%取左声道
%求出语音信号的长度
%傅里叶变换
%做原始语音信号的时域图形
%采样频率
%量化比特
close all;
fs =22050;
Nbits =16;
[y0,fs,Nbits] =wavread('D:\MATLAB\htms.wav')
y=y0(:,1);
n=length(y);
t=0:1/fs:(length(y)-1)/fs;
y1=fft(y,n) ;
subplot(2,1,1);
plot(t/2,y);
title('原始声音信号时域图');
subplot(2,1,2);
plot(abs(y1));
title('原始声音信号频谱图');
q0=audioplayer(y,fs);
play(q0);
%-------------------------------------------加噪过程-----------
qd=0.1;
z=zeros(n,1);
v=randn(n,1)*qd;
z=y+v;
q=audioplayer(z,fs);
play(q);
figure();
subplot(2,1,1);
%产生噪声
%控制噪声强度
%做原始语音信号的频域图
%听原始声音