Additions:
- Correction of the weighted DFE function in EQ.m - Some evaluation scripts for FSO Data
This commit is contained in:
@@ -98,7 +98,7 @@ H_transfer = Rx_spectrum.signal./Tx_spectrum.signal;
|
||||
H_inv = 1./H_transfer;
|
||||
|
||||
%Number of Samples/Symbol after Matched Filter
|
||||
Kov = 14;
|
||||
Kov = 40;
|
||||
|
||||
Scope_sig = Scope_sig.resample('fs_in',fs,'fs_out',Kov*fsym);
|
||||
|
||||
@@ -114,7 +114,7 @@ Rx_matched.spectrum("displayname",'Signal after matched filter','fignum',1);
|
||||
|
||||
data_tr_mf = Electricalsignal(data_tr_mf.Results, "fs", fsym);
|
||||
[~,Rx_synced_cell_tr_mf,inverted_tr_mf,sequenceFound_tr_mf,sequenceStarts_tr_mf] = data_tr_mf.tsynch("reference", Symbols, "fs_ref", fsym, "debug_plots", 1);
|
||||
Rx_tr_mf = Rx_synced_cell_tr_mf{1};
|
||||
Rx_tr_mf = Rx_synced_cell_tr_mf{11};
|
||||
|
||||
% timing sync -> at this point we still have no symbol timing recovery, we
|
||||
% try to do this with 2sps EQ!
|
||||
@@ -123,7 +123,7 @@ Rx_tr_mf = Rx_synced_cell_tr_mf{1};
|
||||
% Rx_matched = Rx_matched.resample("fs_out",2*fsym);
|
||||
|
||||
[~,Rx_synced_cell,inverted,sequenceFound,sequenceStarts] = Rx_matched.tsynch("reference", Symbols, "fs_ref", fsym, "debug_plots", 1);
|
||||
Rx_matched_1 = Rx_synced_cell{1};
|
||||
Rx_matched_1 = Rx_synced_cell{11};
|
||||
|
||||
Rx_matched_original = Rx_synced_cell{1};
|
||||
Rx_matched_original.signal = resample(Rx_matched_original.signal,1,Kov);
|
||||
@@ -135,14 +135,15 @@ Time_Rec = 1;
|
||||
if Time_Rec
|
||||
% [Rx_Time_Rec, Timing_Error] = Timing_Recovery("modulation", 'PAM/PSK/QAM', "timing_error_detector",'Gardner (non-data-aided)','sps',Kov,'damping_factor',1,'normalized_loop_bandwidth',1e-4,'detector_gain',2.7).process(Rx_matched_1);
|
||||
|
||||
% [Rx_Time_Rec, Timing_Error_MG] = Godard_Timing_Recovery('mode',3,'num_blocks',1,'fft_length',length(Rx_matched_1),'sps',Kov,'rolloff',0.6,'mu',-0.2,'Ki',1e-4).process(Rx_matched_1);
|
||||
% [Rx_Time_Rec, Timing_Error_MG] = Godard_Timing_Recovery('mode',2,'num_blocks',1,'fft_length',length(Rx_matched_1),'sps',Kov,'rolloff',0.6,'mu',-0.2,'Ki',1e-4).process(Rx_matched_1);
|
||||
% Rx_Time_Rec = Rx_Time_Rec.resample('fs_in',Kov*fsym,'fs_out',fsym);
|
||||
|
||||
Rx_Time_Rec = MaxVar_Timing_Recovery('mode',0,'fsym',fsym,'fadc',Kov*fsym,'num_tau',Kov*128,'sps',Kov,'comp_signal',Rx_tr_mf,'comp_mode',0).process(Rx_matched_1);
|
||||
Rx_Time_Rec = MaxVar_Timing_Recovery('mode',0,'fsym',fsym,'fadc',Kov*fsym,'num_tau',Kov*2048,'sps',Kov,'comp_signal',Rx_tr_mf,'comp_mode',0).process(Rx_matched_1);
|
||||
|
||||
sps = 1;
|
||||
else
|
||||
Rx_Time_Rec = Rx_matched_1;
|
||||
|
||||
sps = 1;
|
||||
end
|
||||
|
||||
@@ -188,7 +189,7 @@ for our_signal = 1
|
||||
end
|
||||
% Rx_synced = Rx_Time_Rec;
|
||||
% Rx_synced = Rx_synced_cell{1};
|
||||
len_tr = 4096*2;
|
||||
len_tr = 4096*4;
|
||||
mu_ffe1 = 0.0001;
|
||||
mu_ffe2 = 0.0008;
|
||||
mu_ffe3 = 0.001;
|
||||
@@ -232,40 +233,41 @@ for our_signal = 1
|
||||
% end
|
||||
|
||||
%% -------------------- VNLE + MLSE --------------------
|
||||
% pf_ncoeffs = 4;
|
||||
% eq_v = EQ("Ne",[300, 0, 0],"Nb",[0, 0, 0], ...
|
||||
% "training_length",len_tr,"training_loops",5,"dd_loops",5, ...
|
||||
% "K",sps,"DCmu",mu_dc,"DDmu",[mu_ffe mu_dfe],"DFEmu",0.005, ...
|
||||
% "FFEmu",0,"plotfinal",0,"ideal_dfe",1, ...
|
||||
% 'weighted_DFE',0,'weighted_DFE_d_min',0.5,'weighted_DFE_mode','R2','weighted_DFE_I_mode',[5,0.5,0.6]);
|
||||
% % eq_v = FFE_DFE('ffe_order',300,'dfe_order',5,'len_tr',len_tr,'epochs_tr',5,'epochs_dd',5, ...
|
||||
% % 'ffe_mu_dd',mu_ffe,'ffe_mu_tr',0,'dfe_mu_dd',mu_dfe,'dfe_mu_tr',0.005,'sps',sps,'decide',0);
|
||||
% pf_ = Postfilter("ncoeff",pf_ncoeffs,"useBurg",1);
|
||||
% mlse_ = MLSE("duobinary_output",0,'M',M,'trellis_states',PAMmapper(M,0,"eth_style",mapping_style).levels);
|
||||
%
|
||||
% [vnle_results, mlse_results] = vnle_postfilter_mlse(eq_v, pf_, mlse_, M, Rx_synced, Symbols, Bits, ...
|
||||
% "precode_mode", duob_mode, 'showAnalysis', 1, "postFFE", [], "eth_style_symbol_mapping", mapping_style);
|
||||
%
|
||||
% mlse_results.metrics.print
|
||||
% if our_signal
|
||||
% fprintf('Our Signal: %.1e \n',mlse_results.metrics.BER);
|
||||
% fprintf('Paper: %.1e \n \n',ber_in_paper);
|
||||
% else
|
||||
% fprintf('Their Signal: %.1e \n',mlse_results.metrics.BER);
|
||||
% fprintf('Paper: %.1e \n \n',ber_in_paper);
|
||||
% end
|
||||
|
||||
%% -------------------- ML-based MLSE (L=2) --------------------
|
||||
ml_mlse_equalizer = ML_MLSE("epochs_tr",100,"epochs_dd",1, ...
|
||||
"len_tr",length(Rx_synced),"mu_dd",0.03,"mu_tr",0.03,"order",11,"sps",sps, ...
|
||||
"traceback_depth",256,"L",1,"delta",4,"adaptive_mu",0);
|
||||
pf_ncoeffs = 4;
|
||||
eq_v = EQ("Ne",[300, 0, 0],"Nb",[2, 0, 0], ...
|
||||
"training_length",len_tr,"training_loops",5,"dd_loops",5, ...
|
||||
"K",sps,"DCmu",mu_dc,"DDmu",[mu_ffe mu_dfe],"DFEmu",0.005, ...
|
||||
"FFEmu",0,"plotfinal",0,"ideal_dfe",0, ...
|
||||
'weighted_DFE',1,'weighted_DFE_d_min',0.5,'weighted_DFE_mode','I2','weighted_DFE_I_mode',[1,0.1,0.1], ...
|
||||
'PDFE_coefficient',0.01);
|
||||
% eq_v = FFE_DFE('ffe_order',300,'dfe_order',5,'len_tr',len_tr,'epochs_tr',5,'epochs_dd',5, ...
|
||||
% 'ffe_mu_dd',mu_ffe,'ffe_mu_tr',0,'dfe_mu_dd',mu_dfe,'dfe_mu_tr',0.005,'sps',sps,'decide',0);
|
||||
pf_ = Postfilter("ncoeff",pf_ncoeffs,"useBurg",1);
|
||||
mlse_ = MLSE("duobinary_output",0,'M',M,'trellis_states',PAMmapper(M,0,"eth_style",mapping_style).levels);
|
||||
|
||||
[ml_mlse_results] = ml_mlse(ml_mlse_equalizer, M, Rx_synced, Symbols, Bits,"precode_mode",duob_mode,"eth_style_symbol_mapping",mapping_style);
|
||||
[vnle_results, mlse_results] = vnle_postfilter_mlse(eq_v, pf_, mlse_, M, Rx_synced, Symbols, Bits, ...
|
||||
"precode_mode", duob_mode, 'showAnalysis', 1, "postFFE", [], "eth_style_symbol_mapping", mapping_style);
|
||||
|
||||
mlse_results.metrics.print
|
||||
if our_signal
|
||||
fprintf('Our Signal: %.1e \n',ml_mlse_results.metrics.BER);
|
||||
fprintf('Our Signal: %.1e \n',mlse_results.metrics.BER);
|
||||
fprintf('Paper: %.1e \n \n',ber_in_paper);
|
||||
else
|
||||
fprintf('Their EQ: %.1e \n',ml_mlse_results.metrics.BER);
|
||||
fprintf('Their Signal: %.1e \n',mlse_results.metrics.BER);
|
||||
fprintf('Paper: %.1e \n \n',ber_in_paper);
|
||||
end
|
||||
|
||||
%% -------------------- ML-based MLSE (L=2) --------------------
|
||||
% ml_mlse_equalizer = ML_MLSE("epochs_tr",100,"epochs_dd",1, ...
|
||||
% "len_tr",length(Rx_synced),"mu_dd",0.03,"mu_tr",0.03,"order",11,"sps",sps, ...
|
||||
% "traceback_depth",256,"L",1,"delta",4,"adaptive_mu",0);
|
||||
%
|
||||
% [ml_mlse_results] = ml_mlse(ml_mlse_equalizer, M, Rx_synced, Symbols, Bits,"precode_mode",duob_mode,"eth_style_symbol_mapping",mapping_style);
|
||||
% if our_signal
|
||||
% fprintf('Our Signal: %.1e \n',ml_mlse_results.metrics.BER);
|
||||
% fprintf('Paper: %.1e \n \n',ber_in_paper);
|
||||
% else
|
||||
% fprintf('Their EQ: %.1e \n',ml_mlse_results.metrics.BER);
|
||||
% fprintf('Paper: %.1e \n \n',ber_in_paper);
|
||||
% end
|
||||
end
|
||||
Reference in New Issue
Block a user