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

📄 ffbnl.m

📁 给于MATLAB 环境下的非线性滤波器。此设计中用到了
💻 M
字号:
% function yq=FFBNL(wl,wb,u)
%该程序实现反馈滤波器

clear all
clc
wlm=[0.05136203197557;-0.11689962985114;0.00001970540900;0.00000109390695;-0.00001233619209];
wbm=[0.37953605399228;0.41792193414255;0.45634820443654;0.49485143896903];

wlim=[2.84090369154971;-3.10603156401583;-0.05031441462427;-0.13248072019243;-0.16605886711762];
wbim=[0.00402456440225;0.57039440493572;0.92180849916764;0.21839063132523;1.02467934441386];

lengm=5;%LMS滤波器的长度
lenm=2;%B样条网络的输入

pm=2;%B样条的阶数
nm=3;%插入节点数

Ulm=zeros(lengm,1);%LMS滤波器的输入
Ubm=zeros(1,lenm);%B样条函数的输入
Nbm=zeros(1,pm+nm-1);%B样条函数的隐层节点数

lengim=5;
lenim=2;
pim=2;
nim=4;
Ulim1=zeros(lengim,1);%LMS滤波器的输入
Ubim1=zeros(1,lenim);%B样条函数的输入
Nbim1=zeros(1,pim+nim-1);%B样条函数的隐层节点数

Ulim2=zeros(lengim,1);%LMS滤波器的输入
Ubim2=zeros(1,lenim);%B样条函数的输入
Nbim2=zeros(1,pim+nim-1);%B样条函数的隐层节点数

u1=zeros(lengim,1);
u2=zeros(lengim,1);

lengq=5;%LMS滤波器的长度
lenq=2;%B样条网络的输入
uq=0.35;%lms滤波器的优化步长
rq=1.2;%B样条网络的修正步长
pq=3;%B样条的阶数
nq=4;%插入节点数


wlq=zeros(lengq,1);%lms的权系数
wbq=rand(pq+nq-1,1);%B样条的权系数

Ulq=zeros(lengq,1);%LMS滤波器的输入
Ubq=zeros(1,lenq);%B样条函数的输入
Nbq=zeros(1,pq+nq-1);%B样条函数的隐层节点数

