Auto stash before checking out "HEAD"
This commit is contained in:
@@ -118,7 +118,7 @@ classdef Pulseformer
|
||||
% data_out = upfirdn(data_in,h,up,dn);
|
||||
%
|
||||
% %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);
|
||||
%
|
||||
% data_out = data_out(st:en);
|
||||
|
||||
59
MPI_offline_analysis/mpi_analysis_pam4.m
Normal file
59
MPI_offline_analysis/mpi_analysis_pam4.m
Normal file
@@ -0,0 +1,59 @@
|
||||
|
||||
clear;
|
||||
col = linspecer(6);
|
||||
% load dataset
|
||||
simdata = load('/Users/silasoettinghaus/Documents/MATLAB/Labor_Datensatz_PAM4_MPI/pam4_10km_1km/pam4__loop_3_56Gbd_19092023_1459.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.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,3],"Nb",[2,0,0],"trainlength",4096,"mu_dc_dd",0,"mu_dc_train",0,"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(Eq_out.signal),Eq_out.signal,4,'.','MarkerEdgeColor',col(4,:),'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)]);
|
||||
@@ -4,13 +4,15 @@ lw = [0.1e6 1e6 10e6];
|
||||
|
||||
for lp = 1
|
||||
|
||||
dc_mu = 0.05;
|
||||
sir = -20;%sir_loop(lp);
|
||||
|
||||
sir = sir_loop(1);
|
||||
|
||||
rng(lp);
|
||||
|
||||
%% Set Simulation Variables
|
||||
O = 12; %order of prbs
|
||||
N = 2^(O-1); %length of prbs
|
||||
[~,seed] = prbs(O,1); %initialize first seed of prbs
|
||||
|
||||
sir = sir;
|
||||
|
||||
@@ -77,7 +79,7 @@ for lp = 1
|
||||
eq = EQ("K",2,"plottrain",0,"plotfinal",0,...
|
||||
"training_length",4096,"training_loops",2,...
|
||||
"Ne",[50,5,3],"Nb",[3,2,2],...
|
||||
"DCmu",dc_mu,"DDmu",[0.0004 0.0005 0.0006 0.0007 ],"DFEmu",0.005,"FFEmu",0.005,...
|
||||
"DCmu",0.005,"DDmu",[0.0004 0.0005 0.0006 0.0007 ],"DFEmu",0.005,"FFEmu",0.005,...
|
||||
"dd_loops",2,"epsilon",[10 100 1000 ],"M",2,...
|
||||
"thres",[0.005 0.004 0.0005 ],"l1act",0,"delay",0,"rho",0.0005,"ideal_dfe",0,"DB_aim",0);
|
||||
|
||||
@@ -135,6 +137,9 @@ for lp = 1
|
||||
|
||||
disp(['SIR ',num2str(10*log10(X.power/R.power))]);
|
||||
|
||||
%%
|
||||
X = opticatten.process(X);
|
||||
% X = edfaamp.process(X);
|
||||
|
||||
X = X+R;
|
||||
|
||||
@@ -164,7 +169,7 @@ for lp = 1
|
||||
% wl = 1000; % symbols
|
||||
% Eq_in.signal = Eq_in.signal - 1/wl .* movsum( Eq_in.signal,[wl/2,wl/2]);
|
||||
|
||||
[Eq_out] = eq2.process(Eq_in,reference);
|
||||
[Eq_out] = eq.process(Eq_in,reference);
|
||||
|
||||
%% MPI reduction DC removal
|
||||
wl = 1000; % symbols
|
||||
@@ -186,15 +191,15 @@ for lp = 1
|
||||
wl = 100; % symbols
|
||||
smoothed = ( 1/wl .* movsum(e,[wl/2,wl/2]) );
|
||||
|
||||
% remove interference
|
||||
for level = 0:3
|
||||
yk_lvsm.signal(pre_decision_level_uni==level) = yk_lvsm.signal(pre_decision_level_uni==level) - smoothed(pre_decision_level_uni==level);
|
||||
yk_lvlp.signal(pre_decision_level_uni==level) = yk_lvlp.signal(pre_decision_level_uni==level) - filtered(pre_decision_level_uni==level);
|
||||
%subplot(1,5,lp)
|
||||
xax = 1:eq_out.length;
|
||||
scatter(xax,eq_out.signal,4,'.','MarkerEdgeColor',col(6,:),'DisplayName','After EQ');
|
||||
xlim([1, xax(end)]);
|
||||
ylim([-2 2]);
|
||||
xlabel('Sampling Index')
|
||||
ylabel('Amplitude')
|
||||
legend
|
||||
end
|
||||
%
|
||||
% figure(26);plot(1:length(error_log),error_log(:,end),"LineWidth",0.4);ylim([-0.8 0.8]);ylabel('$\epsilon$'),title(['Linewidth: ',num2str(laser_linewidth*1e-6), 'MHz'])
|
||||
%
|
||||
% figure(28);plot(1:length(e),e,"LineWidth",0.4);ylim([-0.8 0.8]);
|
||||
|
||||
|
||||
|
||||
@@ -315,6 +320,6 @@ for lp = 1
|
||||
hold off
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user