自适应滤波器的结果不对
我在做信号去噪,想用自适应噪声抵消的方法,所以选择的原始信号为正弦信号+白噪声,参考信号为白噪声,系统的最后输出en应该为要得到的有用信号,按照书中讲的算法写的程序,但是我仿真的结果总是不对有没有自适应滤波器的高手,下面是我的程序,请帮我仿真并分析下原因。
非常感激!!
%%子函数
function=LMS(xn,dn,M,mu)
N=100;%%信号长度
en=zeros(N,1);%%自适应滤波系统输出
W=zeros(M,N);
%%迭代算法
for k=M:N
x=xn(k:-1:k-M+1);
yn=W(:,k-1).'*x;
en(k)=dn(k)-y;
W(:,k)=W(:,k-1)+2*mu*en(k)*x;
end
%%主程序
close all;
clear all;
%周期信号
t=0:99;
xs=sin(0.5*t);
%%噪声信号
randn('state',sum(100*clock));
e=100*randn(1,100);
%%滤波
sn=xs+e;%%自适应滤波器的原始输入
xn=e.';
dn=sn.';%%自适应滤波起的参考输入,即自适应滤波器的输入
M=20;%%滤波器介数
rho_max=max(eig(xn*xn.'));
mu=rand()*(1/rho_max);
=LMS(xn,dn,M,mu);
figure;
subplot(211);
plot(sn);title('原始带噪信号');
subplot(212);
plot(en);title('去噪后信号');
%%学习曲线
J=en.^2;
figure;
plot(J);title('学习曲线');
subplot(211); 程序没问题,参数设置不合理,结果间下面。
1)信号太短,学习时间不够
2)步长要在学习速度与稳态值之间权衡选择
3)信噪比不能太低
%%主程序
close all;
clear all;
%周期信号
t=0:999;
xs=sin(0.5*t);
%%噪声信号
randn('state',sum(1000*clock));
e=5*randn(1,1000);
%%滤波
sn=xs+e;%%自适应滤波器的原始输入
xn=e.';
dn=sn.';%%自适应滤波起的参考输入,即自适应滤波器的输入
M=30;%%滤波器介数
rho_max=max(eig(xn*xn.'));
mu=5*rand()*(1/rho_max);
=LMS(xn,dn,M,mu);
figure;
subplot(211);
plot(sn);title('原始带噪信号');
subplot(212);
plot(en);title('去噪后信号');
%%学习曲线
J=en.^2;
figure;
plot(J);title('学习曲线');
% subplot(211);
figure,subplot(211),plot(abs(fft(sn)));
subplot(212),plot(abs(fft(en))); 非常感谢,我学习下
:@) Error using ==> lms
Too many input arguments.
为什么我运行不出来啊? 我想问一下,如果我有带噪音的信号,如何通过LMS算法进行去噪?
还有一段信号如何求其隐含周期?
回复 5楼 kangtj 的帖子
同问啊,我也非常想知道,如何通过LMS算法进行去噪?望老师们指点下啊
页:
[1]