当前位置:
文档之家› Fir维纳滤波器的Matlab仿真
Fir维纳滤波器的Matlab仿真
这里opt 表示“最佳”,这就是FIR维纳滤波器的冲激响应。
FIR维纳滤波器的Matlab仿真
1、问题描述 产生一个随机信号w(n),通过系统H(z)=1/(1-0.9/z)后,得到原始 信号s(n)。对原始信号s(n)添加高斯白噪声noise。设计一个FIR维纳 滤波器,从被干扰后的信号中尽可能恢复s(n)。
仿真结果及分析 仿真结果(信号长度N=256,阶数M=8)-->mse=0. 3215
仿真结果及分析 仿真结果(信号长度N=256,阶数M=8)-->mse=0. 3215
仿真结果及分析 仿真结果(信号长度N=512,阶数M=8)-->mse=0.3326
仿真结果及分析 仿真结果(信号长度N=512,阶数M=8)-->mse=0.3326
y(n) h(m) x(n m)
m
最优线性滤波器
h(n)后得到的 y (n) 尽量接近于s(n) ,因此称 我们希望 x(n)通过线性系统 ^ ^ y (n)为 s(n) 的估计值,用 s(n) 表示,即 y (n) s (n) 则维纳滤波器的输入—输出关系可用下面图表示。
பைடு நூலகம்
^ e(n)表 如果我们分别以s(n) 与 s(n)表示信号的真实值与估计值,而用 ^ 示他们之间的误差,即 e(n) s(n) s(n) 显然 e(n)可能是正值,也可能是负值,并且它是一个随机变量。因 此,用它的均方误差来表达误差是合理的,所谓均方误差最小即 它的平方的统计期望最小,即: (n) E[e2 (n)] min 采用最小均方误差准则作为最佳过滤准则的原因还在于它的理论 分析比较简单,不要求对概率的描述。
subplot(2,2,2) plot(noise); title('噪声信号'); xlabel('Time(n)'); ylabel('Amplitude'); %axis([0 N -5 5]);
FIR维纳滤波器的Matlab仿真
subplot(2,2,3) plot(out_s); title('维纳滤波后的信号'); %axis([0 N -3 3]);%用来给出x,y轴最小最大值来选择坐标系的取值范围 xlabel('Time(n)'); ylabel('Amplitude');
专业: 电路与系统 学号: 12011001052 姓名: 马园园 指导老师: 杨鉴
主要内容
最优线性滤波器
1.概述 2.维纳滤波器
3.维纳-霍夫方程的求解
FIR维纳滤波器的Matlab仿真
1.问题描述
2.Matlab代码实现
仿真结果及其分析
最优线性滤波器
1、概述 最优线性滤波器和预测器,这里的最优指的是均方误差 (mean square error,MSE)最小。最小均方误差引出了线性滤波 器理论。 在许多实际应用中,人们无法直接得到所需的有用信号,能 够得到的是退化了或失真了的有用信号。为了提取或回复有用的 原始信号,这就需要设计一种滤波器,对得到的信号进行滤波, 使它的输出尽可能逼近原始信号,成为最佳估计,这种滤波器就 称为最优滤波器。
最优线性滤波器
2、维纳滤波器 维纳(Wiener)是用来解决从噪声中提取信号的一种过滤( 或滤波)方法。维纳滤波器是最小均方误差准则在信号滤波、预 测中的具体应用。 维纳滤波器是一个线性时不变系统,通过该系统后,在最小 均方误差准则下给出信号s(n)的尽可能逼近。 一个线性系统,如果它的单位样本响应为h(n) ,当输入一个随 机信号 x(n) , x(n) s(n) v(n) v(n) 表示噪声,则输出为 y (n) s(n) 表示原始信号, 其中
最优线性滤波器
设滤波器冲激响应序列的长度为N ,冲激响应矢量为h [h(0)h(1)....h( N 1)]T 滤波器输入数据矢量为x(n) [ x(n) x(n 1)...x(n N 1)]T ^ 则滤波器的输出为 y(n) s(n) x T (n)h hT x(n) ,这样,标准维纳-霍夫程可 写成 P T h T R 或P Rh,其中P E[ x(n)s(n)] 是s(n)与 x(n) 的互相 关函数,它是一个 N维列矢量;R 是 x(n) 的自相关函数,是N 阶方 阵 R E[ x(n) x T (n)] 1 利用求逆矩阵的方法直接求解式, P T h T R P Rh 得 hopt R P
FIR维纳滤波器的Matlab仿真
2、代码仿真 %************基于最优FIR滤波器线性预测********************** clear; clc;
N=128;%N为原始信号的长度 %N=input('请输入信号长度: '); M=8;%M代表滤波器的阶数 %M=input('输入滤波器阶数 : ');
xx
别定义为
Rxs E[ x(n)s(n m)]
Rxx E[ x(n) x(n m)]
上式称为维纳滤波器的标准方程或维纳-霍夫(Wiener-Hopf)方程 。如果已知 Rxs (m)和 Rxx (m),那么解此方程即可求得维纳滤波器的冲 激响应。
最优线性滤波器
标准方程右端的求和范围,即i 的取值范围没有具体标明,实际 上有三种情况: (1)有限冲激响应(FIR)维纳滤波器,i 从0 到N-1 取得有限个整数 值; (2)非因果无限冲激响应(非因果IIR)维纳滤波器,i 从 到 取 所有整数值; (3)因果无限冲激响应(因果IIR)维纳滤波器,i 从0 到 取正整数 值。 上述三种情况下标准方程的解法不同,本文只描述FIR维纳滤 波器的求解。
FIR维纳滤波器的Matlab仿真
仿真结果分析:
1.维纳滤波的阶数越大,滤波后的信号更接近原始信号,但随之计 算量也增大。 2.保持滤波器阶数不变改变信号样本的长度(点数)可以发现滤波 的效果虽着信号样本的长度的增加而提高。(这是因为信号样本越 长信号的统计特征就越完整。)
subplot(2,2,4) plot(x); title('噪声干扰后的信号'); xlabel('Time(n)'); ylabel('Amplitude'); %axis([0 N -5 5]);
仿真结果及分析 仿真结果(信号长度N=256,阶数M=3)-->mse=0. 0.4045
仿真结果及分析 仿真结果(信号长度N=256,阶数M=3)-->mse=0. 0.4045
FIR维纳滤波器的Matlab仿真
% ******************画图****************** subplot(2,2,1) plot(xd); title('期望信号'); %axis([0 N -3 3]);%给出x,y轴最小最大值来选择坐标系的取值范围 xlabel('Time(n)'); ylabel('Amplitude');
最优线性滤波器
3.维纳-霍夫方程的求解 2 为了按 (n) E[e (n)] min式所示的最小均方误差准则来确定 (n) 对h( j ) 的导数等于零,即可得 维纳滤波器的冲激响应 ,令
Rxs (m) h(i) Rxx (m i), m i Rxs (m) x(n)的自相关函数,分 式中, 是s(n) 与x(n) 的互相关函数, 是 R (m)
FIR维纳滤波器的Matlab仿真
%***产生维纳滤波中x方向上观测信号与期望信号的互相关矩阵**** rxd=xcorr(x,xd); for i=1:M mrxd(i)=rxd(N-1+i); end hopt=inv(mrxx)*mrxd';%由维纳-霍夫方程得到滤波器最优解--FIR维 纳滤波器的冲激响应 out_s=filter(hopt,1,x);%滤波后的输出信号(预测信号) %out_s=conv(x,hopt);%滤波后的输出信号(预测信号) %*********求均方误差****************** fprintf('滤波后的信号相对原信号的统计均方误差:\n'); mse=mean((out_s-s).^2) %滤波后的信号相对原信号的统计均方误差
FIR维纳滤波器的Matlab仿真
%********产生一个原始信号*************** w=sqrt(0.20)*randn(N,1); A=[1 -0.9]; s=filter(1,A,w); %********************************************* noise=sqrt(1.5)*randn(N,1);%用randn函数产生正态分布伪随机数噪声 x=s+noise;%产生噪干扰后的原始信号 %*********产生维纳滤波中加噪信号的自相关矩阵********** rxx=xcorr(x); for i=1:M for j=1:M mrxx(i,j)=rxx(N-i+j); end end xd=s;%原始信号