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

📄 ui_adapt.bak

📁 基于Matlab
💻 BAK
字号:
function [] = ui_adapt();
dfec_global; 
ui_private_global;
newparams;

% print text message and lock menu
set(h_msg,'BackgroundColor', [0 1 0]);
set(h_msg,'FontAngle','italic', 'String','allocating memory...'); drawnow; 
set(fig_menu,'HandleVisibility','off'); drawnow;


% Load simulation data 
if (data==4)
   eval(['load ',datname]);

   % Extract info on length of simulation 
   Reps=Lsim(3);
   L=Lsim(1)+Lsim(2);

% Otherwise, generate data if needed
else

   % Extract info on length of simulation 
   Reps=Lsim(3);
   L=Lsim(1)+Lsim(2);

   % Create symbol stream
   if ((data==1) | (data==3))
      a=make_src(cnstl_type,constellation,L*Reps);
   elseif (data==2)
      a=make_src(constellation,L);
   end;
   sig=10^(-max(SNR)/10);
   gamma=mean(abs(a).^4);


   % Transmit through noisy channel
   if (spacing==1),

      if ((data==1) | (data==3))
         n=make_noise(sig,real_noise,L*Reps);
         r=filter(c,1,a)+n;

      elseif (data==2)
         n=make_noise(sig,real_noise,L);
         r=filter(c,1,a)+n;

         r=r*ones(1,Reps);
         r=r(:);
         a=a*ones(1,Reps);
         a=a(:);
      end; 

   elseif (spacing==1/2)

      if ((data==1) | (data==3))
         na=make_noise(sig,real_noise,L*Reps);
         nb=make_noise(sig,real_noise,L*Reps);
         ra=filter(ca,1,a)+na;
         rb=filter(cb,1,a)+nb;

      elseif (data==2)
         na=make_noise(sig,real_noise,L);
         nb=make_noise(sig,real_noise,L);
         ra=filter(ca,1,a)+na;
         rb=filter(cb,1,a)+nb;

         ra=r*ones(1,Reps);
         ra=ra(:);
         rb=rb*ones(1,Reps);
         rb=rb(:);
         a=a*ones(1,Reps);
         a=a(:);
      end; 
   end;

end;




% Find switching threshold (3% SER)
mse_range=1e-4:1e-4:1;
if (cnstl_type==1)
   ser=serpam(Ms,1./mse_range);
elseif (cnstl_type==2)
   ser=serqam(Ms,1./mse_range);
elseif (cnstl_type==3)
   ser=serpam(Ms,1./mse_range);
end;
[yy,I]=min(abs(ser-0.03));
cv_thresh=10*log10(mse_range(I));



% Initialize filters
if (spacing==1)
   fn=f0;
   dn=d0;
else
   fb0=f0(1:2:Nf);
   fa0=f0(2:2:Nf);
   fan=fa0;
   fbn=fb0;
   dn=d0;
   Nfa=length(fan);
   Nfb=length(fbn);
end;



% Initialize variables
y=zeros(L*Reps,1);
x=zeros(L*Reps,1);
z=zeros(L*Reps,1);
ahat=zeros(L*Reps,1);
ef=zeros(L*Reps,1);
ed=zeros(L*Reps,1);
phi=zeros(L*Reps,1);



% Adapt in chunks
if (spacing==1)
   fhist=zeros(Nf,Reps);
   dhist=zeros(Nd,Reps);
   fahist=[];
   fbhist=[];
elseif (spacing==1/2)
   fhist=[];
   fahist=zeros(length(fa0),Reps);
   fbhist=zeros(length(fb0),Reps);
   dhist=zeros(Nd,Reps);
end;
l=2;


if (spacing==1)
   offset=max([Nf Nd delta]);
elseif (spacing==1/2)
   offset=max([Nfa Nfb Nd delta]);
end;
n=offset+1;
nswitch=[];


% Adapt!
while ((n==offset+1) | (n<Reps*L)),

   % Adapt on training block
   if (Lsim(1)>0)
      D=min(Lsim(1),L*Reps-n);
      ninits=n-offset:n-1;
      ntrain=n:n+D-1;
      aa=[a(ninits); a(ntrain)];
      yy=[y(ninits); zeros(D,1)];
      xx=[x(ninits); zeros(D,1)];
      aahat=[ahat(ninits); zeros(D,1)];

      if (spacing==1)
         rr=[r(ninits); r(ntrain)];
         [fL,dL,yy,xx,zz,aahat,eef,eed,pphi]=...
            adapt(spacing,aa,rr,yy,xx,aahat,...
                  fn,dn,muf(1),mud(1),offset,delta-1,pdelay,...
                  structure,cnstl_type,Ms,csig,alg1,regfilt);
      elseif (spacing==1/2)
         rra=[ra(ninits); ra(ntrain)];
         rrb=[rb(ninits); rb(ntrain)];
         [faL,fbL,dL,yy,xx,zz,aahat,eef,eed,pphi]=...
            adapt(spacing,aa,rra,rrb,yy,xx,aahat,...
                  fan,fbn,dn,muf(1),mud(1),offset,delta-1,pdelay,...
                  structure,cnstl_type,Ms,csig,alg1,regfilt);
      end;

      % Update variables 
      nn=n:n+D-1;
      y(nn)=yy(offset+(1:D));
      x(nn)=xx(offset+(1:D));
      z(nn)=zz(offset+(1:D));
      ahat(nn)=aahat(offset+(1:D));
      ef(nn)=eef(offset+(1:D));
      ed(nn)=eed(offset+(1:D));
      phi(nn)=pphi(offset+(1:D));

      if (spacing==1)
         fn=fL;
      elseif (spacing==1/2)
         fan=faL;
         fbn=fbL;
      end;
      dn=dL;


      % Update counter
      n=n+D;
   end;

   % Adapt on data block
   if (Lsim(2)>0)
      D=min(Lsim(2),L*Reps-n);
      ninits=n-offset:n-1;
      ndata=n:n+D-1;
      aa=[a(ninits); a(ndata)];
      yy=[y(ninits); zeros(D,1)];
      xx=[x(ninits); zeros(D,1)];
      aahat=[ahat(ninits); zeros(D,1)];

      if (spacing==1)
         rr=[r(ninits); r(ndata)];
         [fL,dL,yy,xx,zz,aahat,eef,eed,pphi]=...
            adapt(spacing,aa,rr,yy,xx,aahat,...
                  fn,dn,muf(2),mud(2),offset,delta-1,pdelay,...
                  structure,cnstl_type,Ms,csig,alg2,regfilt);
      elseif (spacing==1/2)
         rra=[ra(ninits); ra(ndata)];
         rrb=[rb(ninits); rb(ndata)];
         [faL,fbL,dL,yy,xx,zz,aahat,eef,eed,pphi]=...
            adapt(spacing,aa,rra,rrb,yy,xx,aahat,...
                  fan,fbn,dn,muf(2),mud(2),offset,delta-1,pdelay,...
                  structure,cnstl_type,Ms,csig,alg2,regfilt);
      end;

      % Update variables 
      nn=n:n+D-1;
      y(nn)=yy(offset+(1:D));
      x(nn)=xx(offset+(1:D));
      z(nn)=zz(offset+(1:D));
      ahat(nn)=aahat(offset+(1:D));
      ef(nn)=eef(offset+(1:D));
      ed(nn)=eed(offset+(1:D));
      phi(nn)=pphi(offset+(1:D));


      if (spacing==1)
         fn=fL;
      elseif (spacing==1/2)
         fan=faL;
         fbn=fbL;
      end;
      dn=dL;



      % Update counter
      n=n+D;
   end;


   % Store trajectories
   if (spacing==1)
      fhist(:,l)=fL;
   elseif (spacing==1/2)
      fahist(:,l)=faL;
      fbhist(:,l)=fbL;
   end;
   if (size(dL)>0)
      dhist(:,l)=dL;
   end;
   l=l+1;

   % Display progress
   if (real_source)
      cv=10*log10(mean(abs(aahat-real(zz)).^2));
   else
      cv=10*log10(mean(abs(aahat-real(zz)).^2));
   end;
   cv=round(10*cv)/10;
   pdone=round(10*100*n/L/Reps)/10;
   pdone=[num2str(pdone) '% done, cv=' num2str(cv) ' dB'];
   set(fig_menu,'HandleVisibility','on'); drawnow;
   set(h_msg,'BackgroundColor', [0 1 0]);
   set(h_msg,'FontAngle','normal', 'String',pdone); drawnow;

   % Switch to decision-direction if desired & possible

end;


if (spacing==1)
   if (my_isreal(fL)) fL=real(fL);  end;
   faL=[]; fbL=[];
elseif (spacing==1/2)
   if (my_isreal(faL)) faL=real(faL);  end;
   if (my_isreal(fbL)) fbL=real(fbL);  end;
   fL=zeros(Nfa+Nfb,1);
   fL(1:2:Nfa+Nfb)=fbL;
   fL(2:2:Nfa+Nfb)=faL;
end;
if (my_isreal(dL)) dL=real(dL);  end;


FL=freqz(fL,1,256,'whole');
FaL=freqz(faL,1,256,'whole');
FbL=freqz(fbL,1,256,'whole');



% Store cluster plot 
acluster=y;

% Compose channel-equalizer combinations
% if using simulation data 
if (data~=4)

   % Store final channel-forward equalizer combo
   if (spacing==1)
      hL=conv(c,fL);
   else
      C=convmtx(c,Nf);
      C=C(2:2:size(C,1),:);
      hL=C*fL;
   end;
   NhL=length(hL);
   HL=freqz(hL,1,256,'whole');

   % If LMS, effective filter 
   % with feedback is known 
   DELTA=delta+pdelay-1;
   if (alg1==1)
      deltaL=delta;
      ddL=zeros(max(NhL,DELTA+Nd),1);
      if (Nd>0)
         ddL(DELTA+(1:Nd))=dL;
      end;
      if (DELTA+Nd>NhL)
         hL=[hL; zeros(DELTA+Nd-NhL,1)];
      end;
      HL=freqz(hL,1,256,'whole');
      if (structure==1)
         qL=filter(1,[1; dL],[zeros(Nh,1); hL; zeros(Nh,1)]);
      else
         qL=hL-ddL;
      end;

   % Otherwise, stipulate cursor is
   % maximum channel-forward equalizer tap and estimate
   % an effective channel
   else
      [val,deltaL]=min(abs(abs(hL)-1));
      DELTA=deltaL+pdelay-1;
      ddL=zeros(max(NhL,DELTA+Nd),1);
      if (Nd>0)
         ddL(DELTA+(1:Nd))=dL;
      end;
      if (DELTA+Nd>NhL)
         hL=[hL; zeros(DELTA+Nd-NhL,1)];
      end;
      HL=freqz(hL,1,256,'whole');
      if (structure==1)
         qL=filter(1,[1; dL],[zeros(Nh,1); hL; zeros(Nh,1)]);
      else
         qL=hL-ddL;
      end;
   end;

   DL=freqz(dL,1,256,'whole');    
   DDL=freqz(ddL,1,256,'whole');    


% If not simulation data, fill in with
% blanks
else
   hL=[];   HL=[]; 
   qL=[];   QL=[];
   ddL=[];  DDL=[];
end;


% Update adaptation figures
ui_traj;
ui_aerr;
ui_acluster;
ui_fcluster;

if (data~=4)
   ui_fimp;
   ui_ffreq;
end;


% clear text message, unlock menu, enable facets, dim spike
set(fig_menu,'HandleVisibility','on'); drawnow;
set(h_msg,'BackgroundColor', [0.8 0.8 0.8]);
set(h_msg,'FontAngle','normal', 'String',''); drawnow;

⌨️ 快捷键说明

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