Few more scripts to evaluate new ML-MLSE Equalizer - which is not better!!! :-(
This commit is contained in:
109
projects/ML_based_MLSE/rate_evaluation.m
Normal file
109
projects/ML_based_MLSE/rate_evaluation.m
Normal file
@@ -0,0 +1,109 @@
|
||||
|
||||
ber_ffe = [];
|
||||
ber_mlse = [];
|
||||
ber_dbtgt = [];
|
||||
ber_ml = [];
|
||||
|
||||
mlse = 1;
|
||||
dbtgt = 1;
|
||||
|
||||
baudrates = [136:8:224].*1e9;
|
||||
parfor 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_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);
|
||||
|
||||
%% FFE + MLSE
|
||||
if mlse
|
||||
pf_ncoeffs = 1;
|
||||
ffe_order = [50, 0, 0];
|
||||
mu_ffe = [0.0001, 0.0008, 0.001];
|
||||
mu_dfe = 0.0004;
|
||||
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, ...
|
||||
"postFFE", [],...
|
||||
"eth_style_symbol_mapping", 0);
|
||||
|
||||
ber_ffe(i) = ffe_results.metrics.BER;
|
||||
ber_mlse(i) = mlse_results.metrics.BER;
|
||||
end
|
||||
|
||||
|
||||
%% FFE DB tgt. + MLSE
|
||||
if dbtgt
|
||||
mlse_db_ = MLSE("DIR",[1,1],"duobinary_output",0,"M",M,"trellis_states",PAMmapper(M,0).levels,'scale_mode',2,'trellis_exclusion',0,'trellis_state_mode',3);
|
||||
ffe_order = [50, 0, 0];
|
||||
mu_ffe = [0.0001, 0.0008, 0.001];
|
||||
mu_dfe = 0.0004;
|
||||
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);
|
||||
|
||||
dbt_results = duobinary_target(eq_, mlse_db_, M, Rx_sig_2sps_v1, Symbols_v1, Tx_bits_v1, ...
|
||||
"precode_mode", duob_mode, ...
|
||||
'showAnalysis', 0,...
|
||||
"postFFE", []);
|
||||
|
||||
ber_dbtgt(i) = dbt_results.metrics.BER;
|
||||
end
|
||||
|
||||
|
||||
%%
|
||||
mu_lms = 0.0005;
|
||||
pf_ncoeffs = 2;
|
||||
eq_ = FFE("epochs_tr",5,"epochs_dd",5,"len_tr",2^13,"mu_dd",mu_lms,"mu_tr",mu_lms,"order",50,"sps",2,"dd_mode",1,"adaption_technique","lms");
|
||||
pf_ = Postfilter("ncoeff",pf_ncoeffs,"useBurg",1);
|
||||
|
||||
% FFE
|
||||
[y_ffe, ffe_noise] = eq_.process(Rx_sig_2sps_v1, Symbols_v1);
|
||||
|
||||
|
||||
% Postfilter
|
||||
[y_white,whitened_noise] = pf_.process(y_ffe, ffe_noise);
|
||||
|
||||
%% 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);
|
||||
|
||||
[y_ml_mlse,~] = ml_mlse_equalizer.process(y_white,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));
|
||||
|
||||
% figure(11);hold on
|
||||
% plot(1:numel(ml_mlse_equalizer.ber),ml_mlse_equalizer.ber);
|
||||
% beautifyBERplot;
|
||||
% xlim([1,numel(ml_mlse_equalizer.ber)])
|
||||
|
||||
end
|
||||
|
||||
%%
|
||||
|
||||
figure(6); hold on;
|
||||
if mlse
|
||||
plot(baudrates,ber_ffe,'DisplayName','FFE');
|
||||
plot(baudrates,ber_mlse,'DisplayName','MLSE');
|
||||
end
|
||||
if dbtgt
|
||||
plot(baudrates,ber_dbtgt,'DisplayName','DB tgt');
|
||||
end
|
||||
plot(baudrates,ber_ml,'DisplayName','ML-MLSE');
|
||||
beautifyBERplot;
|
||||
legend
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user