Merge branch 'main' of cau-git.rz.uni-kiel.de:nt/mitarbeiter/silas/imdd_simulation

This commit is contained in:
Silas Oettinghaus
2026-03-12 17:27:23 +01:00
32 changed files with 2365 additions and 288 deletions

View File

@@ -1,4 +1,4 @@
close all;
if 1
@@ -8,23 +8,26 @@ if 1
% 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.link_length = [0:2:10]; % 1,2,3,5,6,8,10
uloops.link_length = 1;
% uloops.link_length = [0:2:10]; % 1,2,3,5,6,8,10
uloops.alpha = [0];
uloops.duob_mode = db_mode.no_db;
uloops.duob_mode = db_mode.db_precoded;
uloops.decoding_mode = "memoryless";
wh = DataStorage(uloops);
wh.addStorage("ber");
wh = submit_handle(@imdd_model,wh,"parallel",0);
end
%%
figure
hold on
for alpha = uloops.alpha
a=wh.getStoValue('ber',1, [300].*1e9 , 1293, 4, uloops.link_length,alpha);
ffe = cellfun(@(x) x.ffe_results.metrics.BER, a);
a=wh.getStoValue('ber',1, [300].*1e9 , 1293, 4, uloops.link_length,alpha,uloops.duob_mode,uloops.decoding_mode);
% ffe = cellfun(@(x) x.ffe_results.metrics.BER, a);
ffe = cellfun(@(x) x.dbt_results.metrics.BER, a);
plot(uloops.link_length,ffe,'DisplayName',sprintf('Alpha: %d',alpha),'LineStyle','-','HandleVisibility','on');
end
@@ -38,20 +41,20 @@ ylabel('BER');
%
%
% wh_ana = wh_master;
%
%
% cols = cbrewer2('Paired',8);
%
%
% figure()
%
%
% for precomp = [0,1]
% wavelength=uloops.laser_wavelength;
% for m = [6]
%
%
% baudrate = wh_ana.parameter.bitrate.values;
%
%
%
%
% %VNLE
% precode = 1;
% a = wh_ana.getStoValue('ber',precomp, precode, baudrate , wavelength, m, uloops.link_length);
@@ -60,7 +63,7 @@ ylabel('BER');
% 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);
@@ -68,16 +71,16 @@ ylabel('BER');
% 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);
%
%
% 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));
@@ -93,9 +96,9 @@ ylabel('BER');
% 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));
@@ -111,8 +114,8 @@ ylabel('BER');
% 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));
@@ -183,44 +186,44 @@ ylabel('BER');
% end
%
%
% m = 6;
% ir = [2,2.5,3];
% cols = linspecer(6);
% baudrate_gather = [];
% for i = 1:3
% m = uloops.M(i);
%
% %%% GET VNLE VALS
%
% %%% 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
%
% %%% 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
%
% %%% 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
@@ -231,8 +234,8 @@ ylabel('BER');
% beautifyBERplot()
% xticks(baudrate_ticks);
% xlim([min(baudrate_ticks) max(baudrate_ticks)]);
%
%
%
%
% %%% AIR
% figure(14)
% hold on
@@ -243,7 +246,7 @@ ylabel('BER');
% beautifyBERplot()
% xticks(baudrate_ticks);
% xlim([min(baudrate_ticks) max(baudrate_ticks)]);
%
%
% %%% RATES
% figure(16)
% hold on
@@ -262,7 +265,7 @@ ylabel('BER');
% ylabel('Net Bitrate in Gbps')
% beautifyBERplot()
% ylim([250 410])
%
%
% %%% CODE OVERHEAD IN %
% figure(18)
% hold on
@@ -275,7 +278,7 @@ ylabel('BER');
% xlabel('Baud rate in GBd');
% ylabel('FEC Overhead in %')
% beautifyBERplot()
%
%
% %%% CLASSIC BER
% figure(22)
% subplot(1,4,i)
@@ -298,19 +301,19 @@ ylabel('BER');
% 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');
@@ -321,12 +324,12 @@ ylabel('BER');
% % ylabel('BER')
% beautifyBERplot()
% set(gca, 'YScale', 'log');
%
%
%
%
% end
%
%
%
%
%
%
% figure()
% title(sprintf('%d km | 1310 nm | PAM %d | VNLE',uloops.link_length,uloops.M));
% hold on