372 lines
14 KiB
Matlab
372 lines
14 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];
|
|
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.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;
|
|
|
|
ber_mlse = {};
|
|
ber_vnle = {};
|
|
inf_rate_vnle ={};
|
|
|
|
ber_dbtgt ={};
|
|
|
|
ber_dbenc ={};
|
|
alpha = {};
|
|
ber_dfe = {};
|
|
ngmi = [];
|
|
|
|
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
|
|
|
|
|
|
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]);
|
|
|
|
figure()
|
|
title(sprintf('%d km | 1310 nm | PAM %d | VNLE',uloops.link_length,uloops.M));
|
|
hold on
|
|
line([min(uloops.bitrate.*1e-9) max(uloops.bitrate.*1e-9)],[min(uloops.bitrate.*1e-9) max(uloops.bitrate.*1e-9)],'Color',[.7,.7,.7],'Marker','none','Handlevisibility','off');
|
|
plot(uloops.bitrate.*1e-9,cellfun(@min, inf_rate_vnle).*uloops.bitrate./log2(uloops.M).*1e-9,'DisplayName',sprintf('AIR'),'Color',cols(1,:),'LineStyle',':');
|
|
plot(uloops.bitrate.*1e-9,netRatesVNLE.SDHD.NetRate.*1e-9,'DisplayName',sprintf('SD+HD'),'Color',cols(2,:),'LineStyle',':');
|
|
plot(uloops.bitrate.*1e-9,netRatesVNLE.HD.NetRate.*1e-9,'DisplayName',sprintf('HD'),'Color',cols(3,:),'LineStyle',':');
|
|
plot(uloops.bitrate.*1e-9,netRatesVNLE.KP4_hamming.NetRate.*1e-9,'DisplayName',sprintf('KP4+Hamming'),'Color',cols(4,:),'LineStyle',':');
|
|
beautifyBERplot()
|
|
xlim([min(uloops.bitrate.*1e-9) max(uloops.bitrate.*1e-9)])
|
|
xlabel('Gross Bitrate in Gbps');
|
|
ylabel('Net Bitrate in Gbps');
|
|
legend
|
|
|
|
|
|
% plot(uloops.bitrate.*1e-9,ber_vnle,'DisplayName',sprintf('NGMI MLSE; %d km',len),'Color',cols(1,:),'LineStyle','-');
|
|
% 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');
|
|
|
|
|
|
|
|
|
|
|
|
% 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));
|
|
% ber_vnle_dfe(i) = mean((a{i}.ber_vnle_dfe));
|
|
% 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');
|
|
% xlabel('VNLE 2nd order taps');
|
|
% yline([3.8e-3;1e-2],'LineWidth',1,'HandleVisibility','off');
|
|
% beautifyBERplot()
|
|
|
|
% r = 1;
|
|
% for rate = uloops.bitrate
|
|
%
|
|
% i = 1;
|
|
% for alpha = uloops.alpha
|
|
% cols = linspecer(7);%cbrewer2('Set2',10);
|
|
% cnt = 1;
|
|
% a = wh.getStoValue('ber',alpha,uloops.vnle_order2,uloops.vnle_order3,precomp, precode, rate,uloops.M);
|
|
% ber_mlse(i) = mean((a{1}.ber_mlse));
|
|
% 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)
|
|
% all2nd = wh.getStoValue('ber',uloops.vnle_order3(j), uloops.vnle_order2, uloops.bitrate,uloops.M);
|
|
% for i = 1:numel(a)
|
|
% 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);
|
|
% for i = 1:numI
|
|
% 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'); |