您好,欢迎来到抵帆知识网。
搜索
您的当前位置:首页信号处理实验--FIR维纳滤波器

信号处理实验--FIR维纳滤波器

来源:抵帆知识网


实验报告

一、 实验题目

假设一个点目标在x,y平面上绕单位圆做圆周运动,由于外界干扰,其运动轨迹发生了偏移。其中,x方向的干扰为均值为0,方差为0.05的高斯噪声;y方向干扰为均值为0,方差为0.06的高斯噪声。

1. 产生满足要求的x方向和y方向随机噪声500个样本;

2. 明确期望信号和观测信号;

3. 试设计一FIR维纳滤波器,确定最佳传递函数:

hoptRxx1Rxs,并用该滤波器处理观

测信号,得到其最佳估计。(注:自行设定误差判定阈值,根据阈值确定滤波器的阶数或传递函数的长度)。

4. 要求3中,也可以选择Kalman滤波器进行滤波处理,采用哪种滤波器可以自由选择。

5. 分别绘制出x方向和y方向的期望信号、噪声信号、观测信号、滤波后信号、误差信号的曲线图;

6. 在同一幅图中绘制出期望信号、观测信号和滤波后点目标的运动轨迹。

7. 实验报告要求:给出求解思路和结果分析,给出MATLAB实现源程序和程序注解。

二、 解题思路

目标信号在x、y方向均受到高斯噪声的干扰,本实验分别从两个方向分别进行滤波处理,最终得到整体滤波处理后的信号。具体解题思路如下:

8. 选用FIR维纳滤波器进行滤波处理

9. 产生x、y方向噪声信号xnoise和 ynoise,

产生x、y方向期望信号xs、ys,

产生x、y方向观测信号x、y。

10. 分别求出x、y方向上观测信号的自相关矩阵以及观测信号与期望信号的互相关矩阵,根据公式

hoptRxx1Rxs确定最佳传递函数。

d2R*xdhoptT11. 根据

E[e(n)]min2=分别求出x、y方向上最小均方误差。

三、 MATLAB实现源程序

close all;clear all;

%x轴方向和y轴方向期望信号

x0=0;y0=0;r=1;

theta=0:pi/249.5:2*pi;

xs=x0+r*cos(theta);

ys=y0+r*sin(theta);

%产生x轴方向和y轴方向噪声

n=500;%产生500个随机样本

ux=0;vx=0.05;

t=randn(1,n); %产生1*n个伪随机数

t=t/std(t);

t=t-mean(t);

xnoise=ux+sqrt(vx)* t;

uy=0;vy=0.06;

g=randn(1,n);

g=g/std(g);

g=g-mean(g);

ynoise=uy+sqrt(vy)* g;

% x轴方向和y轴方向观测信号

x=xs+xnoise;

y=ys+ynoise;

%x方向上观测信号的自相关矩阵

rxx=xcorr(x);

for i=1:100

for j=1:100

mrxx(i,j)=rxx(500-i+j);

end

end

%x方向上观测信号与期望信号的互相关矩阵

rxs=xcorr(x,xs);

for i=1:100

mrxs(i)=rxs(499+i);

end

hoptx=inv(mrxx)*mrxs';% 求出x方向上最佳传递函数

fx=conv(x,hoptx);%维纳滤波后x方向上的输出

nx=sum(abs(xs).^2);

eminx=nx-mrxs*hoptx;%求出x方向上的最小均方误差

%y方向上观测信号的自相关矩阵

ryy=xcorr(y);

for i=1:100

for j=1:100

mryy(i,j)=ryy(500-i+j);

end

end

%y方向上观测信号与期望信号的互相关矩阵

rys=xcorr(y,ys);

for i=1:100

mrys(i)=rys(499+i);

end

hopty=inv(mryy)*mrys'; % 求出y方向上最佳传递函数

fy=conv(y,hopty); %维纳滤波后y方向上的输出

ny=sum(abs(ys).^2);

eminy=ny-mrys*hopty; %求出y方向上的最小均方误差

plot(xs,ys,'-r',x0,y0,'.');

hold on;

plot(x,y,'b:');

hold on;

plot(fx,fy,'g-');

legend('期望信号','圆周运动中心','观测信号','滤波后点目标的运动轨迹')

axis square;

figure;subplot(2,4,1)

plot(xs);

title('x方向期望信号');

subplot(2,4,2)

plot(xnoise);

title('x方向噪声信号');

subplot(2,4,3)

plot(x);

title('x方向观测信号');

subplot(2,4,4)

n=0:500;

plot(n,eminx);

title('x方向最小均方误差');

subplot(2,4,5)

plot(ys);

title('y方向期望信号');

subplot(2,4,6)

plot(ynoise);

title('y方向噪声信号');

subplot(2,4,7)

plot(y);

title('y方向观测信号);

subplot(2,4,8)

plot(n,eminy);

title('y方向最小均方误差');

四、 结果及其分析

运行结果如下图:

分析:

1. 运行结果中滤波后的到的信号与原始信号和噪声信号的对比可以看出,滤波后的结果与期望信号还是很接近的,整体上达到了最优滤波的效果。

2. 滤波后点目标的运动轨迹有回到零点的情况发生,分析其原因是:传递函数的点数为M,x的点数为N,进行卷积时,会自动补0使二者长度相同,卷积之后点数为M+N-1。

五、 实验总结

试验中遇到几个问题,经过查阅资料以及和同学讨论最终得到解决。此过程中遇到的问题及解决方案如下:

问题1:点目标做圆周运动,将圆周中心定于非零点,经过滤波后,均方误差较大,滤波效果较差。

解决:忽略了信号的零均值化处理,将圆周中心定于零点,这样信号的均值为零,相当于进行了零均值化处理。

问题2:由于产生x、y方向上随机噪声的方法相同,将上述程序中产生噪声信号的部分改为如下:

%产生x轴方向和y轴方向噪声

n=500;%产生500个随机样本

ux=0;vx=0.05;

uy=0;vy=0.06;

t=randn(1,n); %产生1*n个伪随机数

t=t/std(t);

t=t-mean(t);

xnoise=ux+sqrt(vx)* t;

ynoise=uy+sqrt(vy)* g;

运行结果如下图,发现,x、y方向干扰加进去后,造成的干扰有一定的规律,方向大概一致。

解决:分析发现,产生的x、y方向上随机噪声用的是同一组伪随机数,才出现下图的结果。所以改为分别产生。

问题3:圆周的等间隔采样问题,采用的间隔为2*pi/500 ,theta角的取值范围为 theta=0:pi/250:2*pi。当与噪声信号叠加产生观测信号时,程序出错,提示矩阵大小不同。

解决:经过检查theta角的取值个数发现:当间隔为2*pi/500时,theta角的取值个数为501个,最后经计算将间隔修改为2*pi/499。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务