⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imbonl.m

📁 给于MATLAB 环境下的非线性滤波器。此设计中用到了
💻 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 + -