完整的维纳滤波器Matlab源程序

完整的维纳滤波器Matlab源程序学术2009-11-20 20:31:58 阅读308 评论0 字号:大中小
完整的维纳滤波器Matlab源程序
clear;clc;
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); %正弦波信号方差
xn=awgn(x,5); %给正弦波信号加入信噪比为20dB的高斯白噪声
figure(1)
plot(t,xn) %绘制输入信号图像
title('输入信号图像')
xlabel('x轴单位:t/s','color','b')
ylabel('y轴单位:f/HZ','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('输入信号在半对数坐标系下频谱图像')
xlabel('x轴单位:w/rad','color','b')
ylabel('y轴单位:w/HZ','color','b')
pxx=periodogram(xn); %计算输入信号的功率谱密度
subplot(224)
semilogy(pxx) %绘制在半对数坐标系下功率谱密度图像
title('输入信号在半对数坐标系下功率谱密度图像')
xlabel('x轴单位:w/rad','color','b')
ylabel('y轴单位:w/HZ','color','b')
%fir滤波
wp=0.4*pi; %通带截止频率
ws=0.6*pi; %阻带截止频率
DB=ws-wp; %过渡带宽度
N0=ceil(6.6*pi/DB);
M=N0+mod(N0+1,2); %计算fir滤波器阶数
wc=(wp+ws)/2/pi; %计算理想低通滤波器通带截止频率(关于π归一化)
hn=fir1(M,wc); %调用fir1计算FIRDF的h(n)
y1n=filter(hn,1,xn); %将输入信号通过fir滤波器figure(3)
纸币识别器plot(y1n) %绘制经过fir滤波器后信号图像第七届中国国际动漫节
title('经过fir滤波器后信号图像')
xlabel('x轴单位:f/HZ','color','b')
ylabel('y轴单位:A/V','color','b')
y1nmean=mean(y1n) %计算经过fir滤波器后信号均值
y1nms=mean(y1n.^2) %计算经过fir滤波器后信号均方值
y1nvar=var(y1n,1) %计算经过fir滤波器后信号方差
Ry1n=xcorr(y1n,Mlag,'biased'); %计算经过fir滤波器后信号自相关函数
figure(4)
subplot(221)
plot((-Mlag:Mlag),Ry1n) %绘制自相关函数图像
title('经过fir滤波器后信号自相关函数图像')
[f,y1i]=ksdensity(y1n); %计算经过fir滤波器后信号的
概率密度,f为样本点xi处的概率密度
subplot(222)
plot(y1i,f) %绘制概率密度图像
title('经过fir滤波器后信号概率密度图像')
Y1=fft(y1n); %计算经过fir滤波器后信号序列的快速离散傅里叶变换
Py1=Y1.*conj(Y1)/600; %计算信号频谱
subplot(223)
semilogy(t,Py1) %绘制在半对数坐标系下频谱图像
设备维修管理系统
title('经过fir滤波器后信号在半对数坐标系下频谱图像')
xlabel('x轴单位:w/rad','color','b')
ylabel('y轴单位:w/HZ','color','b')
py1n=periodogram(y1n); %计算经过fir滤波器后信号的功率谱密度
subplot(224)
semilogy(py1n) %绘制在半对数坐标系下功率谱密度图像
title('经过fir滤波器后信号在半对数坐标系下功率谱密度图像')
xlabel('x轴单位:w/rad','color','b')
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('经过维纳滤波器后信号在半对数坐标系下频谱图像')
xlabel('x轴单位:w/rad','color','b')
ylabel('y轴单位:w/HZ','color','b')
pyn=periodogram(yn); %计算经过维纳滤波器后信号的功率谱密度
subplot(224)
semilogy(pyn) %绘制在半对数坐标系下功率谱密度图像
title('经过维纳滤波器后信号在半对数坐标系下功率谱密度图像')
xlabel('x轴单位:w/rad','color','b')
ylabel('y轴单位:w/HZ','color','b')
---------------------------------------------------------------------------------------------
Matlab维纳滤波器最小均方误差可以为零吗
v(n)=sin(2*pi/4*n)
s(n)=sin(2*pi/16*n)
x(n)=s(n)+v(n)
如何提高孩子学习成绩
y(n)=s(n)
e(n)=y(n)-x(n)*h(n)
h=rxx^-1*ryx rxx,ryx分别是x的自相关函数和y、x的互相关函数
=(rvv+rss)^-1*rss
计算的r00、r11前8个数值如下:
rss=[0.0313,0.0289,0.0227,0.0141,0.0047,-0.0039,-0.0105,-0.0144];
rvv=[0.5,0,-0.25,0,0.5,0,-0.25,0];
fir取6阶时,对应最小均方误差为:0.0089
fir取8阶时,对应最小均方误差为:0.0074
均没有达到最小误差为零的要求,应该可以理解为x(n)经过维纳滤波器h(n)的输出没有
得到所期望的y(n)=s(n).
但若采用一般的滤波器,由于s(n)、v(n)的频谱分离,应该能够无失真的恢复出信号s (n).
若照这样理解的话是不是可以认为一般的滤波器在某些情况下要比用维纳滤波器好一
些,还是我理解有错误,欢迎大家讨论。
-----------------------------------------------------------------------------------------------
matlab 中哪个命令可以实现维纳滤波器的功能
急用维纳滤波器,我需要它来仿真信号的消噪
[ 本帖最后由eight 于2008-3-24 17:18 编辑]
搜索更多相关主题的帖子: matlab 维纳滤波器信号
UID65964 帖子10 精华0 积分1 体能10 点威望0 点管理积分0 点阅读权限10 性别男来自湖南在线时间2 小时注册时间2007-6-5 最后登录2007-6-22 查看详细资料TOP
花如月
翰林学士

本文发布于:2024-09-24 17:10:49,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/477347.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:信号   图像   输入   计算
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议