• 最佳FIR维纳滤波器实现
2021-04-23 18:12:56

% 本实验中利用近似方法，即最佳FIR维纳滤波方法，在计算机上实现随机信号的维纳滤波。

% w(n)是零均值,方差为(1-a^2)的均匀分布白噪声

% s(n)为真实信号：s(n)=a*s(n-1)+w(n)

% v(n)是与s(n)互不相关的均匀分布白噪声，其均值为零，方差为1

% x(n)为接收到的添加了白噪声的信号：x = s + v

% si(n) 为使用理想维纳滤波器滤波得到结果

% y(n) 为使用近似FIR维纳滤波器滤波得到的结果

% If you have any problem, please email me:

qijiaxing@live.cn

% This program is written by QiJiaxing

% 2009.11.20

clc

clear all

L = 500;  % signal length

N = 20;  % length of the FIR

filter

a = 0.95;

% white noise with mean of 0 and var of (1-a^2)

w =  sqrt( 12 * (1 - a^2)) * ( rand(1,L) -

0.5 );

% true signal: s(n)=a*s(n-1)+w(n)

s = zeros(1,L); s(1) = w(1);

for ii = 2:L

s(ii) =

a * s(ii-1) + w(ii);

end

% white noise with mean of 0 and var of 1

v =  sqrt( 12 ) * ( rand(1,L) - 0.5 );

% received signal: x = s + v

x = s + v;

%  r_xx is the autocorrelation of x

r_xx = xcorr( x );

% R_xx is the N-dimentional autocorrelation matrix of x

R_xx = zeros( N );

for ii = 1 : N

R_xx( :

, ii ) = r_xx( L+1-ii : L+1-ii+N-1 )';

end

%  r_xs is the cross-correlation of x and

s

r_xs = xcorr( x , s );

r_xs = r_xs( L : L+N-1 )';

% according to R_xx * h_FIR = R_xs

% we can calculate the h_FIR

h_FIR = inv(R_xx) * r_xs;

h_FIR = h_FIR';

% y is the reslut signal filtered by h_FIR

y = cconv( h_FIR , x, L );

% si is the result signal filtered by ideal Wiener filter

h

n = 0:L-1;

h = 0.238 * ( 0.724 .^ n );

si  = cconv( h , x, L );

%% plot the true signal s(n) and the received signal x(n) of

the last 100

% points

t = L - 99 : L;

figure(1);

plot( t , x(t), '--b' , t , s(t) , 'r' );

legend( 'x(n)' , 's(n)' , 0 );

