ML Equalizer works now.
Not yet perfectly integrated into all the routines
This commit is contained in:
@@ -5,14 +5,14 @@ ber_dbtgt = [];
|
||||
ber_ml = [];
|
||||
|
||||
mlse = 1;
|
||||
dbtgt = 1;
|
||||
|
||||
dbtgt = 0;
|
||||
duob_mode = db_mode.no_db;
|
||||
baudrates = [136:8:224].*1e9;
|
||||
parfor i = 1:length(baudrates)
|
||||
for i = 1:length(baudrates)
|
||||
|
||||
rop = -8;
|
||||
M = 4;
|
||||
[Rx_sig_2sps_v1, Symbols_v1, Tx_bits_v1] = standard_link_model("M",M,"fsym",baudrates(i),"rop",rop,"laser_linewidth",1300,"link_length_m",0,"random_key",1,"apply_pulsef",0);
|
||||
[Rx_sig_2sps_v1, Symbols_v1, Tx_bits_v1] = standard_link_model("M",M,"fsym",baudrates(i),"rop",rop,"laser_linewidth",1310,"link_length_m",0,"random_key",1,"apply_pulsef",1);
|
||||
% [Rx_sig_2sps_v2, Symbols_v2, Tx_bits_v2] = standard_link_model("M",M,"fsym",200e9,"rop",rop,"laser_linewidth",1300,"link_length_m",0,"random_key",2);
|
||||
% [Rx_sig_2sps_v3, Symbols_v3, Tx_bits_v3] = standard_link_model("M",M,"fsym",200e9,"rop",rop,"laser_linewidth",1300,"link_length_m",0,"random_key",3);
|
||||
|
||||
@@ -25,6 +25,7 @@ parfor i = 1:length(baudrates)
|
||||
eq_ = EQ("Ne",ffe_order,"Nb",[0,0,0],"training_length",2^13,"training_loops",5,"dd_loops",5,"K",2,"DCmu",0.005,"DDmu",[mu_ffe mu_dfe],"DFEmu",0.005,"FFEmu",0,"plotfinal",0,"ideal_dfe",1);
|
||||
pf_ = Postfilter("ncoeff",pf_ncoeffs,"useBurg",1);
|
||||
mlse_ = MLSE("duobinary_output",0,'M',M,'trellis_states',PAMmapper(M,0).levels,'scale_mode',2,'trellis_exclusion',0,'trellis_state_mode',2,'debug',0,'DIR',pf_.coefficients);
|
||||
|
||||
[ffe_results, mlse_results] = vnle_postfilter_mlse(eq_, pf_, mlse_, M, Rx_sig_2sps_v1, Symbols_v1, Tx_bits_v1, ...
|
||||
"precode_mode", duob_mode,...
|
||||
'showAnalysis', 0, ...
|
||||
@@ -33,6 +34,9 @@ parfor i = 1:length(baudrates)
|
||||
|
||||
ber_ffe(i) = ffe_results.metrics.BER;
|
||||
ber_mlse(i) = mlse_results.metrics.BER;
|
||||
|
||||
fprintf('BER FFE: %.2e \n',ber_ffe(i));
|
||||
fprintf('BER MLSE: %.2e \n',ber_mlse(i));
|
||||
end
|
||||
|
||||
|
||||
@@ -69,11 +73,14 @@ parfor i = 1:length(baudrates)
|
||||
%% RUN ML-Based MLSE
|
||||
|
||||
mu_lms = 0.15;
|
||||
ml_mlse_equalizer = ML_MLSE("epochs_tr",30,"epochs_dd",1,"len_tr",2^15,...
|
||||
"mu_dd",mu_lms,"mu_tr",mu_lms,"order",5,"sps",1,...
|
||||
"traceback_depth",128,"L",3,"delta",0);
|
||||
ml_mlse_equalizer = ML_MLSE("epochs_tr",50,"epochs_dd",1,"len_tr",2^16,...
|
||||
"mu_dd",mu_lms,"mu_tr",mu_lms,"order",4,"sps",2,...
|
||||
"traceback_depth",128,"L",2,"delta",0);
|
||||
|
||||
[y_ml_mlse,~] = ml_mlse_equalizer.process(y_white,Symbols_v1);
|
||||
ml_mlse_equalizer.mu_tr = 0.005;
|
||||
ml_mlse_equalizer.epochs_tr = 2;
|
||||
ml_mlse_equalizer.epochs_dd = 1;
|
||||
[y_ml_mlse,~] = ml_mlse_equalizer.process(Rx_sig_2sps_v1,Symbols_v1);
|
||||
ml_mlse_bits = PAMmapper(M, 0, "eth_style", 0).demap(y_ml_mlse);
|
||||
[~, errors, ber_ml(i), errpos] = calc_ber(ml_mlse_bits.signal, Tx_bits_v1.signal, "skip_front", 10, "skip_end", 10, "returnErrorLocation", 1);
|
||||
fprintf('ML MLSE BER: %.2e \n',ber_ml(i));
|
||||
|
||||
Reference in New Issue
Block a user