我有个自适应滤波器的程序,但是当噪声很大的时候,期望波形就不对了,为什么呢?

浏览:173607
% 周期信号的产生
t=0:0.01:5;
LF=length(t);
xs=10*sin(0.5*t)+7*sin(20*t);
figure(1)
subplot(2,1,1);
plot(t,xs);grid;
ylabel('幅值');
xlabel('时间');
title('输入信号xs时域图');
subplot(2,1,2);
plot(t,abs(fft(xs)));grid;
ylabel('幅值');
xlabel('时间');
title('输入信号xs信号频域图');
% 噪声信号的产生
randn('state',sum(LF*clock));
xn=randn(1,LF);
figure(2);
subplot(2,1,1);
plot(t,xn);grid;
xlabel('时间');
ylabel('幅值');
title('随机噪声信号xn 时域图');
subplot(2,1,2);
plot(t,abs(fft(xn)));grid;
ylabel('幅值');
xlabel('时间');
title('随机噪声信号xn 频域图');
xn = xs+xn;
xn = xn.' ; % 输入信号序列
dn = xs.' ; % 预期结果序列
M = 20 ; %滤波器的阶数
itr = length(xn); %递归迭代的次数为xn 的长度

rho_max = max(eig(xn*xn.')); % 输入信号相关矩阵的最大特征值
mu = rand()*(1/rho_max) ; % 收敛因子 0 < mu < 1/rho
% 初始化参数
en = zeros(itr,1);
W = zeros(M,itr);

% 迭代计算
for k = M:itr
x = xn(k:-1:k-M+1);
y = W(:,k-1).' * x;
en(k) = dn(k) - y ;

% 滤波器权值计算的迭代式
W(:,k) = W(:,k-1) + 2*mu*en(k)*x;
end

% 求最优时滤波器的输出序列
yn = ones(size(xn));
for k = M:length(xn)
x = xn(k:-1:k-M+1);
yn(k) = W(:,end).'* x;
end
% 绘制滤波器输入信号
figure;
subplot(2,1,1);
plot(t,xn);grid;
ylabel('幅值');
xlabel('时间');
title('滤波器输入信号');
% 绘制自适应滤波器输出信号
subplot(2,1,2);
plot(t,yn);grid;
ylabel('幅值');
xlabel('时间');
title('滤波器输出信号');
% 绘制自适应滤波器输出信号,预期输出信号和两者的误差
figure
plot(t,yn,'b',t,dn,'g',t,dn-yn,'r');grid;
legend('自适应滤波器输出','预期输出','误差');
ylabel('幅值');
xlabel('时间');
title('自适应滤波器');
---------------xn = xs+xn;问题就在这,要是输入xn = xs+10xn;或者xn = xs+100xn;
最后 输出的波形就完全失真了,求高手,大侠帮忙看看,我做这个是多个波形叠加并且能实线小噪声很多倍噪声的自适应滤波器设计,真的搞不懂了。。。
邀请回答 我来回答

当前暂无回答

回答可获赠 200金币

没解决?试试专家一对一服务

换一批
    App下载
    技术邻APP
    工程师必备
    • 项目客服
    • 培训客服
    • 平台客服

    TOP