📄 imbonl.m
字号:
function yq=IMBONL(wl,wb,u)
%该函数实现建立系统的逆模型
%======================改写成函数时以下部分作为输入========================%
% clear all
% clc
% wli=[0.07009890444100;-0.09814697901603;0.00001536682171;0.00000270496625;0.00000856955786];
% wbi=[0.37956003648185;0.41166556497537;0.44385949044322;0.47610605937860];
wli=wl;
wbi=wb;
lengi=5;%LMS滤波器的长度
leni=2;%B样条网络的输入
ui=0.1;%lms滤波器的优化步长
ri=0.65;%B样条网络的修正步长
pi=2;%B样条的阶数
ni=3;%插入节点数
% ni=2;%插入节点数
%======================改写成函数时以上部分作为输入========================%
Uli=zeros(lengi,1);%LMS滤波器的输入
Ubi=zeros(1,leni);%B样条函数的输入
Nbi=zeros(1,pi+ni-1);%B样条函数的隐层节点数
%=====================以下部分为输出,也就是逆模型的参数================%
lengo=5;%LMS滤波器的长度
leno=2;%B样条网络的输入
uo=0.1;%lms滤波器的优化步长
ro=0.65;%B样条网络的修正步长
po=2;%B样条的阶数
no=2;%插入节点数
%=====================以上部分为输出,也就是逆模型的参数================%
wlo=zeros(lengo,1);%lms的权系数
wbo=rand(po+no-1,1);%B样条的权系数
Ulo=zeros(lengo,1);%LMS滤波器的输入
Ubo=zeros(1,leno);%B样条函数的输入
Nbo=zeros(1,po+no-1);%B样条函数的隐层节点数
%========================产生(0,1)内的随机信号开始=======================%
N=800;
Lt=100;
um=rand(1,N);%产生1500组随机信号
%========================产生(0,1)内的随机信号结束=======================%
delay=0;%滤波器的输出延时
err=0;
for k=lengi+1:N
d(k)=um(k-delay);%期望输出值
%========================建模滤波器的输出开始=============================%
sumi=zeros(1,pi+ni-1); %计算B样条网络的隐层节点
for m=0:leni-1
sumi=sumi+Bs(um(k-m),ni,pi,0,1);
end
Nb=sumi;
for r=1:lengi
Uli(r)=um(k-r+1);
end
y2t(k)=Nb*wbi;%计算B样条网络的输出
y1t(k)=wli'*Uli;%lms滤波器的输出
yt(k)=y2t(k)+y1t(k);%整个非线性滤波器的输出
%=========================建模滤波器的输出结束=============================%
%=========================逆模型的训练开始=============================%
sumo=zeros(1,po+no-1); %计算B样条网络的隐层节点
for m=0:leno-1
x=yt(k-m);
if(yt(k-m)>=1)
yt(k-m)=1;
elseif(yt(k-m)<=0)
yt(k-m)=0;
end
sumo=sumo+Bs(yt(k-m),no,po,0,1);
end
Nba=sumo;
for m=1:lengo
Ulo(m)=yt(k-m+1);
end
y2(k)=Nba*wbo;%计算B样条网络的输出
y1(k)=wlo'*Ulo;%lms滤波器的输出
y(k)=y2(k)+y1(k);%整个非线性滤波器的输出
e(k)=d(k)-y(k);%拟合误差
wlo=wlo+2*uo*e(k)*Ulo;%利用误差调整lms滤波器的权系数
wbo=wbo+ro*e(k)*Nba'/(Nba*Nba');%利用误差调整B样条网络的权系数
% xerr(k)=abs(e(k)/d(k));
% err=err+e(k)*e(k);
%=========================逆模型的训练结束=============================%
end
% figure:plot(y(N-100:N),'b');
% hold on
% plot(um(N-100:N),'r'),title('蓝色:滤波器的输出;红色:合成噪声');
% % % figure:plot(e(leni+1:N));
% % % MSE=err/(N-leni);
Ulo=u;
sumo=zeros(1,po+no-1); %计算B样条网络的隐层节点
for k=1:leno
if(u(k)>1)
u(k)=1;
elseif(u(k)<0)
u(k)=0;
end
sumo=sumo+Bs(u(k),no,po,0,1);
end
Nba=sumo;
yq2=Nba*wbo;%计算B样条网络的输出
yq1=wlo'*Ulo;%lms滤波器的输出
yq=yq2+yq1;%整个非线性滤波器的输出
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -