stuff from 400G analysis (project deliv 01)
This commit is contained in:
68
projects/IMDD_base_system/analyze_burg.m
Normal file
68
projects/IMDD_base_system/analyze_burg.m
Normal file
@@ -0,0 +1,68 @@
|
||||
% basePath = 'C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\';
|
||||
% db = DBHandler("pathToDB",[basePath,'silas_labor.db']);
|
||||
if 0
|
||||
|
||||
uloops = struct;
|
||||
uloops.precomp = [0];
|
||||
uloops.db_precode = [0];
|
||||
uloops.bitrate = [330,390,450].*1e9; %[300,330,360,390,420,450,480]
|
||||
uloops.laser_wavelength = [1310];
|
||||
uloops.M = [4];
|
||||
uloops.link_length = [2]; % 1,2,3,5,6,8,10
|
||||
%uloops.alpha = [0:0.1:1];
|
||||
|
||||
wh = DataStorage(uloops);
|
||||
wh.addStorage("ber");
|
||||
|
||||
wh = submit_simulations(wh,"parallel",1,"simulation_mode",0);
|
||||
|
||||
end
|
||||
|
||||
col = cbrewer2('spectral',6);%
|
||||
col=linspecer(5);
|
||||
|
||||
cnt = 1;
|
||||
for br = uloops.bitrate
|
||||
a = wh_burg.getStoValue('ber',uloops.precomp, uloops.db_precode, br , uloops.laser_wavelength, uloops.M, uloops.link_length);
|
||||
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||
alpha = cellfun(@(x) x.vnle_pf_package{1,1}.pf.coefficients, a,'UniformOutput', false);
|
||||
figure(23)
|
||||
hold on
|
||||
scatter(alpha{1}(2),ber_mlse,100,'MarkerEdgeColor',col(cnt,:),'Marker','x','LineWidth',2,'HandleVisibility','off');
|
||||
cnt = cnt+1;
|
||||
end
|
||||
|
||||
|
||||
|
||||
cnt = 1;
|
||||
alpha = [];
|
||||
|
||||
for br = uloops.bitrate
|
||||
|
||||
a = wh_alphas.getStoValue('ber',uloops.precomp, uloops.db_precode, br , uloops.laser_wavelength, uloops.M, uloops.link_length, [0:0.1:1]);
|
||||
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||
|
||||
x_ax = [0:0.1:1];
|
||||
|
||||
figure(23)
|
||||
hold on
|
||||
% title(sprintf('%d km | %d nm | PAM %d',uloops.link_length,wavelength,uloops.M));
|
||||
plot(x_ax,ber_mlse,'DisplayName',sprintf(' %d GBps PAM 4',br.*1e-9),'LineStyle','-','HandleVisibility','on','Color',col(cnt,:));
|
||||
|
||||
xticks(x_ax);
|
||||
set(gca, 'YScale', 'log');
|
||||
ylim([1e-5 0.4]);
|
||||
xlim([min(x_ax), max(x_ax) ]);
|
||||
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||
legend
|
||||
beautifyBERplot();
|
||||
xlabel('Channel $\alpha$');
|
||||
ylabel('BER');
|
||||
|
||||
cnt = cnt+1;
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
57
projects/IMDD_base_system/analyze_equalizer_taps.m
Normal file
57
projects/IMDD_base_system/analyze_equalizer_taps.m
Normal file
@@ -0,0 +1,57 @@
|
||||
% basePath = 'C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\';
|
||||
% db = DBHandler("pathToDB",[basePath,'silas_labor.db']);
|
||||
if 0
|
||||
|
||||
uloops = struct;
|
||||
uloops.precomp = [0];
|
||||
uloops.db_precode = [0];
|
||||
uloops.bitrate = [390].*1e9; %[300,330,360,390,420,450,480]
|
||||
uloops.laser_wavelength = [1310];
|
||||
uloops.M = [4];
|
||||
uloops.link_length = [2]; % 1,2,3,5,6,8,10
|
||||
uloops.vnle_order1 = [5,10:10:100];
|
||||
uloops.vnle_order2 = [0];
|
||||
uloops.vnle_order3 = [0];
|
||||
|
||||
wh = DataStorage(uloops);
|
||||
wh.addStorage("ber");
|
||||
|
||||
wh = submit_simulations(wh,"parallel",1,"simulation_mode",0);
|
||||
|
||||
end
|
||||
|
||||
|
||||
col = cbrewer2('spectral',6);%
|
||||
col=linspecer(5);
|
||||
cnt = 1;
|
||||
for n3 = uloops.vnle_order3
|
||||
|
||||
a = wh.getStoValue('ber',uloops.precomp, uloops.db_precode, uloops.bitrate , uloops.laser_wavelength, uloops.M, uloops.link_length,...
|
||||
uloops.vnle_order1,...
|
||||
uloops.vnle_order2,...
|
||||
n3);
|
||||
|
||||
ber_vnle = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||
ber_db = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||
log_bers = log10(ber_vnle + 1e-12);
|
||||
|
||||
figure(20)
|
||||
hold on
|
||||
title(sprintf('%d km | %d nm | PAM %d',uloops.link_length,wavelength,uloops.M));
|
||||
% plot(uloops.vnle_order1,ber_vnle,'DisplayName',sprintf('Tx precomp. + VNLE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt,:));
|
||||
plot(uloops.vnle_order1,ber_mlse,'DisplayName',sprintf('VNLE + Postfilter + ;MLSE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt,:));
|
||||
plot(uloops.vnle_order1,ber_db,'DisplayName',sprintf('DB tgt. VNLE + MLSE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt+2,:));
|
||||
xticks(uloops.vnle_order1([1:1:end]));
|
||||
set(gca, 'YScale', 'log');
|
||||
ylim([5e-5 0.4]);
|
||||
xlim([min(uloops.vnle_order1), max(uloops.vnle_order1) ]);
|
||||
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||
legend
|
||||
beautifyBERplot();
|
||||
xlabel('Number of 1st order coeff.');
|
||||
ylabel('BER');
|
||||
|
||||
cnt = cnt+1;
|
||||
end
|
||||
|
||||
50
projects/IMDD_base_system/analyze_lambda.m
Normal file
50
projects/IMDD_base_system/analyze_lambda.m
Normal file
@@ -0,0 +1,50 @@
|
||||
if 0
|
||||
uloops = struct;
|
||||
uloops.precomp = [0];
|
||||
uloops.db_precode = [0,1];
|
||||
uloops.bitrate = [420].*1e9; %[300,330,360,390,420,450,480]
|
||||
% uloops.laser_wavelength = [1293,1297.5,1302,1306.5,1310,1313.4,1318,1322.7,1327.4];
|
||||
uloops.laser_wavelength = [1293, 1302,1310,1318,1327.4];
|
||||
uloops.M = [4,6,8];
|
||||
uloops.link_length = [5]; % 1,2,3,5,6,8,10
|
||||
wh = DataStorage(uloops);
|
||||
wh.addStorage("ber");
|
||||
|
||||
wh = submit_simulations(wh,"parallel",1,"simulation_mode",0);
|
||||
end
|
||||
|
||||
col = cbrewer2('Set2',6);%
|
||||
col=linspecer(5);
|
||||
cnt = 1;
|
||||
|
||||
m = 8;
|
||||
|
||||
% a = wh.getStoValue('ber',1, 0, uloops.bitrate , uloops.laser_wavelength, m, uloops.link_length);
|
||||
% ber_vnle = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||
|
||||
a = wh.getStoValue('ber',0, 0, uloops.bitrate , uloops.laser_wavelength, m, uloops.link_length);
|
||||
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||
|
||||
a = wh.getStoValue('ber',0, 1, uloops.bitrate , uloops.laser_wavelength, m, uloops.link_length);
|
||||
ber_db = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||
|
||||
x_ax = uloops.laser_wavelength;
|
||||
|
||||
figure(21)
|
||||
hold on
|
||||
% title(sprintf('%d km | %d GBd | PAM %d',uloops.link_length,uloops.bitrate/log2(m).*1e-9,m));
|
||||
% plot(x_ax,ber_vnle,'DisplayName',sprintf('Tx precomp. + VNLE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt+1,:));
|
||||
plot(x_ax,ber_mlse,'DisplayName',sprintf('VNLE + Postfilter + MLSE'),'LineStyle','-','HandleVisibility','on','Color',colorsets.DeepRed.RGB);
|
||||
% plot(x_ax,ber_db,'DisplayName',sprintf('DB tgt. VNLE + MLSE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt,:));
|
||||
xticks(x_ax([1:1:end]));
|
||||
set(gca, 'YScale', 'log');
|
||||
ylim([5e-5 0.4]);
|
||||
xlim([min(x_ax)-3, max(x_ax)+3 ]);
|
||||
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||
legend
|
||||
beautifyBERplot();
|
||||
xlabel('Number of 1st order coeff.');
|
||||
ylabel('BER');
|
||||
|
||||
cnt = cnt+1;
|
||||
|
||||
70
projects/IMDD_base_system/analyze_postfilter_taps.m
Normal file
70
projects/IMDD_base_system/analyze_postfilter_taps.m
Normal file
@@ -0,0 +1,70 @@
|
||||
% basePath = 'C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\';
|
||||
% db = DBHandler("pathToDB",[basePath,'silas_labor.db']);
|
||||
if 0
|
||||
|
||||
uloops = struct;
|
||||
uloops.precomp = [0];
|
||||
uloops.db_precode = [0];
|
||||
uloops.bitrate = [300,330,360,390,420,450,480].*1e9; %[300,330,360,390,420,450,480]
|
||||
uloops.laser_wavelength = [1310];
|
||||
uloops.M = [4];
|
||||
uloops.link_length = [2]; % 1,2,3,5,6,8,10
|
||||
uloops.vnle_order1 = [50];
|
||||
uloops.vnle_order2 = [7];
|
||||
uloops.vnle_order3 = [7];
|
||||
uloops.pf_ncoeffs = [1,2,3];
|
||||
|
||||
wh = DataStorage(uloops);
|
||||
wh.addStorage("ber");
|
||||
|
||||
wh = submit_simulations(wh,"parallel",1,"simulation_mode",0);
|
||||
|
||||
end
|
||||
|
||||
col = cbrewer2('spectral',6);%
|
||||
col=linspecer(5);
|
||||
cnt = 1;
|
||||
alpha = [];
|
||||
for n = uloops.pf_ncoeffs
|
||||
|
||||
a = wh.getStoValue('ber',uloops.precomp, uloops.db_precode, uloops.bitrate , uloops.laser_wavelength, uloops.M, uloops.link_length,...
|
||||
uloops.vnle_order1,...
|
||||
uloops.vnle_order2,...
|
||||
uloops.vnle_order3,...
|
||||
n);
|
||||
|
||||
ber_vnle = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||
|
||||
% PF = cellfun(@(x) x.vnle_pf_package{1,1}.pf.coefficients, a,'UniformOutput',false);
|
||||
%
|
||||
% showTransferFunction(PF{3}.coefficients,"fignum",12,"color",clr.Set1.red,"DisplayName",['360 GBd']);
|
||||
%
|
||||
% showTransferFunction(PF{4}.coefficients,"fignum",12,"color",clr.Set1.blue,"DisplayName",['390 GBd']);
|
||||
%
|
||||
% showTransferFunction(PF{5}.coefficients,"fignum",12,'color',clr.Set1.green,"DisplayName",['420 GBd']);
|
||||
% ber_db = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||
|
||||
x_ax = uloops.bitrate.*1e-9;
|
||||
|
||||
figure(23)
|
||||
hold on
|
||||
title(sprintf('%d km | %d nm | PAM %d',uloops.link_length,wavelength,uloops.M));
|
||||
if n==1
|
||||
plot(x_ax,ber_vnle,'DisplayName',sprintf('Tx precomp. + VNLE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt+4,:));
|
||||
end
|
||||
plot(x_ax,ber_mlse,'DisplayName',sprintf('VNLE + Postfilter + ;MLSE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt,:));
|
||||
% plot(x_ax,ber_db,'DisplayName',sprintf('DB tgt. VNLE + MLSE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt+2,:));
|
||||
xticks(x_ax([1:1:end]));
|
||||
set(gca, 'YScale', 'log');
|
||||
ylim([1e-5 0.4]);
|
||||
xlim([min(x_ax(2:end)), max(x_ax) ]);
|
||||
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||
legend
|
||||
beautifyBERplot();
|
||||
xlabel('Gross Bitrate in Gbps');
|
||||
ylabel('BER');
|
||||
|
||||
cnt = cnt+1;
|
||||
end
|
||||
|
||||
@@ -1,150 +1,308 @@
|
||||
|
||||
% basePath = 'C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\';
|
||||
% db = DBHandler("pathToDB",[basePath,'silas_labor.db']);
|
||||
if 1
|
||||
if 0
|
||||
uloops = struct;
|
||||
uloops.precomp = [0];
|
||||
uloops.db_precode = [0];
|
||||
uloops.bitrate = [330].*1e9; %[300,330,360,390,420,450,480]
|
||||
uloops.precomp = [1];
|
||||
uloops.db_precode = [0];
|
||||
uloops.bitrate = [300,330,360,390,420,450,480].*1e9; %[300,330,360,390,420,450,480]
|
||||
% uloops.bitrate = 390e9;
|
||||
% uloops.laser_wavelength = [1293,1297.5,1302,1306.5,1310,1313.4,1318,1322.7,1327.4];
|
||||
uloops.laser_wavelength = [1293];
|
||||
uloops.M = [4];
|
||||
uloops.laser_wavelength = [1310];
|
||||
uloops.M = [6];
|
||||
uloops.M = [4,6,8];
|
||||
uloops.link_length = [2]; % 1,2,3,5,6,8,10
|
||||
wh = DataStorage(uloops);
|
||||
wh.addStorage("ber");
|
||||
|
||||
|
||||
wh = submit_simulations(wh,"parallel",0,"simulation_mode",0);
|
||||
end
|
||||
|
||||
wh_ana = wh;
|
||||
wh_ana = wh_master;
|
||||
|
||||
ber_mlse = {};
|
||||
ber_vnle = {};
|
||||
inf_rate_vnle ={};
|
||||
cols = cbrewer2('Paired',8);
|
||||
|
||||
ber_dbtgt ={};
|
||||
figure()
|
||||
|
||||
ber_dbenc ={};
|
||||
alpha = {};
|
||||
ber_dfe = {};
|
||||
ngmi = [];
|
||||
for precomp = [0,1]
|
||||
wavelength=uloops.laser_wavelength;
|
||||
for m = [6]
|
||||
|
||||
wavelength=uloops.laser_wavelength;
|
||||
for m = [4,6,8]
|
||||
%1302
|
||||
%VNLE
|
||||
precomp = 1;
|
||||
precode = 0;
|
||||
a = wh_ana.getStoValue('ber',precomp, precode, uloops.bitrate , wavelength, m, uloops.link_length);
|
||||
ber_vnle = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||
|
||||
%MLSE
|
||||
% precomp = 0;
|
||||
% precode = 1;
|
||||
a = wh_ana.getStoValue('ber',precomp, precode, uloops.bitrate , wavelength, m, uloops.link_length);
|
||||
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||
|
||||
%DB
|
||||
% precomp = 0;
|
||||
% precode = 1;
|
||||
a = wh_ana.getStoValue('ber',precomp, precode, uloops.bitrate , wavelength, m, uloops.link_length);
|
||||
ber_dbtgt = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||
|
||||
figure(m+20)
|
||||
hold on
|
||||
title(sprintf('%d km | %d nm | PAM %d',uloops.link_length,wavelength,m));
|
||||
|
||||
plot(uloops.bitrate,ber_vnle,'DisplayName',sprintf('VNLE'),'Color',cols(3,:),'LineStyle','-','HandleVisibility','on');
|
||||
|
||||
plot(uloops.bitrate,ber_dbtgt,'DisplayName',sprintf('DB tgt. + MLSE',uloops.link_length,uloops.M),'Color',cols(1,:),'LineStyle','-','HandleVisibility','on');
|
||||
|
||||
plot(uloops.bitrate,ber_mlse,'DisplayName',sprintf('VNLE + 1 tap post-filter + MLSE',uloops.link_length,uloops.M),'Color',cols(4,:),'LineStyle','-','HandleVisibility','on');
|
||||
|
||||
set(gca, 'YScale', 'log');
|
||||
ylim([5e-5 0.3]);
|
||||
% xlim([min(uloops.bitrate.*1e-9), max(uloops.bitrate.*1e-9) ]);
|
||||
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||
legend
|
||||
beautifyBERplot()
|
||||
xlabel('Bit Rate in Gbps');
|
||||
ylabel('BER');
|
||||
end
|
||||
baudrate = wh_ana.parameter.bitrate.values;
|
||||
|
||||
|
||||
cols = linspecer(7);%cbrewer2('Set2',10);
|
||||
%VNLE
|
||||
precode = 1;
|
||||
a = wh_ana.getStoValue('ber',precomp, precode, baudrate , wavelength, m, uloops.link_length);
|
||||
ber_vnle_pc = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||
%MLSE
|
||||
ber_mlse_pc = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||
%DB
|
||||
ber_dbtgt_pc = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||
|
||||
precode = 0;
|
||||
a = wh_ana.getStoValue('ber',precomp, precode, baudrate , wavelength, m, uloops.link_length);
|
||||
ber_vnle = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||
%MLSE
|
||||
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||
%DB
|
||||
ber_dbtgt = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||
|
||||
for w = uloops.laser_wavelength
|
||||
|
||||
figure(w)
|
||||
figcnt = 0;
|
||||
|
||||
for precode = uloops.db_precode
|
||||
|
||||
for precomp = uloops.precomp
|
||||
|
||||
for m = uloops.M
|
||||
|
||||
a = wh_ana.getStoValue('ber',precomp, precode, uloops.bitrate , w, m, uloops.link_length);
|
||||
ber_dbtgt = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||
|
||||
ber_vnle = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||
|
||||
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||
|
||||
figcnt = figcnt+1;
|
||||
subplot(4,3,figcnt);
|
||||
hold on
|
||||
title(sprintf('precomp = %d | precode = %d | %d km | %d nm | PAM %d',precomp,precode,uloops.link_length,w,m));
|
||||
|
||||
plot(uloops.bitrate,ber_dbtgt,'DisplayName',sprintf('DB tgt. + MLSE',uloops.link_length,uloops.M),'Color',cols(1,:),'LineStyle','-','HandleVisibility','on');
|
||||
|
||||
plot(uloops.bitrate,ber_vnle,'DisplayName',sprintf('VNLE'),'Color',cols(3,:),'LineStyle','-','HandleVisibility','on');
|
||||
|
||||
plot(uloops.bitrate,ber_mlse,'DisplayName',sprintf('VNLE + 1 tap post-filter + MLSE',uloops.link_length,uloops.M),'Color',cols(4,:),'LineStyle','-','HandleVisibility','on');
|
||||
|
||||
% plot(uloops.bitrate,cellfun(@min, ber_dfe),'DisplayName',sprintf('VNLE + DFE',uloops.link_length,uloops.M),'Color',cols(2,:),'LineStyle','--');
|
||||
|
||||
% plot(uloops.bitrate,cellfun(@min, ber_dbenc),'DisplayName',sprintf('DB Encoded',uloops.link_length,uloops.M),'Color',cols(5,:),'LineStyle','-');
|
||||
|
||||
set(gca, 'YScale', 'log');
|
||||
ylim([5e-5 0.5]);
|
||||
% xlim([min(uloops.bitrate.*1e-9), max(uloops.bitrate.*1e-9) ]);
|
||||
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||
legend
|
||||
beautifyBERplot()
|
||||
xlabel('Bit Rate in Gbps');
|
||||
ylabel('Channel Wavelength (nm)');
|
||||
|
||||
end
|
||||
if precomp
|
||||
legndname1 = ['Pre-Emphasis'];
|
||||
else
|
||||
legndname1 = ['No Pre-Emphasis'];
|
||||
end
|
||||
|
||||
|
||||
baudrate = floor( uloops.bitrate.*1e-9 ./log2(m) ) .* 2.5 .* 1e9;
|
||||
|
||||
subplot(1,3,1)
|
||||
hold on
|
||||
title(sprintf('%d km | %d nm | PAM %d',uloops.link_length,wavelength,m));
|
||||
title(sprintf('PAM %d',m));
|
||||
plot(baudrate.*1e-9,ber_vnle,'DisplayName',['Pre-Emphasis: ', num2str(precomp), '| Diff.-Code: 0'],'Color',cols(1+precomp,:),'LineStyle','-','HandleVisibility','on');
|
||||
plot(baudrate.*1e-9,ber_vnle_pc,'DisplayName',['Pre-Emphasis: ', num2str(precomp), '| Diff.-Code: 1'],'Color',cols(1+precomp,:),'LineStyle','-.','HandleVisibility','on');
|
||||
xticks(baudrate.*1e-9);
|
||||
set(gca, 'YScale', 'log');
|
||||
ylim([5e-5 0.4]);
|
||||
xlim([min(baudrate(2).*1e-9), max(baudrate.*1e-9) ]);
|
||||
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||
legend
|
||||
beautifyBERplot()
|
||||
xlabel('Bit Rate in Gbps');
|
||||
ylabel('BER');
|
||||
|
||||
|
||||
|
||||
subplot(1,3,2)
|
||||
hold on
|
||||
% title(sprintf('%d km | %d nm | PAM %d',uloops.link_length,wavelength,m));
|
||||
title(sprintf('PAM %d',m));
|
||||
plot(baudrate.*1e-9,ber_dbtgt,'DisplayName',['Pre-Emphasis: ', num2str(precomp), '| Diff.-Code: 0'],'Color',cols(5+precomp,:),'LineStyle','-','HandleVisibility','on');
|
||||
plot(baudrate.*1e-9,ber_dbtgt_pc,'DisplayName',['Pre-Emphasis: ', num2str(precomp), '| Diff.-Code: 1'],'Color',cols(5+precomp,:),'LineStyle','-.','HandleVisibility','on');
|
||||
xticks(baudrate.*1e-9);
|
||||
set(gca, 'YScale', 'log');
|
||||
ylim([5e-5 0.4]);
|
||||
xlim([min(baudrate(2).*1e-9), max(baudrate.*1e-9) ]);
|
||||
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||
legend
|
||||
beautifyBERplot()
|
||||
xlabel('Bit Rate in Gbps');
|
||||
ylabel('BER');
|
||||
|
||||
|
||||
subplot(1,3,3)
|
||||
hold on
|
||||
% title(sprintf('%d km | %d nm | PAM %d',uloops.link_length,wavelength,m));
|
||||
title(sprintf('PAM %d',m));
|
||||
plot(baudrate.*1e-9,ber_mlse,'DisplayName',['Pre-Emphasis: ', num2str(precomp), '| Diff.-Code: 0'],'Color',cols(3+precomp,:),'LineStyle','-','HandleVisibility','on');
|
||||
plot(baudrate.*1e-9,ber_mlse_pc,'DisplayName',['Pre-Emphasis: ', num2str(precomp), '| Diff.-Code: 1'],'Color',cols(3+precomp,:),'LineStyle','-.','HandleVisibility','on');
|
||||
xticks(baudrate.*1e-9);
|
||||
set(gca, 'YScale', 'log');
|
||||
ylim([5e-5 0.4]);
|
||||
xlim([min(baudrate(2).*1e-9), max(baudrate.*1e-9) ]);
|
||||
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||
legend
|
||||
beautifyBERplot()
|
||||
xlabel('Bit Rate in Gbps');
|
||||
ylabel('BER');
|
||||
end
|
||||
end
|
||||
%
|
||||
%
|
||||
% cols = linspecer(7);%cbrewer2('Set2',10);
|
||||
%
|
||||
%
|
||||
% for w = uloops.laser_wavelength
|
||||
%
|
||||
% figure(w)
|
||||
% figcnt = 0;
|
||||
%
|
||||
% for precode = uloops.db_precode
|
||||
%
|
||||
% for precomp = uloops.precomp
|
||||
%
|
||||
% for m = uloops.M
|
||||
%
|
||||
% a = wh_ana.getStoValue('ber',precomp, precode, uloops.bitrate , w, m, uloops.link_length);
|
||||
% ber_dbtgt = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||
%
|
||||
% ber_vnle = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||
%
|
||||
% ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||
%
|
||||
% figcnt = figcnt+1;
|
||||
% subplot(4,3,figcnt);
|
||||
% hold on
|
||||
% title(sprintf('precomp = %d | precode = %d | %d km | %d nm | PAM %d',precomp,precode,uloops.link_length,w,m));
|
||||
%
|
||||
% plot(uloops.bitrate,ber_dbtgt,'DisplayName',sprintf('DB tgt. + MLSE',uloops.link_length,uloops.M),'Color',cols(1,:),'LineStyle','-','HandleVisibility','on');
|
||||
%
|
||||
% plot(uloops.bitrate,ber_vnle,'DisplayName',sprintf('VNLE'),'Color',cols(3,:),'LineStyle','-','HandleVisibility','on');
|
||||
%
|
||||
% plot(uloops.bitrate,ber_mlse,'DisplayName',sprintf('VNLE + 1 tap post-filter + MLSE',uloops.link_length,uloops.M),'Color',cols(4,:),'LineStyle','-','HandleVisibility','on');
|
||||
%
|
||||
% % plot(uloops.bitrate,cellfun(@min, ber_dfe),'DisplayName',sprintf('VNLE + DFE',uloops.link_length,uloops.M),'Color',cols(2,:),'LineStyle','--');
|
||||
%
|
||||
% % plot(uloops.bitrate,cellfun(@min, ber_dbenc),'DisplayName',sprintf('DB Encoded',uloops.link_length,uloops.M),'Color',cols(5,:),'LineStyle','-');
|
||||
%
|
||||
% set(gca, 'YScale', 'log');
|
||||
% ylim([5e-5 0.5]);
|
||||
% % xlim([min(uloops.bitrate.*1e-9), max(uloops.bitrate.*1e-9) ]);
|
||||
% yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||
% legend
|
||||
% beautifyBERplot()
|
||||
% xlabel('Bit Rate in Gbps');
|
||||
% ylabel('Channel Wavelength (nm)');
|
||||
%
|
||||
% end
|
||||
% end
|
||||
% end
|
||||
% end
|
||||
|
||||
tp = TransmissionPerformance;
|
||||
netRatesVNLE = tp.calculateNetRate(uloops.bitrate, 'NGMI', cellfun(@min, inf_rate_vnle)./log2(uloops.M), 'BER', cellfun(@min, ber_vnle));
|
||||
|
||||
pam8= [2.9515 2.9284 2.9203 2.9311 2.8473 2.7740 2.6253];
|
||||
pam6 = [2.5280 2.5452 2.5579 2.5549 2.5272 2.4243 2.2617];
|
||||
pam4 = [ 1.9982 1.9972 1.9690 1.7909 1.2493 0.8014 0.6385];
|
||||
|
||||
figure(6)
|
||||
hold on
|
||||
title(sprintf('Performance at 1310 for all lengths'));
|
||||
% plot(uloops.bitrate.*1e-9,cellfun(@min, inf_rate_vnle),'DisplayName',sprintf('NGMI VNLE; %d km',uloops.link_length),'Color',cols(3,:),'LineStyle',':');
|
||||
plot(uloops.bitrate.*1e-9,pam4/2,'DisplayName',sprintf('GMI VNLE; PAM 4'),'Color',cols(1,:),'LineStyle',':');
|
||||
plot(uloops.bitrate.*1e-9,pam6/log2(6),'DisplayName',sprintf('GMI VNLE; PAM 6'),'Color',cols(2,:),'LineStyle',':');
|
||||
plot(uloops.bitrate.*1e-9,pam8/3,'DisplayName',sprintf('GMI VNLE; PAM 8'),'Color',cols(3,:),'LineStyle',':');
|
||||
xlabel('Gross Bitrate in Gbps');
|
||||
ylabel('NGMI')
|
||||
beautifyBERplot()
|
||||
ylim([0,1]);
|
||||
m = 6;
|
||||
ir = [2,2.5,3];
|
||||
cols = linspecer(6);
|
||||
baudrate_gather = [];
|
||||
for i = 1:3
|
||||
m = uloops.M(i);
|
||||
|
||||
%%% GET VNLE VALS
|
||||
precode = 0;
|
||||
precomp = 1;
|
||||
a = wh_master.getStoValue('ber',precomp, precode, uloops.bitrate , uloops.laser_wavelength, m, uloops.link_length);
|
||||
ber_vnle(i,:) = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||
|
||||
%%% GET DB VALS
|
||||
precode = 1;
|
||||
precomp = 0;
|
||||
a = wh_master.getStoValue('ber',precomp, precode, uloops.bitrate , uloops.laser_wavelength, m, uloops.link_length);
|
||||
ber_db(i,:) = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||
|
||||
%%% GET MLSE VALS
|
||||
precode = 0;
|
||||
precomp = 0;
|
||||
a = wh_master.getStoValue('ber',precomp, precode, uloops.bitrate , uloops.laser_wavelength, m, uloops.link_length);
|
||||
ber_mlse(i,:) = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||
|
||||
inf_rate_pam(i,:) = cellfun(@(x) x.vnle_pf_package{1,1}.air, a);
|
||||
inf_rate_pam(i,:) = inf_rate_pam(i,:)./log2(m);
|
||||
|
||||
bitrate = floor( uloops.bitrate.*1e-9 ./log2(m) ) .* ir(i) .* 1e9;
|
||||
baudrate = floor( uloops.bitrate.*1e-9 ./log2(m) ) .* 1e9;
|
||||
baudrate_gather = union(baudrate_gather,baudrate);
|
||||
baudrate_ticks = 100:20:240;
|
||||
bitrate_ticks = 300:30:480;
|
||||
|
||||
tp = TransmissionPerformance;
|
||||
netRatesVNLE = tp.calculateNetRate(bitrate, 'NGMI', inf_rate_pam(i,:), 'BER', ber_vnle(i,:));
|
||||
|
||||
%%% NGMI
|
||||
figure(12)
|
||||
hold on
|
||||
title(sprintf('Performance at 1310 nm'));
|
||||
plot(baudrate.*1e-9,inf_rate_pam(i,:),'DisplayName',sprintf('NGMI; PAM %d',m),'Color',cols(i,:),'LineStyle','-');
|
||||
xlabel('Baud rate in GBd');
|
||||
ylabel('NGMI')
|
||||
beautifyBERplot()
|
||||
xticks(baudrate_ticks);
|
||||
xlim([min(baudrate_ticks) max(baudrate_ticks)]);
|
||||
|
||||
|
||||
%%% AIR
|
||||
figure(14)
|
||||
hold on
|
||||
title(sprintf('Performance at 1310 nm'));
|
||||
plot(baudrate.*1e-9,inf_rate_pam(i,:).*bitrate.*1e-9,'DisplayName',sprintf('AIR; PAM %d',m),'Color',cols(i,:),'LineStyle','-');
|
||||
xlabel('Baud rate in GBd');
|
||||
ylabel('AIR');
|
||||
beautifyBERplot()
|
||||
xticks(baudrate_ticks);
|
||||
xlim([min(baudrate_ticks) max(baudrate_ticks)]);
|
||||
|
||||
%%% RATES
|
||||
figure(16)
|
||||
hold on
|
||||
title(sprintf('Performance at 1310 nm'));
|
||||
if i == 1
|
||||
hv = 'on';
|
||||
else
|
||||
hv = 'off';
|
||||
end
|
||||
plot(baudrate*1e-9,netRatesVNLE.SDHD.NetRate.*1e-9,'DisplayName',sprintf('SD+HD FEC',m),'Color',cols(i,:),'LineStyle','-','HandleVisibility',hv,'Marker','o');
|
||||
plot(baudrate.*1e-9,netRatesVNLE.HD.NetRate.*1e-9,'DisplayName',sprintf('HD FEC',m),'Color',cols(i,:),'LineStyle',':','HandleVisibility',hv,'Marker','diamond');
|
||||
plot(baudrate.*1e-9,netRatesVNLE.KP4_hamming.NetRate*1e-9,'DisplayName',sprintf('KP4+Hamming',m),'Color',cols(i,:),'LineStyle','-.','HandleVisibility',hv,'Marker','square');
|
||||
xticks(baudrate_ticks);
|
||||
xlim([min(baudrate_ticks) max(baudrate_ticks)]);
|
||||
xlabel('Baud rate in GBd');
|
||||
ylabel('Net Bitrate in Gbps')
|
||||
beautifyBERplot()
|
||||
ylim([250 410])
|
||||
|
||||
%%% CODE OVERHEAD IN %
|
||||
figure(18)
|
||||
hold on
|
||||
title(sprintf('Performance at 1310 nm'));
|
||||
plot(baudrate*1e-9,100.*(1-netRatesVNLE.SDHD.CodeRate)./netRatesVNLE.SDHD.CodeRate,'DisplayName',sprintf('SD+HD FEC',m),'Color',cols(i,:),'LineStyle','-','HandleVisibility',hv,'Marker','o');
|
||||
plot(baudrate.*1e-9,100.*(1-netRatesVNLE.HD.CodeRate)./netRatesVNLE.HD.CodeRate,'DisplayName',sprintf('HD FEC',m),'Color',cols(i,:),'LineStyle',':','HandleVisibility',hv,'Marker','diamond');
|
||||
plot(baudrate.*1e-9,100.*(1-netRatesVNLE.KP4_hamming.CodeRate)./netRatesVNLE.KP4_hamming.CodeRate,'DisplayName',sprintf('KP4+Hamming',m),'Color',cols(i,:),'LineStyle','-.','HandleVisibility',hv,'Marker','square');
|
||||
xticks(baudrate_ticks);
|
||||
xlim([min(baudrate_ticks) max(baudrate_ticks)]);
|
||||
xlabel('Baud rate in GBd');
|
||||
ylabel('FEC Overhead in %')
|
||||
beautifyBERplot()
|
||||
|
||||
%%% CLASSIC BER
|
||||
figure(22)
|
||||
subplot(1,4,i)
|
||||
hold on
|
||||
plot(baudrate*1e-9,ber_vnle(i,:),'DisplayName',sprintf('Tx precomp + VNLE',m),'Color',cols(i,:),'LineStyle','-','HandleVisibility','on','Marker','o');
|
||||
plot(baudrate*1e-9,ber_mlse(i,:),'DisplayName',sprintf('VNLE + PF + MLSE',m),'Color',cols(i,:),'LineStyle',':','HandleVisibility','on','Marker','square');
|
||||
plot(baudrate*1e-9,ber_db(i,:),'DisplayName',sprintf('Diff. Code + DB tgt.',m),'Color',cols(i,:),'LineStyle','--','HandleVisibility','on','Marker','diamond');
|
||||
yline(4.85e-3,'HandleVisibility','off');
|
||||
yline(2e-2,'HandleVisibility','off');
|
||||
xticks(baudrate*1e-9);
|
||||
xlim([min(baudrate*1e-9) max(baudrate*1e-9)]);
|
||||
ylim([1e-4 0.3]);
|
||||
xlabel('Baudrate in GBd');
|
||||
if i == 1
|
||||
ylabel('BER')
|
||||
end
|
||||
beautifyBERplot()
|
||||
set(gca, 'YScale', 'log');
|
||||
legend
|
||||
subplot(1,4,4)
|
||||
hold on
|
||||
if m == 4
|
||||
|
||||
plot(bitrate*1e-9,ber_db(i,:),'DisplayName',sprintf('Diff. Code + DB tgt.'),'Color',cols(i,:),'LineStyle','--','HandleVisibility','on','Marker','diamond');
|
||||
|
||||
elseif m == 6
|
||||
|
||||
plot(bitrate*1e-9,ber_vnle(i,:),'DisplayName',sprintf('VNLE + PF + MLSE'),'Color',cols(i,:),'LineStyle','-','HandleVisibility','on','Marker','o');
|
||||
% plot(bitrate*1e-9,ber_mlse(i,:),'DisplayName',sprintf('MLSE',m),'Color',cols(i,:),'LineStyle',':','HandleVisibility',hv,'Marker','square');
|
||||
|
||||
elseif m ==8
|
||||
|
||||
plot(bitrate*1e-9,ber_vnle(i,:),'DisplayName',sprintf('Tx precomp + VNLE'),'Color',cols(i,:),'LineStyle','-','HandleVisibility','on','Marker','o');
|
||||
% plot(bitrate*1e-9,ber_mlse(i,:),'DisplayName',sprintf('MLSE',m),'Color',cols(i,:),'LineStyle',':','HandleVisibility',hv,'Marker','square');
|
||||
|
||||
end
|
||||
yline(4.85e-3,'HandleVisibility','off');
|
||||
yline(2e-2,'HandleVisibility','off');
|
||||
xticks(bitrate_ticks);
|
||||
xlim([min(bitrate_ticks) max(bitrate_ticks)]);
|
||||
ylim([1e-4 0.3]);
|
||||
xlabel('Gross Bitrate in Gbps');
|
||||
% ylabel('BER')
|
||||
beautifyBERplot()
|
||||
set(gca, 'YScale', 'log');
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
figure()
|
||||
title(sprintf('%d km | 1310 nm | PAM %d | VNLE',uloops.link_length,uloops.M));
|
||||
@@ -165,7 +323,7 @@ legend
|
||||
% plot(uloops.bitrate.*1e-9,ber_dfe,'DisplayName',sprintf('NGMI MLSE; %d km',len),'Color',cols(1,:),'LineStyle','-');
|
||||
% plot(uloops.bitrate.*1e-9,ber_mlse,'DisplayName',sprintf('NGMI MLSE; %d km',len),'Color',cols(1,:),'LineStyle','-');
|
||||
% plot(uloops.bitrate.*1e-9,ber_db,'DisplayName',sprintf('NGMI VNLE; %d km',len),'Color',cols(2,:),'LineStyle','-');
|
||||
%
|
||||
%
|
||||
% set(gca, 'YScale', 'log');
|
||||
% ylim([1e-5, 0.1]);
|
||||
% yline([3.8e-3;1e-2],'LineWidth',1,'HandleVisibility','off');
|
||||
@@ -177,13 +335,13 @@ legend
|
||||
% for alpha = uloops.alpha
|
||||
% for precode = uloops.db_precode
|
||||
% for precomp = uloops.precomp
|
||||
%
|
||||
%
|
||||
%
|
||||
%
|
||||
% cols = linspecer(6);%cbrewer2('Set2',10);
|
||||
% cnt = 1;
|
||||
% a = wh.getStoValue('ber',alpha,uloops.vnle_order2,uloops.vnle_order3,precomp, precode, uloops.bitrate,uloops.M);
|
||||
%
|
||||
%
|
||||
%
|
||||
%
|
||||
% for i = 1:numel(a)
|
||||
% ber_db(i) = mean((a{i}.ber_db));
|
||||
% ber_vnle(i) = mean((a{i}.ber_vnle));
|
||||
@@ -191,98 +349,98 @@ legend
|
||||
% ber_mlse(i) = mean((a{i}.ber_mlse));
|
||||
% pf_taps(i) = a{i}.pf_taps{1}(2);
|
||||
% vnle_taps(i,:) = a{i}.eq_vnle{1}.e;
|
||||
%
|
||||
%
|
||||
% figure(222)
|
||||
%
|
||||
%
|
||||
%
|
||||
%
|
||||
% subplot(7,3,3*(i-1)+1)
|
||||
% ylim([-0.5 1]);
|
||||
% title(sprintf('%d GBps',uloops.bitrate(i).*1e-9));
|
||||
% hold on
|
||||
% stem(a{i}.eq_vnle{1}.e)
|
||||
%
|
||||
%
|
||||
% subplot(7,3,3*(i-1)+2)
|
||||
% ylim([-0.5 1]);
|
||||
% title(sprintf('%d GBps',uloops.bitrate(i).*1e-9));
|
||||
% hold on
|
||||
% stem(a{i}.eq_vnle{1}.e2)
|
||||
%
|
||||
%
|
||||
% subplot(7,3,3*(i-1)+3)
|
||||
% ylim([-0.5 1]);
|
||||
% title(sprintf('%d GBps',uloops.bitrate(i).*1e-9));
|
||||
% hold on
|
||||
% stem(a{i}.eq_vnle{1}.e3)
|
||||
%
|
||||
%
|
||||
% showEQNoisePSD(a{i}.noise_vnle{1},"fignum",220,"displayname",sprintf('%d 2nd order taps; %d GBps',vnle_order2,uloops.bitrate(i).*1e-9),"postfilter_taps",a{i}.pf_taps{1});
|
||||
%
|
||||
%
|
||||
% eq_sig = a{i}.signal_vnle{1};
|
||||
%
|
||||
%
|
||||
%
|
||||
%
|
||||
% end
|
||||
%
|
||||
%
|
||||
% figure()
|
||||
% hold on
|
||||
%
|
||||
%
|
||||
% if precomp
|
||||
% lsty = '-';
|
||||
% else
|
||||
% lsty = '-';
|
||||
% end
|
||||
%
|
||||
%
|
||||
% if precode
|
||||
% coloffset = 1;
|
||||
% else
|
||||
% coloffset=1;
|
||||
% end
|
||||
%
|
||||
%
|
||||
% % plot(uloops.bitrate,ber_mlse,'DisplayName',sprintf('Precomp: %d; Precode %d',precomp,precode),'Color',cols(cnt,:));
|
||||
% title(sprintf('Precomp: %d; Precode %d',precomp,precode));
|
||||
% plot(uloops.bitrate.*1e-9,ber_vnle,'DisplayName','VNLE','Color',cols(4,:),'LineStyle',lsty);
|
||||
% plot(uloops.bitrate.*1e-9,ber_vnle_dfe,'DisplayName','VNLE+DFE','Color',cols(2,:),'LineStyle',lsty);
|
||||
% plot(uloops.bitrate.*1e-9,ber_mlse,'DisplayName','VNLE+PF+MLSE','Color',cols(3,:),'LineStyle',lsty);
|
||||
% plot(uloops.bitrate.*1e-9,ber_db,'DisplayName','DB tgt.','Color',cols(1,:),'LineStyle',lsty);
|
||||
%
|
||||
%
|
||||
% cnt = cnt+1;
|
||||
% yline([3.8e-3;1e-2],'LineWidth',1,'HandleVisibility','off');
|
||||
% beautifyBERplot()
|
||||
% end
|
||||
% end
|
||||
% end
|
||||
%
|
||||
%
|
||||
%
|
||||
%
|
||||
%
|
||||
%
|
||||
% for vnle_order3 = uloops.vnle_order3([1,3,5,7,9,10])
|
||||
% cnt = 0;
|
||||
% for vnle_order2 = 3%= uloops.vnle_order2
|
||||
% for precode = uloops.db_precode
|
||||
% for precomp = uloops.precomp
|
||||
%
|
||||
%
|
||||
%
|
||||
%
|
||||
% cols = linspecer(10);%cbrewer2('Set2',10);
|
||||
% cnt = cnt+1;
|
||||
% a = wh.getStoValue('ber',vnle_order2,vnle_order3,precomp, precode, uloops.bitrate,uloops.M);
|
||||
%
|
||||
%
|
||||
%
|
||||
%
|
||||
% ber_db(cnt) = mean((a{1}.ber_db));
|
||||
% ber_vnle(cnt) = mean((a{1}.ber_vnle));
|
||||
% ber_vnle_dfe(cnt) = mean((a{1}.ber_vnle_dfe));
|
||||
% ber_mlse(cnt) = mean((a{1}.ber_mlse));
|
||||
% pf_taps(cnt) = a{1}.pf_taps{1}(2);
|
||||
%
|
||||
%
|
||||
% showEQNoisePSD(a{1}.noise_vnle{1},"fignum",220,"displayname",sprintf('%d 3rd order taps; %d GBps',vnle_order3,uloops.bitrate(i).*1e-9));
|
||||
%
|
||||
%
|
||||
% eq_sig = a{1}.signal_vnle{1};
|
||||
%
|
||||
%
|
||||
%
|
||||
%
|
||||
% end
|
||||
% end
|
||||
% end
|
||||
%
|
||||
%
|
||||
% figure(180)
|
||||
% hold on
|
||||
% scatter(uloops.vnle_order2,ber_mlse,'MarkerEdgeColor',cols(vnle_order3,:),'LineWidth',1,'DisplayName',sprintf('%d 3rd order taps',vnle_order3));
|
||||
% ylim([1e-3 0.5]);
|
||||
%
|
||||
%
|
||||
% end
|
||||
% title(sprintf('%d GBps',uloops.bitrate(i).*1e-9));
|
||||
% ylabel('BER');
|
||||
@@ -292,7 +450,7 @@ legend
|
||||
|
||||
% r = 1;
|
||||
% for rate = uloops.bitrate
|
||||
%
|
||||
%
|
||||
% i = 1;
|
||||
% for alpha = uloops.alpha
|
||||
% cols = linspecer(7);%cbrewer2('Set2',10);
|
||||
@@ -302,24 +460,24 @@ legend
|
||||
% pf_taps(i) = a{1}.pf_taps{1}(2);
|
||||
% i = i+1;
|
||||
% end
|
||||
%
|
||||
%
|
||||
% figure(150)
|
||||
% hold on
|
||||
% scatter(pf_taps(1),ber_mlse(1),200,'DisplayName','Burg','MarkerEdgeColor',cols(r,:),'Marker','x','LineWidth',2,'HandleVisibility','off');
|
||||
% plot(uloops.alpha(2:end),ber_mlse(2:end),'DisplayName',sprintf('%d GBps',rate.*1e-9),'Color',cols(r,:),'LineStyle','-');
|
||||
% r=r+1;
|
||||
%
|
||||
%
|
||||
% end
|
||||
%
|
||||
%
|
||||
%
|
||||
%
|
||||
% % title(sprintf('%d GBps',uloops.bitrate.*1e-9));
|
||||
% ylabel('BER');
|
||||
% xlabel('Alpha');
|
||||
% yline([3.8e-3;1e-2],'LineWidth',1,'HandleVisibility','off');
|
||||
% beautifyBERplot()
|
||||
%
|
||||
%
|
||||
%
|
||||
%
|
||||
%
|
||||
%
|
||||
% figure(2024)
|
||||
% hold on
|
||||
% for j = 1:numel(uloops.vnle_order3)
|
||||
@@ -328,23 +486,23 @@ legend
|
||||
% ber_mlse(i) = all2nd{i}.ber_mlse;
|
||||
% ber_vnle(i) = all2nd{i}.ber_vnle;
|
||||
% pf_taps(:,i) = all2nd{i}.pf_taps;
|
||||
%
|
||||
%
|
||||
% end
|
||||
% plot(uloops.vnle_order2,ber_mlse,'DisplayName',sprintf('%d 3rd order',uloops.vnle_order3(j)));
|
||||
% end
|
||||
%
|
||||
%
|
||||
% yline(3.8e-3,'LineWidth',2,'DisplayName','3.8e-3');
|
||||
% yline(2e-2,'LineWidth',2,'LineStyle','--','DisplayName','2e-2');
|
||||
% beautifyBERplot()
|
||||
% legend
|
||||
%
|
||||
%
|
||||
% figure(2025)
|
||||
% clf; % Clear figure so we start fresh
|
||||
%
|
||||
%
|
||||
% numJ = numel(uloops.vnle_order3);
|
||||
% numI = numel(uloops.vnle_order2);
|
||||
% ber_mlse_mat = zeros(numJ, numI);
|
||||
%
|
||||
%
|
||||
% % Gather data into a 2D matrix
|
||||
% for j = 1:numJ
|
||||
% all2nd = wh.getStoValue('ber', uloops.vnle_order3(j), uloops.vnle_order2, uloops.bitrate, uloops.M);
|
||||
@@ -352,21 +510,21 @@ legend
|
||||
% ber_mlse_mat(j,i) = all2nd{i}.ber_mlse;
|
||||
% end
|
||||
% end
|
||||
%
|
||||
%
|
||||
% % Create a 2D plot
|
||||
% % 'imagesc' displays the matrix as an image with a colorbar.
|
||||
% imagesc(uloops.vnle_order2, uloops.vnle_order3, ber_mlse_mat);
|
||||
% set(gca,'YDir','normal'); % Ensure that lower vnle_order3 is at the bottom
|
||||
% colorbar; % Add a colorbar to show BER scale
|
||||
%
|
||||
%
|
||||
% xlabel('VNLE Order 2');
|
||||
% ylabel('VNLE Order 3');
|
||||
% title('BER MLSE as a function of VNLE Orders');
|
||||
%
|
||||
%
|
||||
% % If you want to highlight certain BER levels, you can add contour lines:
|
||||
% hold on;
|
||||
% [C,h] = contour(uloops.vnle_order2, uloops.vnle_order3, ber_mlse_mat, [3.8e-3, 2e-2], 'LineWidth',2,'LineColor','k');
|
||||
% clabel(C,h,'Color','k','FontWeight','bold');
|
||||
%
|
||||
%
|
||||
% beautifyBERplot();
|
||||
% legend('BER contour lines');
|
||||
@@ -45,6 +45,7 @@ vnle_order3 = 7;
|
||||
vnle_order=[vnle_order1,vnle_order2,vnle_order3];
|
||||
dfe_order = [0 0 0];
|
||||
|
||||
pf_ncoeffs = 1;
|
||||
|
||||
alpha = 0;
|
||||
|
||||
@@ -54,6 +55,7 @@ mu_ffe1 = 0.0001;
|
||||
mu_ffe2 = 0.0008;
|
||||
mu_ffe3 = 0.001;
|
||||
mu_dc = 0.005;
|
||||
% mu_dc = 0;
|
||||
|
||||
mu_ffe = [mu_ffe1 mu_ffe3 mu_ffe3];
|
||||
mu_dfe = 0.0004;
|
||||
@@ -132,7 +134,7 @@ f_nyquist = fsym/2;
|
||||
%%% run the simulation or measurement or ...
|
||||
if simulation_mode
|
||||
|
||||
Pform = Pulseformer("fsym",fsym,"fdac",4*fsym,"pulse","rrc","pulselength",16,"rrcalpha",rcalpha);
|
||||
Pform = Pulseformer("fsym",fsym,"fdac",4*fsym,"pulse","rc","pulselength",16,"alpha",rcalpha);
|
||||
|
||||
[Digi_sig,Symbols,Tx_bits] = PAMsource(...
|
||||
"fsym",fsym,"M",M,"order",16,"useprbs",0,...
|
||||
@@ -240,9 +242,9 @@ else
|
||||
%
|
||||
% Raw_signal = Filter('filtdegree',4,"f_cutoff",Symbols.fs.*0.55,"fs",Raw_signal.fs,"filterType",filtertypes.gaussian,"active",true).process(Raw_signal);
|
||||
%
|
||||
Scpe_cell{1}.eye(fsym,M,"displayname",'eye','fignum',227);
|
||||
% Scpe_cell{1}.eye(fsym,M,"displayname",'eye','fignum',227);
|
||||
%
|
||||
% Raw_signal.spectrum("normalizeTo0dB",0,"fignum",336,"fft_length",2^12);
|
||||
% Raw_signal.spectrum("normalizeTo0dB",0,"fignum",11,"fft_length",2^12);
|
||||
% Raw_signal.move_it_spectrum("fignum",334);
|
||||
% Raw_signal.move_it_spectrum("fignum",334);
|
||||
|
||||
@@ -283,15 +285,15 @@ for occ = 1:proc_occ
|
||||
% eq_mlse = FFE_DCremoval("epochs_tr",5,"epochs_dd",5,"len_tr",len_tr,"mu_dd",mu_ffe(1),"mu_tr",0,"order",ffe_order(1),"sps",2,"decide",0,"dc_buffer_len",512,"mu_dc",0.05);
|
||||
|
||||
mu_ffe = [mu_ffe1 mu_ffe2 mu_ffe3];
|
||||
vnle_order=[vnle_order1,vnle_order2,vnle_order3];
|
||||
|
||||
% %%%%% VNLE + DFE %%%%
|
||||
if 1
|
||||
eq_vnle_dfe = EQ("Ne",vnle_order,"Nb",[0,0,0],"training_length",len_tr,"training_loops",5,"dd_loops",5,"K",2,"DCmu",mu_dc,"DDmu",[mu_ffe mu_dfe],"DFEmu",0.005,"FFEmu",0,"plotfinal",1,"ideal_dfe",0);
|
||||
if 0
|
||||
eq_vnle_dfe = EQ("Ne",vnle_order,"Nb",[0,0,0],"training_length",len_tr,"training_loops",5,"dd_loops",5,"K",2,"DCmu",mu_dc,"DDmu",[mu_ffe mu_dfe],"DFEmu",0.005,"FFEmu",0,"plotfinal",0,"ideal_dfe",0);
|
||||
|
||||
[result] = vnle(eq_vnle_dfe,M,Scpe_sig,Symbols,Tx_bits,"precode_mode",doub_mode,"showAnalysis",1);
|
||||
[result] = vnle(eq_vnle_dfe,M,Scpe_sig,Symbols,Tx_bits,"precode_mode",doub_mode,"showAnalysis",0);
|
||||
vnle_dfe_package{occ} = result;
|
||||
|
||||
|
||||
end
|
||||
%%%%% VNLE + PF + MLSE %%%%
|
||||
if 1
|
||||
@@ -299,7 +301,7 @@ for occ = 1:proc_occ
|
||||
% len_tr = length(Symbols)-1000;
|
||||
eq_vnle_ = EQ("Ne",vnle_order,"Nb",dfe_order,"training_length",len_tr,"training_loops",5,"dd_loops",5,"K",2,"DCmu",mu_dc,"DDmu",[mu_ffe mu_dfe],"DFEmu",0.005,"FFEmu",0,"plotfinal",0,"ideal_dfe",1);
|
||||
% eq_vnle_ = VNLE("epochs_tr",5,"epochs_dd",5,"len_tr",4096*2,"mu_dd",[0.0004 0.0005 0.0006],"mu_tr",0,"order",vnle_order,"sps",2,"decide",0);
|
||||
pf_ = Postfilter("ncoeff",1,"useBurg",1);
|
||||
pf_ = Postfilter("ncoeff",pf_ncoeffs,"useBurg",1);
|
||||
mlse_ = MLSE_viterbi("duobinary_output",0,'M',M,'trellis_states',PAMmapper(M,0).levels);
|
||||
|
||||
[result] = vnle_postfilter_mlse(eq_vnle_,pf_,mlse_,M,Scpe_sig,Symbols,Tx_bits,"precode_mode",doub_mode,'showAnalysis',1);
|
||||
@@ -309,12 +311,12 @@ for occ = 1:proc_occ
|
||||
|
||||
|
||||
%%%%% Duobinary Targeting %%%%
|
||||
if 1
|
||||
if 0
|
||||
|
||||
mlse_db = MLSE_viterbi("DIR",[1,1],"duobinary_output",0,"M",M,"trellis_states",PAMmapper(M,0).levels);
|
||||
eq_db = EQ("Ne",vnle_order,"Nb",dfe_order,"training_length",len_tr,"training_loops",5,"dd_loops",5,"K",2,"DCmu",mu_dc,"DDmu",[mu_ffe mu_dfe],"DFEmu",0.005,"FFEmu",0,"plotfinal",0,"ideal_dfe",1);
|
||||
|
||||
[result] = duobinary_target(eq_db, mlse_db, M, Scpe_sig, Symbols, Tx_bits, "precode_mode", doub_mode,'showAnalysis',1);
|
||||
[result] = duobinary_target(eq_db, mlse_db, M, Scpe_sig, Symbols, Tx_bits, "precode_mode", doub_mode,'showAnalysis',0);
|
||||
dbtgt_package{occ} = result;
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user