89 lines
4.0 KiB
Matlab
89 lines
4.0 KiB
Matlab
|
|
|
|
if 0
|
|
uloops = struct;
|
|
uloops.precomp = [0,1];
|
|
uloops.db_precode = [0,1];
|
|
uloops.bitrate = [300,330,360,390,420,450,480].*1e9; %[300,330,360,390,420,450,480]
|
|
uloops.laser_wavelength = [1293,1302,1310,1318,1327.4];
|
|
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",1,"simulation_mode",0);
|
|
save('wh_2km',"wh");
|
|
end
|
|
|
|
|
|
|
|
for wavelength = wh.parameter.laser_wavelength.values
|
|
|
|
cols = linspecer(6);%cbrewer2('Set2',10);
|
|
figcnt = 0;
|
|
figWidth = 21; % Full-width for IEEE double-column papers (~7 inches)
|
|
figHeight = 6; % Adjust height as needed (~3.5 inches)
|
|
figure('Units','centimeters','Position', [1 1 figWidth figHeight],'PaperUnits','centimeters','PaperPosition', [0 0 figWidth figHeight])
|
|
tiledlayout(1,3, 'Padding', 'compact', 'TileSpacing', 'compact');
|
|
for m = uloops.M
|
|
|
|
|
|
|
|
figcnt = figcnt+1;
|
|
% subplot(1,3,figcnt)
|
|
nexttile
|
|
hold on
|
|
title(sprintf('%d km | %d nm | PAM %d',uloops.link_length,wavelength,m));
|
|
|
|
precomp = 1;
|
|
db_precode = 0;
|
|
a = wh.getStoValue('ber',precomp, db_precode, uloops.bitrate , wavelength, m, uloops.link_length);
|
|
ber_vnle = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
|
ber_vnle_cell = cellfun(@(s) cellfun(@(p) p.ber_vnle, s.vnle_pf_package, 'UniformOutput', true), a, 'UniformOutput', false);
|
|
ber_vnle_best = cellfun(@(c) min(c), ber_vnle_cell);
|
|
plot(uloops.bitrate.*1e-9,ber_vnle_best,'DisplayName',sprintf('Tx precomp + VNLE'),'Color',cols(3,:),'LineStyle','-','HandleVisibility','on');
|
|
xticks(uloops.bitrate.*1e-9);
|
|
xlim([min(uloops.bitrate.*1e-9) max(uloops.bitrate.*1e-9)]);
|
|
|
|
precomp = 0; %0
|
|
db_precode = 1;
|
|
a = wh.getStoValue('ber',precomp, db_precode, uloops.bitrate , wavelength, m, uloops.link_length);
|
|
% ber_db = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
|
ber_db_cell = cellfun(@(s) cellfun(@(p) p.ber, s.dbtgt_package, 'UniformOutput', true), a, 'UniformOutput', false);
|
|
ber_db_best = cellfun(@(c) min(c), ber_db_cell);
|
|
plot(uloops.bitrate.*1e-9,ber_db_best,'DisplayName',sprintf('DB tgt. + MLSE',uloops.link_length,uloops.M),'Color',cols(1,:),'LineStyle','-','HandleVisibility','on');
|
|
xticks(uloops.bitrate.*1e-9);
|
|
xlim([min(uloops.bitrate.*1e-9) max(uloops.bitrate.*1e-9)]);
|
|
|
|
precomp = 0; %0
|
|
db_precode = 0; %1
|
|
a = wh.getStoValue('ber',precomp, db_precode, uloops.bitrate , wavelength, m, uloops.link_length);
|
|
% ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
|
ber_mlse_cell = cellfun(@(s) cellfun(@(p) p.ber_mlse, s.vnle_pf_package, 'UniformOutput', true), a, 'UniformOutput', false);
|
|
ber_mlse_best = cellfun(@(c) min(c), ber_mlse_cell);
|
|
plot(uloops.bitrate.*1e-9,ber_mlse_best,'DisplayName',sprintf('VNLE + 1 tap post-filter + MLSE',uloops.link_length,uloops.M),'Color',cols(4,:),'LineStyle','-','HandleVisibility','on');
|
|
xticks(uloops.bitrate.*1e-9);
|
|
xlim([min(uloops.bitrate.*1e-9) max(uloops.bitrate.*1e-9)]);
|
|
|
|
set(gca, 'YScale', 'log');
|
|
ylim([8e-5 0.3]);
|
|
yline([4.8e-3, 2e-2],'HandleVisibility','off','LineWidth',1,'LineStyle','--','Color',[0.1 0.1 0.1]);
|
|
% legend
|
|
beautifyBERplot()
|
|
xlabel('Bit Rate in Gbps');
|
|
ylabel('BER');
|
|
|
|
if m ==4
|
|
text(310,6.8e-3,"4.8e-3","FontSize",10,"Interpreter","latex")
|
|
text(310,3e-2,"2e-2","FontSize",10,"Interpreter","latex")
|
|
end
|
|
|
|
% text(0.5,1,sprintf('%d km %d nm PAM %d',uloops.link_length,wavelength,m),...
|
|
% 'Units', 'normalized',"FontSize",10,"Interpreter","latex","BackgroundColor",[1 1 1],"EdgeColor",[0 0 0],'HorizontalAlignment','center','VerticalAlignment','top')
|
|
end
|
|
|
|
lgd = legend;
|
|
% Place the legend underneath the tiled layout
|
|
lgd.NumColumns = 3;
|
|
lgd.Layout.Tile = 'south';
|
|
|
|
end |