声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1844|回复: 0

变步长的LMS自适应滤波算法

[复制链接]
发表于 2007-5-23 09:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
求教各位大侠:
小妹在做变步长的LMS自适应滤波算法上遇到了难题解决不了,恳各位不吝赐教!
以下是代码,恳各位指正,不胜感激!
function LMS_adaptive_filter;%定义功能函数LMS_adaptive_filter
clear;%清除工作空间
close all%...
hold off%...
sysorder=5;%抽头数...
samples_per_period=50; %周期采样频率
N=10*samples_per_period-1;%总采样次数
signal=cos(pi*0.02*[0:N-1])+sin(2*pi*0.02*[0:N-1])+cos(3*pi*0.02*[0:N-1])+sin(4*pi*0.02*[0:N-1])+cos(5*pi*0.02*[0:N-1])...
    +sin(6*pi*0.02*[0:N-1])+cos(7*pi*0.02*[0:N-1])+sin(8*pi*0.02*[0:N-1])+cos(9*pi*0.02*[0:N-1]);%初始输入信号/期望信号
figure;%作图1 的第一子图
subplot(2,1,1);
plot(signal);
grid;
title('自适应滤波器的理想输入');
nvar=0.5;%噪声方差
noise=nvar*randn(1,N );%噪声信号
X=signal+noise;%带加性噪声的输入信号
delayX=[0 X];% 输入信号延时
subplot(2,1,2);%作图1的第二子图
plot(delayX);
grid;
title('自适应滤波器的噪声输入');
SIGNAL=[signal 0];
%M=32;%滤波器长度
M=length(signal);%M为接收数据长度
mu=0.002;%迭代步长
totallength=size(X,1);%步长
N=60;%60结点作为训练序列
%算法的开始
w=zeros(sysorder,1);%初始化
for n=sysorder:N
    e(n)=X-signal;
    step=mu./(1+abs(e(n)).^2);
    %u=inp(n:-1:n-sysorder+1);%u的矩阵
    X=signal+noise;
    y(n)=signal;%系统输出
    %e(n)=d(n)-y(n);%系统误差
    if n<20
        mu=0.32;
    else
        mu=0.15;
    end
    w=w+stup*X*e(n);%迭代方程
end
%initial_status=initlms(zeros(1,M),mu);%滤波器设初值
%[Y,e,initial_status]=adaptlms(X,SIGNAL,initial_status);%LMS自适应滤波器输出
figure;%作图2的第一子图
subplot(2,1,1);
plot(0:N-1,Y,'r.',0:N ,SIGNAL,'k');
grid;
title('预测信号与实际信号的比较');
legend('预测信号', '实际信号');
error=signal-Y;%输出误差信号
subplot(2,1,2);%作图2的第二子图
plot(error);
grid;
title('自适应滤波器的预测误差');
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-12 11:20 , Processed in 0.064035 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表