马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
clear;
clf;
load('D:\yy\课程学习\信号\mat\yy.mat');I=yy;%期望信号
observe=awgn(I,20,'measured');%信噪比越高,滤后的波形与与原来波形偏差越小
noise=observe-I;%产生噪声
L=200;%滤波器长度
N=950;%信号点数
rxx1=xcorr(observe,L);
rxx=rxx1(L+2:2*L+1)';
rxy1=xcorr(observe,I,L);
rxy=rxy1(L+2:2*L+1)';
rxx_matrix=toeplitz(rxx(1:L));
hoptx=rxx_matrix\rxy;
afterf = filter(hoptx,1,observe); %滤波后的信号
nx=sum(abs(I).^2);
eminx=nx-rxy'*hoptx;%最小均方误差
subplot(3,1,1)
plot(I);
title('期望信号');
subplot(3,1,2)
plot(noise);
title('噪声信号');
subplot(3,1,3)
plot(observe,'red');
%axis([0 1000,0 250]);
title('观测信号');
hold on;
plot(I,'blue');
hold off;
figure;
subplot(3,1,1);
plot(afterf,'red');
%axis([0 1000,0 250]);
title('滤波后的信号与观测信号');
hold on;
plot(I,'blue');
hold off;
subplot(3,1,2);
z=afterf-I;%滤波后的噪声
plot(z);
m=size(z);
title('滤波后信号与未加噪信号的差值');
averz=sum(abs(z(1,:)))/m(2);%滤波后信号与未加噪信号的平均差值
avers=sum(abs(noise(1,:)))/950;
aver=sum((z-noise).^2);
%------------信噪比---------
Ps1=sum(abs(x(1,:)).^2);%signal power
Pn1=sum(abs(noise(1,:)).^2);%noise power
snr1=10*log10(Ps1/Pn1);
%Ps2=sum(abs(afterf(1,:)).^2);
Pn2=sum(abs(z(1,:)).^2);
snr2=10*log10(Ps1/Pn2);
这是我编写的维纳滤波程序,但是出来的结果发现滤波后噪声更大了……有谁能指点下呀,不胜感激! |