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

📄 wienerfilter2.m

📁 基于维纳滤波器算法,对加噪信号进行滤波.
💻 M
字号:
%维纳滤波程序^_^  李军 2006.10.23
clear all
close all
clc
%选择输入点个数和滤波器阶数----------------------------------------------
L=200;
N=20;
% L=input('输入采样点个数 L= ');
% N=input('输入FIR滤波器阶数 N= ');

%原始信号s(n),输入信号x(n)=s(n)+v(n),噪声v(n),信号估计sguji(n)-------
w=1*randn(1,L);
s(1)=w(1);
for n=2:L
    s(n)=s(n-1)+w(n);
end

v=1*randn(1,L);
x=s+v;
figure,plot(x,'r-');
hold on
plot(s,'b');
hold on

%求x(n)的自相关序列和x(n)与s(n)的互相关序列------------------------------
faixx=zeros(1,L);
faixs=zeros(1,L);
for m=1:N
    for n=1:L-m+1
        faixx(1,m)=faixx(1,m)+x(n)*x(n+m-1)/(L-m+1);
        faixs(1,m)=faixs(1,m)+x(n)*s(n+m-1)/(L-m+1);
    end
end

% b=faixx;
% a=faixx+faivv;
% [r,p,c]=residuez(b,a);

%因为是平稳随机序列,则可以将自相关序列扩展为自相关矩阵------------------
%求出h(n)
fai_xx=toeplitz(faixx);
hn=inv(fai_xx)*faixs';

%由h(n)求出对原始信号s(n) 的估计 sguji(n)
sguji=zeros(1,L);
for i=1:L
    if (i<N|i==N)
        for j=1:i
        sguji(1,i)=sguji(1,i)+hn(j,1)*x(1,i-j+1);
        end
    else
        for j=1:N
        sguji(1,i)=sguji(1,i)+hn(j,1)*x(1,i-j+1);
        end
    end
end

plot(sguji,'g');

%求出原始信号与估计信号的均方误差--------------------------------------
er=0;
for i=1:L
    er=er+((s(i)-sguji(i)).^2)/L;
end
disp(er);

⌨️ 快捷键说明

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