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

📄 eflrls3.m

📁 这是自适应信号处理的几个matlab程序
💻 M
字号:

%EFLRLS3 Problem 2.2
%
%   'ifile.mat' - input file containing:
%      K - iterations
%      H - FIR channel
%      Neq - equalizer order
%      sigman - standard deviation of noise at channel output
%      epsilon - small auxiliary constant
%      lambda - forgetting factor
% 
%   'ofile.mat' - output file containing:
%      ind - sample indexes 
%      kappabeq, kappafeq, Veq - equalizer coefficients

clear all		% clear memory
load ifile;		% read input variables
LH=length(H);		% channel length
NH=LH-1;		% channel order
Leq=Neq+1;		% equalizer length
ND=round((Neq+NH)/2);	% delayer order
LD=ND+1;		% delayer length (>LH by hipothesis)
D=zeros(LD,1);		% initial delayer memory
t=sign(randn(K,1));	% training signal
n=randn(K,1)*sigman;	% noise at channel output
%
% initial parameters
kappabeq=zeros(Leq,1);	
kappafeq=zeros(Leq,1);
Veq=zeros(Leq,1);
delta=zeros(1,Leq);
oldgamma=ones(1,Leq+1);
oldeb=zeros(1,Leq);
oldoldxibmin=epsilon*ones(1,Leq);
oldxibmin=epsilon*ones(1,Leq);
oldxifmin=epsilon*ones(1,Leq);

for k=1:K,		% iterations 
   D=[t(k)
      D(1:ND)];		% new delay vector
   d=D(LD);		% desired signal sample
   x=H'*D(1:LH)+n(k);	% input sample
   %
   % initialization
   gamma(1)=1;
   eb(1)=x;
   ebq(1)=eb(1);
   ef=x;
   xibmin(1)=x^2+lambda*oldxifmin(1);
   xifmin(1)=xibmin(1);
   e=d;
   ep=e;
   for j=1:Leq,
      %
      % auxiliary parameters
      delta(j)=lambda*delta(j)+oldeb(j)*ef/oldgamma(j);
      gamma(j+1)=gamma(j)-(eb(j))^2/xibmin(j);
      aux=oldeb(j)*ef/oldgamma(j)/lambda;
      %
      % reflection coefficients
      kappabeq(j)=gamma(j+1)/oldgamma(j)*(kappabeq(j)+aux/oldxifmin(j));
      kappafeq(j)=oldgamma(j+1)/oldgamma(j)*(kappafeq(j)+aux/oldoldxibmin(j));
      %
      % prediction errors
      eb(j+1)=oldeb(j)-kappabeq(j)*ef;
      ebp(j+1)=eb(j+1)/gamma(j+1);
      ef=ef-kappafeq(j)*oldeb(j);
      %
      % minimum least-squares solutions
      aux=(delta(j))^2;
      xibmin(j+1)=oldxibmin(j)-aux/xifmin(j);
      xifmin(j+1)=xifmin(j)-aux/oldxibmin(j);
      %
      % feedforward filtering
      ep=ep-Veq(j)*ebp(j);
      Veq(j)=gamma(j+1)/gamma(j)*(Veq(j)+e*eb(j)/(gamma(j)*lambda*oldxibmin(j)));
      e=e-Veq(j)*eb(j);
   end
   %
   % updated parameters
   olddgamma=gamma;
   oldeb=eb;
   oldoldxibmin=oldxibmin;
   oldxibmin=xibmin;
   oldxifmin=xifmin;
end  

ind=0:Neq;	% sample indexes
save ofile ind kappabeq kappafeq Veq;	% write output variables

⌨️ 快捷键说明

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