📄 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -