⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wiener1.m

📁 压缩文件中代码为一维维纳滤波代码
💻 M
字号:
%实例一程序_维纳滤波的计算机实现
%Script by loyal
%改程序是学习维纳滤波时所使用的程序,通过对此程序的学习,可以加深我们对维纳滤波基本原理的理解
%初步处理,并接受输入数据,包括信号样本个数L和滤波器阶数N
%Script by loyal
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);
end
%实例一程序
%绘图比较估计滤波器与理想滤波器
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)??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)??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;
 
EX2
EI2
ER2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -