📄 ui_adapt.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 + -