93 lines
2.8 KiB
Matlab
93 lines
2.8 KiB
Matlab
|
|
% basePath = 'C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\';
|
|
% db = DBHandler("pathToDB",[basePath,'silas_labor.db']);
|
|
if 1
|
|
|
|
uloops = struct;
|
|
uloops.precomp = [0,1];
|
|
uloops.db_precode = [0,1];
|
|
uloops.bitrate = [420].*1e9; %[300,330,360,390,420,450,480] [224,336,360,390,420,448] for MPI
|
|
% uloops.laser_wavelength = [1293,1297.5,1302,1306.5,1310,1313.4,1318,1322.7,1327.4];
|
|
uloops.laser_wavelength = [1310];
|
|
uloops.M = [4];
|
|
uloops.link_length = [1]; % 1,2,3,5,6,8,10
|
|
wh = DataStorage(uloops);
|
|
wh.addStorage("ber");
|
|
|
|
% wh = submit_simulations(wh,"parallel",0,"simulation_mode",0);
|
|
wh = submit_handle(@dsp_mpi,wh,"parallel",1);
|
|
|
|
end
|
|
|
|
a = wh_mpi_112gbd.getStoValue('ber',uloops.precomp, uloops.db_precode, uloops.bitrate(1) , uloops.laser_wavelength, uloops.M, uloops.link_length);
|
|
|
|
%VNLE standalone
|
|
try
|
|
ber_vnle = cellfun(@(x) x.vnle_dfe_package{1,1}.ber_vnle, a);
|
|
end
|
|
%MLSE
|
|
try
|
|
ber_values_mlse = cellfun(@(s) cellfun(@(pkg) pkg.ber_mlse, s.vnle_pf_package, 'UniformOutput', false), a, 'UniformOutput', false);
|
|
ber_values_mlse = cell2mat(ber_values_mlse{1});
|
|
|
|
end
|
|
%DB
|
|
try
|
|
ber_values_db = cellfun(@(s) cellfun(@(pkg) pkg.ber, s.dbtgt_package, 'UniformOutput', false), a, 'UniformOutput', false);
|
|
ber_values_db = cell2mat(ber_values_db{1});
|
|
end
|
|
|
|
xax = [0
|
|
3
|
|
6
|
|
9
|
|
12
|
|
15
|
|
18
|
|
21
|
|
24
|
|
27
|
|
30
|
|
45];
|
|
cols = cbrewer2('Set1',8);
|
|
|
|
% Compute min, max, and mean for PAM 4 MLSE
|
|
min_mlse = min(ber_values_mlse, [], 2);
|
|
max_mlse = max(ber_values_mlse, [], 2);
|
|
mean_mlse = mean(ber_values_mlse, 2);
|
|
err_lower_mlse = mean_mlse - min_mlse;
|
|
err_upper_mlse = max_mlse - mean_mlse;
|
|
err_mlse = [err_lower_mlse, err_upper_mlse];
|
|
|
|
% Compute min, max, and mean for PAM 4 DB tgt.
|
|
min_db = min(ber_values_db, [], 2);
|
|
max_db = max(ber_values_db, [], 2);
|
|
mean_db = mean(ber_values_db, 2);
|
|
err_lower_db = mean_db - min_db;
|
|
err_upper_db = max_db - mean_db;
|
|
err_db = [err_lower_db, err_upper_db];
|
|
|
|
figure(1)
|
|
hold on
|
|
title('MPI');
|
|
|
|
% Plot the MLSE curve with bounded error using boundedline
|
|
[hl_mlse, hp_mlse] = boundedline(xax, mean_mlse, err_mlse,'Color', cols(1,:));
|
|
plot(xax,ber_values_mlse,'DisplayName','PAM 4 MLSE','Color',cols(1,:),'LineStyle','-','HandleVisibility','on','Marker','none','LineWidth',0.2);
|
|
|
|
% Plot the DB tgt. curve with bounded error using boundedline
|
|
[hl_db, hp_db] = boundedline(xax, mean_db, err_db, 'Color', cols(2,:));
|
|
plot(xax,ber_values_db,'DisplayName','PAM 4 MLSE','Color',cols(2,:),'LineStyle','-','HandleVisibility','on','Marker','none','LineWidth',0.2);
|
|
|
|
|
|
% Format the plot
|
|
xticks(xax);
|
|
set(gca, 'YScale', 'log');
|
|
ylim([5e-5 0.4]);
|
|
xlim([min(xax) max(xax)]);
|
|
yline([4.85e-3, 2e-2], 'HandleVisibility', 'off');
|
|
legend
|
|
% beautifyBERplot()
|
|
xlabel('Interference Attenuation');
|
|
ylabel('BER');
|