维纳滤波(带程序)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
维纳滤波器的计算机实现
专业:信息与通信工程
实验一 维纳滤波器的计算机实现
一、 实验目的
1.MATLAB 编程实现加性干扰信号的维纳滤波。 2.仿真比较实验结果与理论分析结果,分析影响维纳滤波效果的各种因素,从而加深对维纳滤波的理解。
3.利用维纳预测方法实现对AR 模型的参数估计。
二、 实验原理及方法
维纳滤波实际上就是在最小均方误差条件下探索和确定滤波器的冲激响应h(n)或
系统函数H(z),也就是求解维纳-霍夫方程。假定一个随机信号x(n)具有以下形式:
x (n ) = s (n ) + v (n )
其中,s(n)为有用信号,v(n)为噪声干扰,将其输入一个单位脉冲响应为h(n)的线性系统, 则其输出为:
()()()()m y n s n h m x n m ∞
Λ
=-∞
==
-∑
我们希望x (n )在经过系统h(n)后得到y (n ),即s (n )的估计值能尽可能接
近s (n ),按照最小均方误差准则,h(n)应满足下面的正则方程:
()()()xs xx
m k h m k m φφ
∞
=-∞
=
-∑
其中,()xs k φ是x(n)与s(n)的互相关函数,()xx m φ是x(n)的自相关函数。
在h(n)满足因果性的条件下,,求解维纳-霍夫方程是一个典型的难题。虽然目前有几种求解h(n)的解析方法,但它们在计算机上实现起来非常困难。因此,本实验中,利用近似方法,即最佳FIR 维纳滤波方法,在计算机上实现随机信号的维纳滤波。
设h(n)为一因果序列,其长度为N ,则
1
()()()N m y n h m x n m -==-∑
同样利用最小均方误差准则,h(n)满足下面正则方程:
xx xs R h r =
xx R 为信号x(n)的N 阶自相关矩阵,xs r 为x(n)与s(n)的互相关函数向量。当xx R 为满秩矩阵
时,可得
1
xx xs
h R r -=
由此可见,利用有限长的h(n)实现维纳滤波器,只要已知xx R 和xs r 就可以按上式解得满足因果性的h 。虽然它不同于真正的维纳滤波器,但是只要N 选择的足够大,它就可以很好地逼近真正的维纳滤波器。
利用维纳预测方法来估计AR 模型的参数。即假定s(n)是一个p 阶AR 模型。
1()(1)()()p s n a s n a s n p w n +-++-=
其中w(n)是均值为零,方差等于2w σ的高斯白噪声。在已知准确自相关函数()ss n φ的情
况下,由下面Yule-Walker 方程可以得到AR 模型参数i a (i=1,…p )和2
w σ
2
ss w R A σε
=
A 为(p+1)╳1 的系数列向量,定义为
1[1,,]T p A a a =
ε为( p +1)×1的单位列向量,除第一个元素等于1 外,其余元素均为零,即
[1,0,0]T ε=
三、 仿真结果及分析
(1)、L=500,N=10;运行维纳滤波程序得到如下结果:
图1 100个是S(n)与X(n)比较
图2
图3
其误差为:
不经滤波:The E_xis 0.98152
理伦滤波:The E_I is 0.77672
维纳滤波:The E_R is 0.80984
1、通过比较图1与图3可以看出在滤波后,估计值更近似等于S(n),其数据点围绕s(n)的曲
线做很小的扰动,其值在s(n)的上下波动。
2、因为只用了有限个数据S(n)和X(n) 来求自相关函数和互相关函数,由此得到的估计值
不精确,从而带来了实验误差。
(2)、固定L=500,N=3与N=20的比较结果如下:
N=3 N=20
N=3 N=20
N=3 N=20
N=3 N=20
分析比较可发现,L=500固定不变,N值越大,误差越小,滤波后的信号更加接近原来的信号,即滤波效果得到改善。
(3)、固定N=10,L=200与L=1000比较:
L=200 L=1000
L=200 L=1000
L=200 L=1000
L=200 L=1000
当N保持不变,而将数据长度L从200增大到1000,可以发现,均方误差都有增大,而且h(n)其理论值与实验值的差别也变大,这说明单方面增加数据长度将会降低滤波效果。
(4)、AR模型参数估计:
1、P=2,a=[0.5,0.6],sigma2=1,L=500
2、P=2,a=[0.5,0.6],sigma2=1,L=50
从上述两幅图中可以看出样本个数L取的越多对参数a及噪声功率估计的越准确。(5)、程序代码:
维纳滤波:
clear;
L=input('Please input the value of L: L=');
N=input('Please input the value of N: N=');
a=0.95;
w(1)=0;
w=rand(1,L);
w=w-mean(w)*ones(1,L);
w=w*sqrt(12*(1-a^2));
s(1)=1;
for n1=2:L
s(n1)=a*s(n1-1)+w(n1-1);
end
v=rand(1,L);
v=v-mean(v)*ones(1,L);
v=v*12^(1/2);
for n2=1:L
x(n2)=s(n2)+v(n2);
end
m=100;j=(L-m+1):1:L;
sj=s((L-m+1):1:L);
xj=x((L-m+1):1:L);
figure(1)
exp=zeros(1,m);
plot(j,sj,'or',j,xj,'*b',j,exp,'-.k');
title('100 samples of s(n) and x(n)');