www.pudn.com > dsp_lms.rar > chanl_adp_lms.m


 function [h_all,y,erro]=chanl_adp_lms(data,expect,offset,step) 
% data:在自适应滤波器输入数据流(至少order_h+1个) 
% y:输出的数据流/expect:期望逼近的数据值(两行向量者相同位数上对应) 
% stept:此刻步长因子在此函数中调用步长因子计算公式 
% h_all:记录每次更新后的传输函数向量(对应某一行),第一行为h初值和本次预测第0个值 
%       每行最后一列记录下次滤波器新进数值序号即本次更新时所预测的数值序号 
% offset:表示进来几个数据后传输函数向量h更新一次,即h更新频率 
global n_total  var_noise  snr order_h 
h=zeros(1,order_h);%传输函数向量初值 
h_all=[h,0];% 
 if (length(data)-order_h ~= length(expect)) 
    disp('LMS filter input parament error!'); 
    disp('       length(data)-length(expect)=order_h    !!!!!'); 
    return 
 end 
 
erro_cheng_x=zeros(1,order_h);%记录不到offset时即没更新前的总误差 
i=1;%记录更新次数 
for k= 1 : length(data)-order_h 
    y(k)=data(k:k+order_h-1)*fliplr(h)'; 
    erro(k)=expect(k)-y(k); 
    erro_cheng_x=erro_cheng_x+erro(k)*data(k:k+order_h-1); 
    if mod(k,offset)==0  
       % step=.001; 
        h=h+step*erro_cheng_x; 
        h_all(i+1,:)=[h,k]; %h-all每一行表传输状态,k表示第几次跌代 
        i=i+1; 
        erro_cheng_x=zeros(1,order_h); 
    end 
end