onlyhzc 发表于 2009-1-2 14:35

matlab LMS 自适应滤波

写了个自适应滤波器想把50hz的信号过滤掉,但是出来的信号和输入信号一模一样,错在哪里?请高手指正,多谢!程序如下:
clc;
clear;
t=0:.001:.2000;
s=0.5*square(2*pi*10*t,50);%产生幅度为0.5,频率为10hz方波;
n=cos(2*pi*50*t);%幅度为1频率为50hz的正弦波
x=s+n;%输入信号
plot(t,s);
u=0.0001;
%自适应滤波
for i=1:1:201
    w(1:1:4,1)=;
    y(i)=w(1:1:4,i)'*;
    e=x(i)-y(i);
    out(i)=e;
    w(1:1:4,i+1)=w(1:1:4,i)+2*u.*e*;
end
%画图
hold on;
plot(t,out,'red');
hold off;

songzy41 发表于 2009-1-2 17:32

原帖由 onlyhzc 于 2009-1-2 14:35 发表 http://www.chinavib.com/forum/images/common/back.gif
写了个自适应滤波器想把50hz的信号过滤掉,但是出来的信号和输入信号一模一样,错在哪里?请高手指正,多谢!程序如下:
clc;
clear;
t=0:.001:.2000;
s=0.5*square(2*pi*10*t,50);%产生幅度为0.5,频率为10hz方 ...
要想把把50hz的信号过滤掉,应使用自适应的陷波器。程序为
clc; clear all;
t=0:.001:.2000;
s=0.5*square(2*pi*10*t,50);%产生幅度为0.5,频率为10hz方波;
n=cos(2*pi*50*t);%幅度为1频率为50hz的正弦波
x=s+n;%输入信号
N=length(t);
plot(t,s); hold on;
u=0.0001;
%自适应陷波器
x1=cos(2*pi*50*t);
x2=sin(2*pi*50*t);
u=0.45; w1=0.1; w2=0.1;
e=zeros(1, N);
for i=1: N
y(i)=w1 * x1(i)+ w2 * x2(i);
e(i) =x(i)-y(i);
w1=w1+u * e(i) * x1(i);
w2=w2+u * e(i) * x2(i);
end
%画图
out=e;
plot(t,out,'r',t,x,'g');
hold off;
得图如下,从图中可看出方波每一次跳变都引起自适应滤波器一个暂态响应。

onlyhzc 发表于 2009-1-2 19:46

多谢了!

后来才终于发现是自适应滤波器的输入x1、x2写错了,所以才没能滤出来,多谢了!

xiaocheng_2007 发表于 2009-3-15 16:43

回复 沙发 songzy41 的帖子

沙发学长,u,w1和w2这三个参数依据什么确定呢?

_eason 发表于 2013-5-9 10:58

songzy41 发表于 2009-1-2 17:32 static/image/common/back.gif
要想把把50hz的信号过滤掉,应使用自适应的陷波器。程序为
clc; clear all;
t=0:.001:.2000;


自适应,对相关是不是依赖很大,即同频信号对自适应滤波难度很大??谢谢

补充内容 (2013-5-14 13:47):
怎么计算其衰减的程度,谢谢,和怎么控制其衰减程度,跟什么有关系,谢谢
页: [1]
查看完整版本: matlab LMS 自适应滤波