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

📄 nlfilter.m

📁 给于MATLAB 环境下的非线性滤波器。此设计中用到了
💻 M
字号:
clear all
clc
%=======================对输入数据的处理部分===============================%
% uun=load('u');
% yun=load('y');
% umin=min(uun);
% umax=max(uun);
% ymin=min(yun);
% ymax=max(yun);
% un=Normalizing(uun);
% yn=Normalizing(yun);
%=======================对输入数据的处理部分结束============================%

Ndr=200;% 训练样本

%=========================非线性滤波器的参数===============================%
leng=5;%LMS滤波器的长度
lengo=5;
len=2;%B样条网络的输入

p=2;%B样条的阶次
n=3;%插入点的个数

wl=zeros(leng,1);%lms的权系数
wb=rand(p+n-1,1);%B样条的权系数

Ul=zeros(leng,1);%LMS滤波器的输入
Ulc=zeros(leng,1);
Ub=zeros(1,len);%B样条函数的输入
Nb=zeros(1,p+n-1);%B样条函数的隐层节点数
Nbc=zeros(1,p+n-1);%B样条函数的隐层节点数

 u=0.1;%lms滤波器的优化步长
 r=0.65;%B样条网络的修正步长
 err=0;
%=========================非线性滤波器的参数===============================%
 umax=11;
 umin=9;
 
 ymax=122;
 ymin=81;
 
 ucmax=11;
 ucmin=8;
 
 ycmax=121;
 ycmin=64;
 

%========================非线性滤波器建模和消噪=============================%

 uu=10+(rand(1,Ndr)-rand(1,Ndr))*1;

 eqmax=15.5;
 eqmin=-2.5;
  %反馈网络的输出
 yq=0;
% pp=rand(1,Ndr)*10;
 pp=ones(1,Ndr)*5;

for k=1:leng
    yq(k)=0;
end

 for k=leng+1:Ndr
   %========================非线性滤波器建模=============================% 
     um(k)=uu(k)-yq(k-1);  %被控对象的输入
     uf(k)=(uu(k)-umin)/(umax-umin);%建模滤波器的输入
     uc(k)=(um(k)-ucmin)/(ucmax-ucmin);%复制滤波器的输入
% %      pp=rand(1);
     yun(k)=uu(k)*uu(k);
     ynoise(k)=um(k)*um(k)+pp(k);
     yy(k)=uu(k)*uu(k)+pp(k);
   
   
%     d(k)=(ynoise(k)-ymin)/(ymax-ymin);%期望输出值
    d(k)=(yun(k)-ymin)/(ymax-ymin);%期望输出值
     
      sum=zeros(1,p+n-1); %计算B样条网络的隐层节点

      for m=1:leng
      Ul(m)=uf(k-m+1);
      end
      
      for m=0:len-1
         sum=sum+Bs(uf(k-m),n,p,0,1);
      end
      Nb=sum;    
     y2(k)=Nb*wb;%计算B样条网络的输出
   
     y1(k)=wl'*Ul;%lms滤波器的输出

     y(k)=y2(k)+y1(k);%整个非线性滤波器的输出
   
     e(k)=d(k)-y(k);%拟合误差
    
     wl=wl+2*u*e(k)*Ul;%利用误差调整lms滤波器的权系数
   
     wb=wb+r*e(k)*Nb'/(Nb*Nb');%利用误差调整B样条网络的权系数

     yf(k)=y(k)*(ymax-ymin)+ymin;
   %========================非线性滤波器建模=============================% 
%    
   %========================非线性滤波器消噪=============================%

 
   for t=1:leng
      Ulc(t)=uc(k-t+1);
   end

    
      sumc=zeros(1,p+n-1); %计算B样条网络的隐层节点
        
      for m=0:len-1
         sumc=sumc+Bs(uc(k-m),n,p,0,1);
      end
      Nbc=sumc;   
      y2c(k)=Nbc*wb;%计算B样条网络的输出
   
      y1c(k)=wl'*Ulc;%lms滤波器的输出

      yc(k)=y2c(k)+y1c(k);%整个非线性滤波器的输出
      
     ydn(k)=yc(k)*(ycmax-ycmin)+ycmin;
     equ(k)=ynoise(k)-ydn(k);
%      a(k)=ynoise(k)-ydn(k);

     if equ(k)>=eqmax
         equ(k)=eqmax;
     end
     if equ(k)<=eqmin
         equ(k)=eqmin;
     end
     
     eq(k)=(equ(k)-eqmin)/(eqmax-eqmin);
     

%    反馈滤波那块

     U=[eq(k) eq(k-1) eq(k-2) eq(k-3) eq(k-4)]';

     if k>=10
     yqu=IMBONL(wl,wb,U);
     else
         yqu=0;
     end
     
%       yq(k)=yqu*(eqmax-eqmin)+eqmin;
%     yq=0;
     yq(k)=yqu;
     
     

   
   %========================非线性滤波器消噪=============================%
   
 end
 
 %======================非线性滤波器建模和消噪结束==========================%
 
a=ynoise(Ndr-50:Ndr)-yun(Ndr-50:Ndr);
figure:plot(ynoise(Ndr-50:Ndr),'b');
hold on
plot(yun(Ndr-50:Ndr),'r');
hold on
plot(yy(Ndr-50:Ndr),'g'),title('蓝色:系统的实际输出;红色:期望输出;绿色:未加消除器的系统输出');
% 
% figure:plot(yun(Ndr-50:Ndr),'b');
% hold on
% plot(yf(Ndr-50:Ndr),'r'),title('蓝色:系统的输出;红色:模型的输出');
% 
% figure:plot(uu(Ndr-50:Ndr),'b');
% hold on
% plot(um(Ndr-50:Ndr),'r'),title('蓝色:系统对象的输入;红色:反馈后的输入');
% 
% figure:plot(equ(Ndr-50:Ndr),'b');
% hold on
% plot(yq(Ndr-50:Ndr),'r'),title('蓝色:反馈滤波输入;红色:反馈滤波输出');
% 
% figure: plot(a,'b'),title('消噪误差');


% wl
% wb
 
%  yd=d(Ndr-100:Ndr);
%  ym=y(Ndr-100:Ndr);
% MSE=err/(Ndr-leng)
% figure;plot(e(leng+1:Ndr)),title('误差信号');
% figure:plot(yd,'r');
% hold on 
% plot(ym,'b'),title('模型跟踪信号');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -