Merge remote-tracking branch 'origin/main' into main

This commit is contained in:
Silas Oettinghaus
2023-09-29 08:18:40 +02:00
3 changed files with 66 additions and 2 deletions

View File

@@ -118,7 +118,7 @@ classdef Pulseformer
% data_out = upfirdn(data_in,h,up,dn); % data_out = upfirdn(data_in,h,up,dn);
% %
% %cut signal, which is longer due to fir filter % %cut signal, which is longer due to fir filter
% st = round(up/dn*racos_len/2); %we need to cut y_out st = round(up/dn*racos_len/2); %we need to cut y_out
% en = round(st + (length(data_in)*up/dn) -1); % en = round(st + (length(data_in)*up/dn) -1);
% %
% data_out = data_out(st:en); % data_out = data_out(st:en);

View File

@@ -0,0 +1,64 @@
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;
% 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;
% 1) normlaize
y_rx = y_rx.normalize("mode","rms");
% 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);
[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.2) MPI reduction blocks
% 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;
% 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)]);

View File

@@ -378,6 +378,6 @@ for lp = 1
hold off hold off
end end
end