资源描述:
《维纳滤波器设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、随机信号处理实验报告维纳滤波器设计随机信号处理学号:姓名:10随机信号处理实验报告实验一维纳滤波器设计1实验内容设计一个维纳滤波器:(1)产生三组观测数据,首先根据产生信号,将其加噪,(信噪比分别为),得到观测数据。(2)估计,的AR模型参数。假设信号长度为L,AR模型阶数为N,分析实验结果,并讨论改变L,N对实验结果的影响。2实验原理滤波目的是从被噪声污染的信号中分离出有用的信号来,最大限度地抑制噪声。对信号进行滤波的实质就是对信号进行估计。滤波问题就是设计一个线性滤波器,使得滤波器的输出信号是期
2、望响应的一个估计值。下图就是观测信号的组成和信号滤波的一般模型。观测信号信号滤波的一般模型维纳滤波解决从噪声中提取信号的滤波问题,并以估计的结果与真值之间的误差均方值最小作为最佳准则。它根据估计信号的当前值,它的解以系统的系统函数或单位脉冲形式给出,这种系统常称为最佳线性滤波器。维纳滤波器设计的任务就是选择,使其输出信号与期望信号误差的均方值最小。10随机信号处理实验报告假设滤波系统是一个线性时不变系统,它的和输入信号都是复函数,设考虑系统的因果性,可得到滤波器的输出设期望信号,误差信号及其均方误差
3、分别为要使均方误差为最小,需满足:整理得,等价于上式说明,均方误差达到最小值的充要条件使误差信号与任一进入估计的输入信号正交,这就是正交性原理。将展开,得整理得等价于此式称为维纳-霍夫(Wiener-Holf)方程。解此方程可得到最优权系数,此式是Wiener滤波器的一般方程。定义10随机信号处理实验报告则维纳-霍夫方程可写成矩阵形式求逆,得此式表明,已知期望信号与观测数据的互相关函数及观测数据的自相关函数时,可以通过矩阵求逆运算,得到维纳滤波器的最佳解。3实验结果及分析(1)当L=200,N=6信
4、噪比为20dB的滤波效果10随机信号处理实验报告信噪比为10dB的滤波效果信噪比为6dB的滤波效果(2)当L=200,N=60信噪比为20dB的滤波效果10随机信号处理实验报告信噪比为10dB的滤波效果信噪比为6dB的滤波效果(3)当L=600,N=6信噪比为20dB的滤波效果10随机信号处理实验报告信噪比为10dB的滤波效果信噪比为6dB的滤波效果实验分析:别取信号长度为200、600,滤波器长度为6、60,加噪信噪比为20dB、10dB、6dB,组合进行实验。每组实验得到的最小均方误差统计如下表
5、。由此表可以看出,信号长度越长,最小均方误差(绝对值)越大,精度越差;在信噪比较大(误差影响较小)的滤波过程中,滤波器长度约长,最小均方误差(绝对值)越小,精度越好。表1最小均方误差统计表加噪信号信噪比L=200N=6L=200N=60L=600N=620dB-1785.3971-1574.1107-6888.410310随机信号处理实验报告10dB-845.5714-1727.5260-10219.33976dB-1213.6367-2135.4596-7743.9358对于相同信号和滤波器(这里
6、取L=200,N=6),信噪比越大,最小距离误差约小;而当信噪比较小时,信号与噪声值接近,导致滤波效果受到影响,最小距离误差变大。4源代码clear;clc;%初始化变量L=200;%信号长度N=6;%滤波器的阶次a=0.96;wn=randn(L,1);%wn为用于生成信号的噪声信号,随机生成一个L*1矩阵,生成矩阵的元素值在%区间(0.0,1.0)之间sn=zeros(L,1);%sn为信号,生成一个L*1的零矩阵hn=zeros(N,1);%hn为系统单位脉冲响应生成一个N*1的零矩阵rxx=
7、zeros(N,1);%rxx为自相关函数,生成一个N*1的零矩阵rxd=zeros(N,1);%rxd为互相关函数,生成一个N*1的零矩阵yn=zeros(L,1);%yn为输出信号,生成一个L*1的零矩阵xt=zeros(L+N,1);%生成一个(L+N)*1的零矩阵gn=zeros(L,1);%gn为yn与sn最小距离误差信号,生成一个L*1的零矩阵%根据给定公式s(n)=as(n-1)+w(n),生成理想信号10随机信号处理实验报告fori=2:Lsn(i,1)=a*sn(i-1,1)+wn
8、(i,1);endsn(1,1)=wn(1,1);subplot(2,2,1);plot(sn,'r'),axis([0200-1010]),xlabel('时间'),ylabel('幅度'),title('sn')%生成期望信号方差cdcd=(var(wn))/(1-a^2);%对信号加噪x1=awgn(sn,20);x2=awgn(sn,10);x3=awgn(sn,6);subplot(2,2,2)plot(x3,'g'),axis([0200-1010]),x