N=4000;
Lt=100;
um=1*rand(1,N);%产生1500组随机信号
ut=1*rand(1,Lt);


 delay=0;%滤波器的输出延时
 err=0;
 
 for k=lengq+1:N
     
    %==========这段程序为该反馈滤波器的输入===================%
    
     for t=1:lengq
         Ulq(t)=um(k-t+1);
     end
     sumq=zeros(1,pq+nq-1); %计算B样条网络的隐层节点 
     
     for m=0:lenq-1
         sumq=sumq+Bs(um(k-m),nq,pq,0,1);
     end
     Nb=sumq;
     
     %============反馈滤波器输入结束=====================%
     
     
     yq1(k)=Nb*wbq;%计算B样条网络的输出
     yq2(k)=wlq'*Ulq;%lms滤波器的输出
     
     yq(k)=yq1(k)+yq2(k);%整个非线性滤波器的输出
     
     
    %==============复制滤波器的输入====================%
    
      summ=zeros(1,pm+nm-1); %计算B样条网络的隐层节点

      for m=0:lenm-1  
           if (yq(k-m)>=1)
               yq(k-m)=1;
           elseif (yq(k-m)<=0)
               yq(k-m)=0;
           end
        summ=summ+Bs(yq(k-m),nm,pm,0,1);
      end
      Nba=summ;
      
     for t=1:lengm
         Ulm(t)=yq(k-t+1);
     end
     
     %================复制滤波器的输入结束===================%
    
     
      ym2(k)=Nba*wbm;%计算B样条网络的输出
   
      ym1(k)=wlm'*Ulm;%lms滤波器的输出

      ym(k)=ym2(k)+ym1(k);%整个非线性滤波器的输出
      
    %================反馈滤波器的误差输入====================%
      ud(k)=um(k-delay);
      for t=1:lengim
         Ulim1(t)=ym(k-t+1);
     end
     sumi1=zeros(1,pim+nim-1); %计算B样条网络的隐层节点 
     for m=0:lenim-1
         sumi1=sumi1+Bs(ym(k-m),nim,pim,0,1);
     end
     Nb1=sumi1;
     yi11(k)=Nb1*wbim;%计算B样条网络的输出
     yi12(k)=wlim'*Ulim1;%lms滤波器的输出
     
     ye1(k)=yi11(k)+yi12(k);%整个非线性滤波器的输出
    
    
     
     for t=1:lengim
         Ulim2(t)=ud(k-t+1);
     end
     sumi2=zeros(1,pim+nim-1); %计算B样条网络的隐层节点 
     for m=0:lenim-1
         sumi2=sumi2+Bs(ud(k-m),nim,pim,0,1);
     end
     Nb2=sumi2;
     yi21(k)=Nb2*wbim;%计算B样条网络的输出
     yi22(k)=wlim'*Ulim2;%lms滤波器的输出
     
     ye2(k)=yi21(k)+yi22(k);%整个非线性滤波器的输出
     
     e(k)=ye1(k)-ye2(k);
    
     E(k)=ym(k)-um(k);
      for t=1:lengq
         Ul(t)=ud(k-t+1);
      end
      g=Ul';
    %================反馈滤波器的误差输入结束====================%
    
    %=================调整反馈滤波器的权系数======================%
    
      wlq=wlq+2*uq*e(k)*g;%利用误差调整lms滤波器的权系数

      wbq=wbq+rq*e(k)*Nb'/(Nb*Nb');%利用误差调整B样条网络的权系数
      
     %=================调整反馈滤波器的权系数结束==================%

 end
 figure:plot(E(lenq+1:N)),title('训练误差');
 figure:plot(ym(N-100:N),'r')
 hold on
 plot(um(N-100:N),'b'),title('训练跟踪');
figure:plot(yq);


























%  for k=1:lengi
%      yyt(k)=0;
%  end
%  
%  for k=lengi+1:Lt
%      
%      for t=1:lengo
%          Uli(t)=ut(k-t+1);
%      end
%      sumi=zeros(1,pi+ni-1); %计算B样条网络的隐层节点 
%      for m=0:leni-1
%          sumi=sumi+Bs(ut(k-m),ni,pi,0,1);
%      end
%      Nb=sumi;
%      yy2t(k)=Nb*wbi;%计算B样条网络的输出
%      yy1t(k)=wli'*Uli;%lms滤波器的输出
%      
%      yyt(k)=yy2t(k)+yy1t(k);%整个非线性滤波器的输出
% 
% %       yyt(k)=yyt(k-1)/(1+yyt(k-1)*yyt(k-1))+ut(k);
% 
% 
%       sumo=zeros(1,po+no-1); %计算B样条网络的隐层节点
% 
%       for m=0:leno-1  
% 
%         sumo=sumo+Bs(yyt(k-m),no,po,0,1);
%       end
%       Nba=sumo;
%       
%      for t=1:lengo
%          Ulo(t)=yyt(k-t+1);
%      end
% 
%          
%       yy2(k)=Nba*wbo;%计算B样条网络的输出
%    
%       yy1(k)=wlo'*Ulo;%lms滤波器的输出
% 
%       yy(k)=yy2(k)+yy1(k);%整个非线性滤波器的输出
%       
%       ee(k)=abs((yy(k)-ut(k))/ut(k));
%    
% 
%  end
%  figure: plot(yy,'b');
%  hold on
%  plot(ut,'r'),title('测试跟踪');
%  figure:plot(ee,'b'),title('测试相对误差');

⌨️ 快捷键说明

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