维纳滤波源代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

维纳滤波源代码.txt15成熟的麦子低垂着头,那是在教我们谦逊;一群蚂蚁能抬走大骨头,那是在教我们团结;温柔的水滴穿岩石,那是在教我们坚韧;蜜蜂在花丛中忙碌,那是在教我们勤劳。

%实例一程序_维纳滤波的计算机实现
%初步处理,并接受输入数据,包括信号样本个数L和滤波器阶数N
clear all
close all
L=input('L=');
N=input('N=');
a=0.95;
%定义w,v,u
w=sqrt(3*(1-a^2))*(2*rand(1,L)-1);
v=sqrt(3)*(2*rand(1,L)-1);
u=ones(1,L);
%获得原信号s(n)和带噪声信号x(n)
s(1)=1;
for i=2:L
s(i)=a*s(i-1)+w(i);
end
for i=1:L
x(i)=s(i)+v(i);
end
%绘图比较原信号s(n)和带噪声信号x(n)
figure
k=(L-99):L;
plot(k,s(k),'r',k,x(k),'b');
legend('s(n)','x(n)',0);
title('comparation between s(n) and x(n)');
xlabel('n');ylabel('Input');
%计算信号x(n)的N阶自相关矩阵Rxx,x(n)与s(n)的互相关函数向量rxs,并获得估计FIR 滤波器系数h1
phixx=xcorr(x,x);
for i=1:N
for j=1:N
Rxx(i,j)=phixx(i-j+L);
end
end
phixs=xcorr(x,s);
for i=1:N
rxs(i)=phixs(i+L);
end
h1=(inv(Rxx))*rxs';
%获得理想FIR滤波器系数h1
for i=1:N
h(i)=0.238*0.724^i*u(i);
%实例一程序
%绘图比较估计滤波器与理想滤波器
figure
k=1:N;
plot(k,h(k),'r',k,h1(k),'b');
title('Ideal h(n) & Calculated h(n)');
legend('Ideal h(n)',' Calculated h(n)');
xlabel('n');ylabel('h(n)');
%计算并绘图比较理想输出与实际输出
S=conv(h,v);
SI(1)=S(1);
for i=2:L
SI(i)=0.724*SI(i-1)+0.238*x(i);
end
figure
k=(L-99):L;
plot(k,s(k),'r',k,SI(k),'b');
title('s(n) VS. SI(n)');
legend('s(n)','SI(n)',0);
xlabel('n');ylabel('Ideal Output');
SR=conv(h1,x);
figure
k=(L-99):L;
plot(k,s(k),'r',k,SR(k),'b');
title('s(n)VS. SR(n)');
legend('s(n)','SR(n)',0);
xlabel('n');ylabel('Actual Output');
EX2=0;
EI2=0;
ER2=0;
%计算并输出所获得信号与原信号的均方误差,理想维纳滤波和估计维纳滤波均方误差for i=1:L;
EX2=1/L*((x(i)-s(i))^2)+EX2;
end;
for i=1:L;
EI2=1/L*((SI(i)-s(i))^2)+EI2;
end;
for i=1:L;
ER2=1/L*((SR(i)-s(i))^2)+ER2;
end;
EI2
ER2
//////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////
clc;clear all;
%读原始图像%
format long
Blurred=imread('fig525(b).bmp');
subplot(1,2,1);imshow( Blurred);title('原图像');
%自编函数进行维纳滤波%
k=0.0025;
[m,n]=size(Blurred);
spectrum=zeros(m,n);
H=zeros(m,n);
for u=1:m
for v=1:n
H(u,v)=exp(-k*((u-m/2)^2+(v-n/2)^2)^(5/6));
spectrum(u,v)=H(u,v)^2;
end
end
f=double(Blurred);
F1=fftshift(fft2(f));
HW=H./(spectrum+0.001);
restore1=HW.*F1;
restored=real(ifft2(ifftshift(restore1)));
subplot(1,2,2);imshow(restored,[]);title('自编函数进行维纳滤波');
%调用matlab提供的维纳滤波函数%
figure;
hw1=real(ifft2(ifftshift(H)));%转化到空域上来
result1=deconvwnr(Blurred,hw1,0.001);
result2=ifftshift(result1);%再去图像进行1,3象限对调,2与4象限对调
subplot(1,2,1);imshow(result2,[]);title('调用维纳滤波函数');。

相关文档
最新文档