EQ update vom Arbeits PC
This commit is contained in:
@@ -1,64 +1,107 @@
|
||||
|
||||
clear;
|
||||
col = linspecer(6);
|
||||
% load dataset
|
||||
simdata = load('/Users/silasoettinghaus/Documents/MATLAB/Labor_Datensatz_PAM4_MPI/pam4_10km_1km/pam4__loop_10_92Gbd_19092023_1508.mat');
|
||||
% get common variables of simulation loop
|
||||
|
||||
fdac = simdata.saveStructTemp.common.f_DAC;
|
||||
fadc = simdata.saveStructTemp.common.f_ADC;
|
||||
fsym = simdata.saveStructTemp.common.f_sym;
|
||||
foldername = 'C:\Users\Silas\Documents\MATLAB\Labor_Datensatz_PAM4_MPI\pam4_10km_1km';
|
||||
|
||||
% 0) build RX Signal
|
||||
allfiles = dir(foldername);
|
||||
|
||||
y_rx = Electricalsignal(simdata.saveStructTemp.dp_tsynch_out');
|
||||
y_rx.fs = 2.*fsym;
|
||||
|
||||
% 0) build tx reference Signal for eq training
|
||||
y_digimod = Electricalsignal(simdata.saveStructTemp.digi_mod_out');
|
||||
y_digimod.fs = fsym;
|
||||
parfsym = zeros(1,length(allfiles));
|
||||
parsir = zeros(1,length(allfiles));
|
||||
ber_wo_reduction = zeros(1,length(allfiles));
|
||||
ber_w_dcremoval = zeros(1,length(allfiles));
|
||||
mudc = zeros(1,length(allfiles));
|
||||
|
||||
|
||||
% 1) normlaize
|
||||
y_rx = y_rx.normalize("mode","rms");
|
||||
parfor i = 1:length(allfiles)
|
||||
|
||||
if allfiles(i).bytes ~= 0
|
||||
current_filename = allfiles(i).name;
|
||||
else
|
||||
continue
|
||||
end
|
||||
|
||||
% load dataset
|
||||
simdata = load([foldername,filesep, current_filename]);
|
||||
% get common variables of simulation loop
|
||||
|
||||
%even if redundant, save stuff to results struct
|
||||
parsir(i) = simdata.saveStructTemp.awg2scope_keysight_state.eigenlight_mpi - 3.3 + 7.2;
|
||||
parfsym(i) = simdata.saveStructTemp.common.f_sym;
|
||||
|
||||
fdac = simdata.saveStructTemp.common.f_DAC;
|
||||
fadc = simdata.saveStructTemp.common.f_ADC;
|
||||
fsym = simdata.saveStructTemp.common.f_sym;
|
||||
|
||||
% 0) build RX Signal
|
||||
|
||||
y_rx = Electricalsignal(simdata.saveStructTemp.dp_tsynch_out');
|
||||
|
||||
y_rx.fs = 2.*fsym;
|
||||
|
||||
% 0) build tx reference Signal for eq training
|
||||
y_digimod = Electricalsignal(simdata.saveStructTemp.digi_mod_out');
|
||||
y_digimod.fs = fsym;
|
||||
|
||||
|
||||
% 2.1) equalize
|
||||
eq = EQ("K",2,"plottrain",0,"plotfinal",0,...
|
||||
"training_length",4096,"training_loops",3,...
|
||||
"Ne",[50,9,3],"Nb",[2,0,0],...
|
||||
"DCmu",0,"DDmu",[0.0004 0.0005 0.0005 0.0005 ],"DFEmu",0.005,"FFEmu",0.005,...
|
||||
"dd_loops",3,"epsilon",[10 100 1000 ],"M",2,...
|
||||
"thres",[0.005 0.0004 0.0005 ],"l1act",0,"delay",0,"rho",0.0005,"ideal_dfe",0,"DB_aim",0);
|
||||
|
||||
eq2 = EQ_silas("Ne",[50,9,9],"Nb",[0,0,0],"trainlength",4096,"mu_dc_dd",0.05,"mu_dc_train",0.05,"mu_ffe_train",0.005,"mu_combined_dd",[0.0004 0.0005 0.0005 0.0005 ],"ddloops",3,"trainloops",3);
|
||||
% 1) normlaize
|
||||
y_rx = y_rx.normalize("mode","rms");
|
||||
|
||||
|
||||
[Eq_out] = eq.process(y_rx,y_digimod);
|
||||
[Eq_out2] = eq2.process(y_rx,y_digimod);
|
||||
|
||||
figure()
|
||||
scatter(1:length(y_rx.signal),y_rx.signal,4,'.','MarkerEdgeColor',col(2,:),'DisplayName','After EQ');
|
||||
hold on
|
||||
%scatter(1:length(Eq_out.signal),Eq_out.signal,4,'.','MarkerEdgeColor',col(4,:),'DisplayName','After EQ');
|
||||
hold on
|
||||
scatter(1:length(Eq_out2.signal),Eq_out2.signal,3,'.','MarkerEdgeColor',col(3,:),'DisplayName','After EQ');
|
||||
% 2.1) equalize
|
||||
eq = EQ("K",2,"plottrain",0,"plotfinal",0,...
|
||||
"training_length",4096,"training_loops",4,...
|
||||
"Ne",[50,9,9],"Nb",[2,0,0],...
|
||||
"DCmu",0.05,"DDmu",[0.0004 0.0004 0.0004 0.0004 ],"DFEmu",0.005,"FFEmu",0,...
|
||||
"dd_loops",4,"epsilon",[10 100 1000 ],"M",2,...
|
||||
"thres",[0.005 0.004 0.005 ],"l1act",0,"delay",0,"rho",0.0005,"ideal_dfe",0,"DB_aim",0);
|
||||
|
||||
|
||||
% 2.2) MPI reduction blocks
|
||||
[Eq_out] = eq.process(y_rx,y_digimod);
|
||||
|
||||
% 3) digital demodulation
|
||||
digimod = PAMmapper(2^simdata.saveStructTemp.common.M,0);
|
||||
|
||||
d_hat = digimod.demap(Eq_out);
|
||||
d_hat2 = digimod.demap(Eq_out2);
|
||||
d_ = digimod.demap(Electricalsignal(simdata.saveStructTemp.digi_mod_out'));
|
||||
d = simdata.saveStructTemp.prms_out;
|
||||
% 2.2) MPI reduction blocks
|
||||
|
||||
% 3) digital demodulation
|
||||
digimod = PAMmapper(2^simdata.saveStructTemp.common.M,0);
|
||||
|
||||
d_hat = digimod.demap(Eq_out);
|
||||
|
||||
d_ = digimod.demap(Electricalsignal(simdata.saveStructTemp.digi_mod_out'));
|
||||
d = simdata.saveStructTemp.prms_out;
|
||||
|
||||
% 4) BER calculation
|
||||
[totalbits,errors_bm,ber_dhat,loc] = calc_ber(d_hat.signal(1:end,:) ,d(1:end,:)',"skip",0,"returnErrorLocation",1);
|
||||
|
||||
ber_nodctap = mean(simdata.saveStructTemp.prms_compare_state.BER );
|
||||
|
||||
disp(['BER_new_eq1: ',num2str(ber_dhat),' BER_old: ',num2str(ber_nodctap)]);
|
||||
|
||||
% 5) save to struct
|
||||
ber_wo_reduction(i) = ber_nodctap;
|
||||
ber_w_dcremoval(i) = ber_dhat;
|
||||
mudc(i) = eq.DCmu;
|
||||
|
||||
end
|
||||
|
||||
|
||||
rate = [92e9, 56e9];
|
||||
figure(99)
|
||||
|
||||
for r = 1:length(rate)
|
||||
a = [parsir(parfsym==rate(r));ber_wo_reduction(parfsym==rate(r))];
|
||||
a=sort(a,2);
|
||||
plot(a(1,:),a(2,:),'DisplayName',[num2str(rate(r).*1e-9),' GBd; PAM4; w/o reduction'],'LineWidth',2,'Marker','o','MarkerSize',3);
|
||||
%scatter(parsir(parfsym==rate(r)),ber_wo_reduction(parfsym==rate(r)),'DisplayName',[num2str(rate(r).*1e-9),' GBd; PAM4; w/o reduction'],'LineWidth',2,'Marker','o')
|
||||
hold on
|
||||
b = [parsir(parfsym==rate(r));ber_w_dcremoval(parfsym==rate(r))];
|
||||
b=sort(b,2);
|
||||
plot(b(1,:),b(2,:),'DisplayName',[num2str(rate(r).*1e-9),' GBd; PAM4; adaptive DC removal'],'LineWidth',2,'Marker','+','MarkerSize',3);
|
||||
%scatter(parsir(parfsym==rate(r)),ber_w_dcremoval(parfsym==rate(r)),'DisplayName',[num2str(rate(r).*1e-9),' GBd; PAM4; adaptive DC removal'],'LineWidth',2,'Marker','+');
|
||||
end
|
||||
set(gca, 'YScale', 'log')
|
||||
yline(3.8e-3,'LineWidth',1.5);
|
||||
|
||||
|
||||
% 4) BER calculation
|
||||
[totalbits,errors_bm,ber_dhat,loc] = calc_ber(d_hat.signal(1:end,:) ,d(1:end,:)',"skip",0,"returnErrorLocation",1);
|
||||
[totalbits2,errors_bm2,ber_dhat2,loc] = calc_ber(d_hat2.signal(1:end,:) ,d(1:end,:)',"skip",0,"returnErrorLocation",1);
|
||||
|
||||
ber_nodctap = mean(simdata.saveStructTemp.prms_compare_state.BER );
|
||||
|
||||
disp(['BER_new_eq1: ',num2str(ber_dhat),' BER_new_eq2: ',num2str(ber_dhat2),' BER_old: ',num2str(ber_nodctap)]);
|
||||
|
||||
Reference in New Issue
Block a user