title('The true signal s(n) and the received signal

x(n)');

xlabel('n');ylabel('Signal Amplitude');

%% plot the ideal impulze response h(n) and the FIR impulze

response

% h_FIR(n) of N points

n = 1:N;

figure(2);

plot( n,h(n),'--b',n,h_FIR(n),'r' );

legend('The Ideal Wiener Filter h(n)','Approximate FIR Filter

h\_FIR(n)',0);

title('The Impulze Response of Ideal Wiener Filter h(n) and

the Impulze Response h\_FIR(n)');

xlabel('N points');ylabel('Amplitude');

%% plot the true signal s(n) and the result signal y(n)

filtered by

% h_FIR

figure(3);

plot( t, s(t), '--b', t, y(t), 'r' );

legend('True Signal s(n)','Result Signal y(n)',0);

title('The True Signal s(n) and The Result Signal y(n) Filter

by h\_FIR');

xlabel('n');ylabel('Signal Amplitude');

%% plot the true signal s(n) and the result signal si(n)

filtered by h

figure(4);

plot( t, s(t), '--b', t, si(t), 'r' );

legend('True Signal s(n)','Result Signal si(n)',0);

title('The True Signal s(n) and The Result Signal si(n)

Filtered by h');

xlabel('n');ylabel('Signal Amplitude');

更多相关内容
• 关于维纳滤波器的几段设计代码，包括时域和频域的不同实现，还包括对真实语音的处理。
• 维纳滤波器在matlab中实现的源程序;维纳滤波器在matlab中实现的源程序第二部分
• 获取信号并添加噪声。 维纳滤波器旨在消除噪声的影响。
• 用matlab编写的维纳滤波器，实现了维纳滤波器
• 这个项目展示了如何将维纳滤波器实现为噪声消除。 我们期望的响应是 d(n) 输出是 x(n)。 我们有噪声 v(n)、v1(n) 和 v2(n)，它们具有以下关系 v1(n)=0.8*v1(n-1)+v(n) 和 v2(n)=-0.6v2( n-1)+v(n) 并且其中 v(n) 是 ...
• 1. 两种DD方法的凸组合2. 估计所需语音信号的最小均方误差 (MMSE) 演示视频： https://youtu.be/ATnP3c-NANI 简介和M文件...
• FIR维纳滤波器的Matlab仿真 仿真结果分析 ? 1.维纳滤波的阶数越大滤波后的信号更接近原始信号但随之计 算量也增大 ? 2.保持滤波器阶数不变改变信号样本的长度点数可以发现滤波 的效果虽着信号样本的长度的增加而提高...
• 针对双平行线阵的二维波达方向(DOA) 估计问题，为有效降低计算复杂度，提出了一种基于降秩多级维纳滤波器(MSWF)的快速算法。首先利用MSWF 的前向递推实现信号子空间的快速估计，无需估计协方差矩阵和特征分解；然后...
• 维纳滤波器的计算机实现
• 分析了多级维纳滤波器的工作原理和改进方法，引入一种可靠的秩选方法，得到了一种稳妥的多级维纳滤波实现方式。与传统方式相比，引入本秩选方向后的算法很容易找到一个门限，使得输出SINR达到最优。对算法有限精度...
• matlab用代码实现公式自适应维纳滤波器 该项目包含自适应Wiener滤波器的相当快的C ++实现。 源代码需要OpenCV库才能正常工作。 贡献者 要求 OpenCV 3.1.0或更高版本（）; 您最喜欢的IDE /编译器之一：Visual Studio ...
• 原始信号加载高斯白噪声和椒盐噪声后用维纳滤波器滤波
• 维纳滤波在处理光学传递函数在零点附近的噪声方法问题比较有效，通过选择适当参数，可以有效地消除或抑制噪声和“振铃效应”。
• 基于MATLAB的维纳滤波器设计.pdf
• MATLAB实现维纳滤波器，带程序，实验结果
• ## [Matlab]维纳滤波器设计

千次阅读 热门讨论 2019-11-30 16:42:26
[Matlab]维纳滤波器设计 ​ 维纳滤波（wiener filtering) 一种基于最小均方误差准则、对平稳过程的最优估计器。这种滤波器的输出与期望输出之间的均方误差为最小，因此，它是一个最佳滤波系统。它可用于提取被平稳...

#### [Matlab]维纳滤波器设计

​ 维纳滤波（wiener filtering) 一种基于最小均方误差准则、对平稳过程的最优估计器。这种滤波器的输出与期望输出之间的均方误差为最小，因此，它是一个最佳滤波系统。它可用于提取被平稳噪声污染的信号。

​ 从连续的（或离散的）输入数据中滤除噪声和干扰以提取有用信息的过程称为滤波，这是信号处理中经常采用的主要方法之一，具有十分重要的应用价值，而相应的装置称为滤波器。根据滤波器的输出是否为输入的线性函数，可将它分为线性滤波器和非线性滤波器两种。维纳滤波器是一种线性滤波器。

##### 基本概念

​ 从噪声中提取信号波形的各种估计方法中，维纳（Wiener）滤波是一种最基本的方法，适用于需要从噪声中分离出的有用信号是整个信号（波形），而不只是它的几个参量。

维纳滤波器的输入为含噪声的随机信号。期望输出与实际输出之间的差值为误差，对该误差求均方，即为均方误差。因此均方误差越小，噪声滤除效果就越好。为使均方误差最小，关键在于求冲激响应。如果能够满足维纳－霍夫方程 [3] ，就可使维纳滤波器达到最佳。根据维纳－霍夫方程，最佳维纳滤波器的冲激响应，完全由输入自相关函数以及输入与期望输出的互相关函数所决定。

##### 维纳滤波器优缺点

维纳滤波器的优点是适应面较广，无论平稳随机过程是连续的还是离散的，是标量的还是向量的，都可应用。对某些问题，还可求出滤波器传递函数的显式解，并进而采用由简单的物理元件组成的网络构成维纳滤波器维纳滤波器的缺点是，要求得到半无限时间区间内的全部观察数据的条件很难满足，同时它也不能用于噪声为非平稳的随机过程的情况，对于向量情况应用也不方便。因此，维纳滤波在实际问题中应用不多。

实现维纳滤波的要求是：

1.输入过程是广义平稳

2.输入过程的统计特性是已知的。根据其他最佳准则的滤波器亦有同样要求

然而，由于输入过程取决于外界的信号、干扰环境，这种环境的统计特性常常是未知的、变化的，因而难以满足上述两个要求。这就促使人们研究自适应滤波器

##### 维纳滤波器原理分析：
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;clear all; close all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%输入信号
A=1;                                                      %信号的幅值
f=1000;                                                 %信号的频率
fs=10^5;                                                %采样频率
t=(0:999);                                              %采样点
Mlag=100;                                             %相关函数长度变量
x=A*cos(2*pi*f*t/fs);                                %输入正弦波信号
xmean=mean(x);                                    %正弦波信号均值
xvar=var(x,1);                                         %正弦波信号方差
noise=wgn(1,1000,2);%产生1行1000列的矩阵，强度为2dbw
xn=x+noise;                                         %给正弦波信号加入信噪比为20dB的高斯白噪声
plot(t,xn)
xlabel('x轴单位：t/s','color','b')
ylabel('y轴单位：A/V','color','b')
xnmean = mean(xn)                                  %计算加噪信号均值
xnms = mean(xn.^2)                                  %计算加噪信号均方值
xnvar = var(xn,1)                                       %计算输入信号方差
Rxn=xcorr(xn,Mlag,'biased');                   %计算加噪信号自相关函数
figure(2)
subplot(221)
plot((-Mlag:Mlag),Rxn)                             %绘制自相关函数图像
title('加噪信号自相关函数图像')
[f,xi]=ksdensity(xn);                                  %计算加噪信号的概率密度，f为样本点xi处的概率密度
subplot(222)
plot(xi,f)                                                   %绘制概率密度图像
title('加噪信号概率密度图像')
X=fft(xn);                                                  %计算加噪信号序列的快速离散傅里叶变换
Px=X.*conj(X)/600;                                   %计算信号频谱
subplot(223)
semilogy(t,Px)                                          %绘制在半对数坐标系下频谱图像
title('输入信号在半对数坐标系下频谱图像')
ylabel('y轴单位：w/HZ','color','b')
pxx=periodogram(xn);                               %计算加噪信号的功率谱密度
subplot(224)
semilogy(pxx)                                           %绘制在半对数坐标系下功率谱密度图像
title('加噪信号在半对数坐标系下功率谱密度图像')

ylabel('y轴单位：w/HZ','color','b')

%维纳滤波
N=100;                                                        %维纳滤波器长度
Rxnx=xcorr(xn,x,Mlag,'biased');                   %产生加噪信号与原始信号的互相关函数
rxnx=zeros(N,1);
rxnx(:)=Rxnx(101:101+N-1);
Rxx=zeros(N,N);                                          %产生加噪信号自相关矩阵
Rxx=diag(Rxn(101)*ones(1,N));
for i=2:N
c=Rxn(101+i)*ones(1,N+1-i);
Rxx=Rxx+diag(c,i-1)+diag(c,-i+1);
end
Rxx;
h=zeros(N,1);
h=inv(Rxx)*rxnx;                                          %计算维纳滤波器的h(n)
yn=filter(h,1,xn);                                         %将加噪信号通过维纳滤波器
figure(5)
plot(yn)                                                      %绘制经过维纳滤波器后信号图像
title('经过维纳滤波器后信号信号图像')
xlabel('x轴单位：f/HZ','color','b')
ylabel('y轴单位：A/V','color','b')
ynmean=mean(yn)                                     %计算经过维纳滤波器后信号均值
ynms=mean(yn.^2)                                     %计算经过维纳滤波器后信号均方值
ynvar=var(yn,1)                                         %计算经过维纳滤波器后信号方差
Ryn=xcorr(yn,Mlag,'biased');                     %计算经过维纳滤波器后信号自相关函数
figure(6)
subplot(221)
plot((-Mlag:Mlag),Ryn)                               %绘制自相关函数图像
title('经过维纳滤波器后信号自相关函数图像')
[f,yi]=ksdensity(yn);                                    %计算经过维纳滤波器后信号的概率密度，f为样本点xi处的概率密度
subplot(222)
plot(yi,f)                                                     %绘制概率密度图像
title('经过维纳滤波器后信号概率密度图像')
Y=fft(yn);                                                   %计算经过维纳滤波器后信号序列的快速离散傅里叶变换
Py=Y.*conj(Y)/600;                                    %计算信号频谱
subplot(223)
semilogy(t,Py)                                           %绘制在半对数坐标系下频谱图像
title('经过维纳滤波器后信号在半对数坐标系下频谱图像')
ylabel('y轴单位：w/HZ','color','b')
pyn=periodogram(yn);                               %计算经过维纳滤波器后信号的功率谱密度
subplot(224)
semilogy(pyn)                                            %绘制在半对数坐标系下功率谱密度图像
title('经过维纳滤波器后信号在半对数坐标系下功率谱密度图像')
ylabel('y轴单位：w/HZ','color','b')
subplot(4,1,1),plot(noise); title('噪声信号')
subplot(4,1,2),plot(x); title('正弦信号')
subplot(4,1,3),plot(xn); title('加噪信号')
subplot(4,1,4),plot(yn); title('维纳信号')


##### 维纳滤波器函数设计：
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%维纳滤波器函数设计
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y =wienerfilter(x,Rxx,Rxd,N)
%进行维纳滤波
%x是输入信号，Rxx是输入信号的自相关向量
%Rxd是输入信号和理想信号的的互相关向量，N是维纳滤波器的长度
%输出y是输入信号通过维纳滤波器进行维纳滤波后的输出
h=yulewalker(Rxx,Rxd,N);								%求解维纳滤波器系数
t=conv(x,h);											%进行滤波
Lh=length(h);											%得到滤波器的长度
Lx=length(x);											%得到输入信号的长度
y=t(double(uint16(Lh/2)):Lx+double(uint16(Lh/2))-1);%输出序列y的长度和输入序列x的长度相同
%以下是维纳滤波器系数的求解
function h=yulewalker(A,B,M)
%求解Yule-Walker方程
%A是接收信号的自相关向量为 Rxx(0),Rxx(1),......,Rxx(M-1)
%B是接收信号和没有噪声干扰信号的互相关向量为 Rxd(0),Rxd(1),......,Rxd(M-1)
%M是滤波器的长度
%h保存滤波器的系数
T1=zeros(1,M);%T1存放中间方程的解向量
T2=zeros(1,M);%T2存放中间方程的解向量
T1(1)=B(1)/A(1);
T2(1)=A(2)/A(1);
X=zeros(1,M);
for i=2:M-1
temp1=0;
temp2=0;
for j=1:i-1
temp1=temp1+A(i-j+1)*T1(j);
temp2=temp2+A(i-j+1)*T2(j);
end
X(i)=(B(i)-temp1)/(A(1)-temp2);
for j=1:i-1
X(j)=T1(j)-X(i)*T2(j);
end
for j=1:i
T1(j)=X(j);
end
temp1=0;
temp2=0;
for j=1:i-1
temp1=temp1+A(j+1)*T2(j);
temp2=temp2+A(j+1)*T2(i-j);
end
X(1)=(A(i+1)-temp1)/(A(1)-temp2);
for j=2:i
X(j)=T2(j-1)-X(1)*T2(i-j+1);
end
for j=1:i
T2(j)=X(j);
end
end
temp1=0;
temp2=0;
for j=1:M-1
temp1=temp1+A(M-j+1)*T1(j);
temp2=temp2+A(M-j+1)*T2(j);
end
X(M)=(B(M)-temp1)/(A(1)-temp2);
for j=1:M-1
X(j)=T1(j)-X(M)*T2(j);
end
h=X;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%维纳滤波器案例测试
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;clear all; close all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
d=y; d=d*8;						%增强语音信号强度
d=d';
[m,n]=size(d);
T = 1/Fs; % 采样时间
t = (1:n)*T;% 时间
subplot(3,2,1);
plot(t,d);
title('原始语音信号');
xlabel('时间/t');
ylabel('幅值/dB');
fq=fft(d,8192);						%进行傅立叶变换得到语音信号频频
subplot(3,2,2);
f=Fs*(0:4095)/8192;
plot(f,abs(fq(1:4096)));				%画出频谱图
title('原始语音信号的频域图形');
xlabel('频率 f');
ylabel('FFT');
x_noise=randn(1,n);				%（0，1）分布的高斯白噪声
x=d+x_noise;						%加入噪声后的语音信号
subplot(3,2,3);
plot(t,x);
title('加入噪声后');
xlabel('时间/t');
ylabel('幅值/dB');
fq=fft(x,8192);						%对加入噪声后的信号进行傅立叶变换，看其频谱变化
subplot(3,2,4);
plot(f,abs(fq(1:4096)));				%画出加入噪声后信号的频谱图
title('加入噪声后语音信号的频域图形');
xlabel('频率 f');
ylabel('FFT');
%维纳滤波
yyhxcorr=xcorr(x(1:4096));			%求取信号的信号的自相关函数
size(yyhxcorr);
A=yyhxcorr(4096:4595);
yyhdcorr=xcorr(d(1:4096),x(1:4096));			%求取信号和理想信号的互相关函数
size(yyhdcorr);
B=yyhdcorr(4096:4595);
M=500;
yyhresult=wienerfilter(x,A,B,M);				%进行维纳滤波
yyhresult=yyhresult(300:8192+299);
subplot(3,2,5);
t = (1:8192)*T;% 时间
plot(t,yyhresult);				%画出频谱图
title('进行维纳滤波');
xlabel('时间/t');
ylabel('幅值/dB');
fq=fft(yyhresult);							%对维纳滤波的结果进行傅立叶变换，看其频谱变化
subplot(3,2,6);
f=Fs*(0:4095)/8192;
plot(f,abs(fq(1:4096)));						%画出维纳滤波后信号的频谱图
title('经过维纳滤波后语音信号的频域图形');
xlabel('频率 f');
ylabel('FFT');


展开全文
• 飞机内驾驶舱噪音消除驾驶舱内的两个麦克风一个只产生噪音，一个噪音+声音使用维纳滤波器消除噪音。
• 维纳滤波器和卡尔曼滤波器的介绍和详细解说
• 本文从正交性出发推导维纳-霍夫方程以及最小均方误差

最近想要同步CSDN和微信公众号的内容，各位看客们可以两边都关注一下，方便获取最新的信息。请扫描下面的的二维码添加关注，谢谢支持。

传统信号处理的作用，往往是在频域上对某部分频段的信号进行增强，或者是对某部分频段的信号进行衰减，又或者兼而有之，它是对确定信号的一种信号处理，数字滤波器在这里面起到了关键的作用。

而现代信号处理这个课题面对的是随机信号和随机过程。其中估计和预测是自适应滤波的两个典型的应用，比如说将湮没在噪声中信号估计出来，此处的淹没不单单指的是信噪比，而是说他们很有可能在频谱上也是混叠的，传统的低通和高通显得显得无能为力。

后续的学习笔记，将会围绕：

1. 维纳滤波器--------本文的重点

2. 最速下降法

3. 随机梯度下降法

4. 最小均方算法（LMS）

5. 最小二乘法以及递归最小二乘算法（RLS）

6. 卡尔曼滤波器

7. 矩阵的基本知识

本文从正交性出发推导维纳-霍夫方程以及最小均方误差。

下面的学习笔记，将会以图形的形式进行展示，是因为原word文档的公式在公众号编辑器里有点水土不服，同时也懒得再用markdown重新开始编辑，同时也附上百度网盘的下载地址，观看效果应该更好，同时也附上参考书籍。

链接：https://pan.baidu.com/s/1S79AWpIsYz6IEe_ZkTER8A

提取码：saz4

展开全文
• 基于维纳滤波器和生成对抗网络的动态模糊图像处理方法
• 在讨论维纳滤波之前，先来看看维纳滤波器在线性滤波器体系中处于什么位置。 　经典的FIR和IIR滤波器要求已知信号和噪声的频谱信息，并且信号和噪声的频谱没有交叠。信号和噪声的频谱有交叠时，如果硬要使用FIR和IIR...

# 1. 维纳滤波器的引出

在讨论维纳滤波之前，先来看看维纳滤波器在线性滤波器体系中处于什么位置。
经典的FIR和IIR滤波器要求已知信号和噪声的频谱信息，并且信号和噪声的频谱没有交叠。信号和噪声的频谱有交叠时，如果硬要使用FIR和IIR当然也可以，但要么会造成噪声滤除不干净，要么会造成滤除噪声的同时对有用信号造成“误伤”。
实际上，在信号和噪声频谱有交叠时，滤波问题演变为在已知观测量的前提下，对未知信号进行最佳估计的问题（所以这里信号也称为估计量）。既然希望估计是最佳，那必然要有个评价准则，不同的评价准则便衍生出不同的估计方法（在信号处理领域就称为滤波方法）。
在对信号进行估计时还有一个重要问题，那就是是否有估计量的先验知识。
若没有估计量的任何先验知识，则把估计量视为一个常量，对应的是经典估计理论。按照最佳评价准则不同，有最大似然估计（MLE）、矩估计、最佳线性无偏估计（BLUE）、最小二乘估计（LSE）等。
若已经知道估计量的一些先验知识，比如概率密度函数（PDF）、统计特性等，则把估计量视为在先验知识约束下的随机变量，而某一时刻求出的估计量则是该变量的一个具体实现。这时使用的是贝叶斯估计理论，它将观测结果和估计量的先验知识结合起来，结果比经典估计理论更准确。按照最佳评价准则不同，有最小均方误差估计（MMSE）、最大后验估计（MAP）、线性最小均方误差估计（LMMSE）等。
在已经知道估计量部分先验知识的情况下，仍然采用经典估计方法也是可以的。但是有先验知识而不用，理论上来说估计精读必然比贝叶斯估计要低。
维纳滤波就是线性最小均方误差估计（LMMSE）在信号处理领域的具体应用。按照上面的描述，它需要已知估计量的先验知识。

# 2. 维纳滤波器理论分析

维纳滤波属于线性滤波器的一种，是由数学家维纳（Rorbert Wiener）提出的一种以最小均方误差为最优准则的线性滤波器。它要求观测量广义随机平稳的，并且要求已知观测量和估计量的前2阶矩，即均值和协方差矩阵。这里观测量和估计量是估计理论中的叫法，分别对应含噪信号和滤除噪声后的信号。
维纳滤波器是线性时不变系统，与经典线性滤波器一样存在卷积表达形式。
假设输入为 x ( n ) = s ( n ) + v ( n ) x(n)=s(n)+v(n) , 冲激响应为 h ( n ) h(n) ，输出为 y ( n ) y(n) ，则
y ( n ) = ∑ i h ( i ) x ( n − i ) y(n)=\sum_{i}h(i)x(n-i) 　（1）
维纳滤波器设计的核心就是要根据观测量 x ( n ) x(n) 和估计量 s ( n ) s(n) 的特性，求解冲激响应 h ( n ) h(n) 。然后就可以利用 h ( n ) h(n) 愉快地滤波了。
h ( n ) h(n) 按最小均方误差准则确定，该准则表示为：
ξ ( n ) = E ( e 2 ( n ) ) = m i n \xi(n)=E(e^2(n))=min 　 （2）
其中e(n)是估计误差，
e ( n ) = s ( n ) − y ( n ) e(n)=s(n)-y(n) 　　　 　（3）

为了按最小均方误差准则求解 h ( n ) h(n) ，令 ξ ( n ) \xi(n) h ( j ) h(j) 的导数为0，即
∂ ξ ( n ) ∂ h ( j ) = 2 E [ e ( n ) ∂ e ( n ) ∂ h ( j ) ] = − 2 E [ e ( n ) x ( n − j ) ] = 0 \frac {\partial \xi(n)}{\partial h(j)}=2E[e(n) \frac {\partial e(n)}{\partial h(j)}]=-2E[e(n)x(n-j)]=0
由此得到
E [ e ( n ) x ( n − j ) ] = 0 , ∀ j E[e(n)x(n-j)]=0, \forall j 　　（4）
式（4）称为正交方程，它表明任意时刻的估计误差都与滤波器的输入正交，也就是说滤波器的输入信息被完全利用了。
将式（1）和（2）代入式（4），得：
R s x ( m ) = ∑ i h ( i ) R x x ( m − i ) , ∀ m R_{sx}(m)=\sum_{i}h(i)R_{xx}(m-i),\forall{m} 　　 (5)
式中， R s x ( m ) R_{sx}(m) s ( n ) s(n) x ( n ) x(n) 的互相关函数， R x x ( m ) R_{xx}(m) x ( n ) x(n) 的自相关函数，分别定义为
R s x ( m ) R_{sx}(m) =E[s(n)x(n+m)]
R x x ( m ) R_{xx}(m) =E[x(n)x(n+m)]
式(5)就是维纳滤波的核心——著名的维纳-霍夫（Wiener-Hopf）方程。根据该方程求出 h ( i ) h(i) 后，就可以愉快地对信号进行滤波了。

# 3. 维纳-霍夫方程的求解

按照前面的叙述，维纳滤波器设计的核心问题就是根据 R s x R_{sx} R x x R_{xx} 求解维纳-霍夫方程。按照该方程中 i i 的取值范围不同，分别对应3种不同滤波器形式：

• 有限冲激响应（FIR）维纳滤波器： i i 从0到 N − 1 N-1 取有限个整数值
• 非因果无限冲激响应（非因果IIR）维纳滤波器： i i − ∞ -∞ + ∞ +∞ 取所有整数值
• 因果无限冲激响应（因果IIR）维纳滤波器： i i 从0到 + ∞ +∞ 取正整数值

三种形式下滤波器的求解方法也不相同。

## 3.1 FIR维纳滤波器

可以看出，求解 h o p t h_{opt} 需要矩阵求逆，但相关矩阵R为对称且为Toeplitz形式，故可借助数学手段对R高效求逆——Levinson-Durbin算法。
因为在时域分析，所以FIR维纳滤波器也叫时域维纳滤波器。

## 3.２ 非因果IIR维纳滤波器

因为在频域分析，非因果IIR维纳滤波器也叫频域维纳滤波器。

## 3.3 因果IIR维纳滤波器

然后再根据 H ( z ) H(z) 反过来求解 h ( n ) h(n) 。一般情况下，因果IIR维纳滤波器的求解比较困难。

# 4. 几个问题的理解

## 4.1 维纳滤波器是FIR还是IIR的？

由前面的叙述可以看出，维纳滤波器是一个大框架，仅定义了线性均方误差最小的准则，并不限制FIR还是IIR，具体由设计者定。

## 4.2 维纳滤波器和卡尔曼滤波器的关系？

在姚天任《现代数字信号处理（第2版）》第2.4~第2.5节种，给出了因果IIR的一个特例，即假设已知信号模型和观测模型（对应卡尔曼滤波中的状态转移方程和观测方程），二者均为线性，并且信号噪声和观测噪声均为高斯白噪声，推导为递推形式发现，这就是卡尔曼滤波器！
因此，卡尔曼滤波器本质上就是因果IIR维纳滤波器的递推表示形式。
维纳滤波和卡尔曼滤波的区别是：维纳滤波要求观测量广义随机平稳并且已知观测量和信号的统计特性；卡尔曼滤波的条件更苛刻，要求已知状态转移方程和观测方程，二者均为线性，并且状态噪声和观测噪声均为高斯白噪声。

## 4.3 维纳滤波器为什么比经典滤波器优秀？

以非因果维纳滤波器为例，说明为什么维纳滤波器比经典滤波器性能好。
设 s ( n ) s(n) v ( n ) v(n) 不相关，则
S s ( s + v ) ( z ) = S s s ( z ) + S s v ( z ) = S s s ( z ) S_{s(s+v)}(z)=S_{ss}(z)+S_{sv}(z)=S_{ss}(z)
S x x ( z ) = S s s ( z ) + S v v ( z ) S_{xx}(z)=S_{ss}(z)+S_{vv}(z)
将上面两个式子代入3.2节非因果IIR维纳滤波器传输函数，得
H o p t ( z ) = S s s ( z ) S s s ( z ) + S v v ( z ) H_{opt}(z)=\frac{S_{ss}(z)} {S_{ss}(z)+S_{vv}(z)}
令 z = e j w z=e^{jw} ，上式成为
H o p t ( w ) = ∣ S s s ( w ) ∣ ∣ S s s ( w ) + S v v ( w ) ∣ H_{opt}(w)=\frac{|S_{ss}(w)|} {|S_{ss}(w)+S_{vv}(w)|}

图形解释如下图。经典IIR滤波器 H ( w ) H(w) 在B点降为0，将使噪声混入信号。而维纳滤波器在有噪声处就开始衰减使得混入的噪声减少，保证在线性均方准则下最佳。

参考文献：

1. 姚天任，现代数字信号处理（第二版），第2章
2. Steven著，罗鹏飞 等译，统计信号处理基础-估计理论和检测理论，第12章
展开全文
• 多级维纳滤波器MATLAB代码，能够正常运行，在小快拍的情况下产生宽零陷，能降低权值计算求解的计算复杂度。
• 一种由自适应布谷鸟搜索 (ACS) 算法驱动的二维 FIR 维纳滤波器，用于对被不同方差水平的高斯噪声污染的多光谱卫星图像进行去噪。 提出 ACS 算法来优化维纳权重以获得最佳估计所需的未损坏图像。
• 维纳滤波器算法实现matlab
• 完整的维纳滤波器Matlab源程序学术2009-11-20 20:31:58 阅读308 评论0 字号：大中小完整的维纳滤波器Matlab源程序clear;clc;%输入信号A=1; %信号的幅值f=1000; %信号的频率fs=10^5; %采样频率t=(0:999); %采样点Mlag...
• FIR维纳滤波器的Matlab仿真验证主要内容 最优线性滤波器 1.概述 2.维纳滤波器 3.维纳-霍夫方程的求解 FIR维纳滤波器的Matlab仿真 1.问题描述 2.Matlab代码实现 仿真结果及其分析 最优线性滤波器 1、概述 最优线性...

...