Changes from mwork PC.
PDP 2025 MPI analysis new focus on database and SQL
This commit is contained in:
@@ -1,113 +1,366 @@
|
||||
|
||||
% 202502211_km_fiber_Pmod_15dBm_P_PD_9p2494dBm_W03C34-0603E03_160GBd_8PAM__20250221T024256.h5
|
||||
|
||||
M = 8;
|
||||
if M == 4
|
||||
file_codes = {"20250221T032043",...
|
||||
"20250221T032312",...
|
||||
"20250221T032424",...
|
||||
"20250221T032529",...
|
||||
"20250221T032632",...
|
||||
"20250221T032800",...
|
||||
"20250221T032936",...
|
||||
"20250221T033035",...
|
||||
"20250221T033138",...
|
||||
"20250221T033138",...
|
||||
"20250221T033425",...
|
||||
"20250221T033527",...
|
||||
"20250221T033642",...
|
||||
"20250221T033743",...
|
||||
"20250221T033851",...
|
||||
"20250221T034314",...
|
||||
"20250221T034529",...
|
||||
"20250221T034647",...
|
||||
"20250221T034756",...
|
||||
"20250221T034915",...
|
||||
};
|
||||
baudrate = [96,120,128,136,144,152,160,168,172,176,180,184,188,192,196,200,204,212,220,224];
|
||||
pam4.result_vnle = result_vnle;
|
||||
pam4.result_db = result_db;
|
||||
M = 6;
|
||||
if M == 2
|
||||
file_codes = {'20250221T035221' '20250221T035354' '20250221T035824' '20250221T035931' '20250221T040035' '20250221T040132' '20250221T040226' '20250221T040523' '20250221T040646' '20250221T040723' '20250221T040843' '20250221T041011' '20250221T041101' '20250221T041244'};
|
||||
elseif M == 4
|
||||
file_codes = {'20250221T030844' '20250221T032043' '20250221T032312' '20250221T032424' '20250221T032529' '20250221T032632' '20250221T032800' '20250221T033035' '20250221T033138' '20250221T033246' '20250221T033425' '20250221T033527' '20250221T033642' '20250221T033743' '20250221T033851' '20250221T034314' '20250221T034529' '20250221T034647' '20250221T034756' '20250221T034915'};
|
||||
elseif M == 6
|
||||
file_codes = {'20250221T041445' '20250221T041512' '20250221T041539' '20250221T041607' '20250221T041633' '20250221T041702' '20250221T041729' '20250221T041758' '20250221T041825' '20250221T041854' '20250221T041922' '20250221T041951' '20250221T042019' '20250221T042048' '20250221T042117' '20250221T042147' '20250221T042215'};
|
||||
elseif M ==8
|
||||
file_codes = {"20250221T004651",... %96
|
||||
"20250221T004926",...
|
||||
"20250221T005844",...
|
||||
"20250221T010032",...
|
||||
"20250221T010150",...
|
||||
"20250221T025505",...%144 ohne balun
|
||||
"20250221T024629",...%152 ohne balun
|
||||
"20250221T024315",...%160 ohne balun
|
||||
"20250221T023534",...%168 ohne balun
|
||||
"20250221T024929",...%172 ohne balun
|
||||
"20250221T025305",...%176 ohne balun
|
||||
};
|
||||
file_codes = {"20250221T024256"};
|
||||
baudrate = [96,112,120,128,136,144,152,160,168,172,176];
|
||||
file_codes = {'20250221T004926' '20250221T023534' '20250221T024256' '20250221T024629' '20250221T024929' '20250221T025305' '20250221T025505' '20250221T025856' '20250221T030122' '20250221T030311' '20250221T030513'};
|
||||
end
|
||||
|
||||
if 1
|
||||
|
||||
if 0
|
||||
uloops = struct;
|
||||
uloops.filecode = file_codes;
|
||||
uloops.mu_dc = [0];
|
||||
uloops.vnle_order1 = [50];
|
||||
uloops.vnle_order2 = [5];
|
||||
uloops.vnle_order3 = [5];
|
||||
wh = DataStorage(uloops);
|
||||
wh.addStorage("ber");
|
||||
|
||||
wh = submit_handle(@dsp_ief_file,wh,"parallel",0);
|
||||
|
||||
wh = submit_handle(@dsp_ief_file,wh,"parallel",1);
|
||||
end
|
||||
|
||||
if 0
|
||||
% Bring figure(5) to focus
|
||||
fig = figure(2);
|
||||
|
||||
% Get handles to all line objects in the figure
|
||||
lines = findobj(fig, 'Type', 'line');
|
||||
|
||||
% Preallocate cell arrays to store the data for each line
|
||||
xData = cell(numel(lines),1);
|
||||
yData = cell(numel(lines),1);
|
||||
|
||||
% Loop through each line and extract its data
|
||||
|
||||
for k = 1:numel(lines)
|
||||
xData{k} = get(lines(k), 'XData');
|
||||
yData{k} = get(lines(k), 'YData');
|
||||
end
|
||||
|
||||
ief.M2.baudr_new = xData{4};
|
||||
ief.M2.ngmi_new = yData{4};
|
||||
|
||||
ief.M4.baudr_new = xData{3};
|
||||
ief.M4.ngmi_new = yData{3};
|
||||
|
||||
ief.M6.baudr_new = xData{2};
|
||||
ief.M6.ngmi_new = yData{2};
|
||||
|
||||
ief.M8.baudr_new = xData{1};
|
||||
ief.M8.ngmi_new = yData{1};
|
||||
|
||||
ief.M2.ber_new = yData{4};
|
||||
ief.M4.ber_new = yData{3};
|
||||
ief.M6.ber_new = yData{2};
|
||||
ief.M8.ber_new = yData{1};
|
||||
|
||||
pam2_baudr = xData{4};
|
||||
pam2_ber = yData{4};
|
||||
pam2_ngmi = yData{4};
|
||||
|
||||
pam4_baudr = xData{3};
|
||||
pam4_ber = yData{3};
|
||||
pam4_ngmi = yData{3};
|
||||
|
||||
pam6_baudr = xData{2};
|
||||
pam6_ber = yData{2};
|
||||
pam6_ngmi = yData{2};
|
||||
|
||||
pam8_baudr = xData{1};
|
||||
pam8_ber = yData{1};
|
||||
pam8_ngmi = yData{1};
|
||||
|
||||
pam2_baudr_lowdsp = xData{4};
|
||||
pam2_ber_lowdsp = yData{4};
|
||||
pam2_ngmi_lowdsp = yData{4};
|
||||
|
||||
pam4_baudr_lowdsp = xData{3};
|
||||
pam4_ber_lowdsp = yData{3};
|
||||
pam4_ngmi_lowdsp = yData{3};
|
||||
|
||||
pam6_baudr_lowdsp = xData{2};
|
||||
pam6_ber_lowdsp = yData{2};
|
||||
pam6_ngmi_lowdsp = yData{2};
|
||||
|
||||
pam8_baudr_lowdsp = xData{1};
|
||||
pam8_ber_lowdsp = yData{1};
|
||||
pam8_ngmi_lowdsp = yData{1};
|
||||
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
a = wh.getStoValue('ber',uloops.filecode, uloops.mu_ffe1);
|
||||
close all
|
||||
figure(1)
|
||||
cnt = 1;
|
||||
for M = [2,4,6,8]
|
||||
% for i = 1:numel(uloops.vnle_order2)
|
||||
% for j = 1:numel(uloops.vnle_order3)
|
||||
wh = eval(sprintf('wh_pam%d',M));
|
||||
a =wh.getStoValue('ber',wh.parameter.filecode.values, wh.parameter.vnle_order1.values, wh.parameter.vnle_order2.values,wh.parameter.vnle_order3.values);
|
||||
% a =wh_mit_1001.getStoValue('ber',uloops.filecode, wh_mit_1001.parameter.vnle_order1.values, wh_mit_1001.parameter.vnle_order2.values,wh_mit_1001.parameter.vnle_order3.values);
|
||||
baudrate = cell2mat(cellfun(@(a) a.config.fsym, a, 'UniformOutput', false));
|
||||
[baudrate, idx] = sort(baudrate);
|
||||
|
||||
% get best results per baudrate
|
||||
ber_vnle_values = cellfun(@(a) cellfun(@(y) y.ber_vnle, a.vnle_package, 'UniformOutput', false), a, 'UniformOutput', false);
|
||||
best_vnle = cellfun(@(x) min(cell2mat(x)), ber_vnle_values);
|
||||
% get best results per baudrate
|
||||
vnle = 0;
|
||||
try
|
||||
ber_vnle_values = cellfun(@(a) cellfun(@(y) y.ber_vnle, a.vnle_package, 'UniformOutput', false), a, 'UniformOutput', false);
|
||||
ber_vnle_infrate = cellfun(@(a) cellfun(@(y) y.inf_rate_vnle, a.vnle_package, 'UniformOutput', false), a, 'UniformOutput', false);
|
||||
|
||||
% ber_vnle_values = cellfun(@(a) cellfun(@(y) y.ber_vnle, a.vnle_pf_package, 'UniformOutput', false), a, 'UniformOutput', false);
|
||||
% best_vnle = cellfun(@(x) min(cell2mat(x)), ber_vnle_values);
|
||||
%
|
||||
% ber_mlse_values = cellfun(@(a) cellfun(@(y) y.ber_mlse, a.vnle_pf_package, 'UniformOutput', false), a, 'UniformOutput', false);
|
||||
% best_mlse = cellfun(@(x) min(cell2mat(x)), ber_mlse_values);
|
||||
best_vnle = cellfun(@(x) min(cell2mat(x)), ber_vnle_values);
|
||||
best_vnle = best_vnle(idx);
|
||||
best_gmi_vnle = cellfun(@(x) min(cell2mat(x)), ber_vnle_infrate);
|
||||
best_gmi_vnle = best_gmi_vnle(idx);
|
||||
|
||||
%%% PLOT PARAMETER OPTIMIZATION
|
||||
figure(2)
|
||||
cols = cbrewer2('Set1',6);
|
||||
hold on
|
||||
title(sprintf('%d km | %d nm | PAM %d',1,1313.5,M));
|
||||
xax = uloops.mu_ffe1;
|
||||
plot(xax,best_vnle,'DisplayName',sprintf('VNLE 50,3,3'),'Color',cols(o,:),'LineStyle','-','HandleVisibility','on');
|
||||
% netRateVNLE = TransmissionPerformance().calculateNetRate(log2(M)*baudrate,'NGMI',best_gmi_vnle./log2(M), 'BER',best_vnle);
|
||||
|
||||
% plot(xax,best_mlse,'DisplayName',sprintf('VNLE + 1 tap post-filter + MLSE'),'Color',cols(2,:),'LineStyle','-','HandleVisibility','on');
|
||||
vnle = 1;
|
||||
end
|
||||
|
||||
% plot(xax,best_db,'DisplayName',sprintf('DB tgt. + MLSE'),'Color',cols(3,:),'LineStyle','-','HandleVisibility','on');
|
||||
mlse = 0;
|
||||
try
|
||||
ber_vnle_values = cellfun(@(a) cellfun(@(y) y.ber_vnle, a.vnle_pf_package, 'UniformOutput', false), a, 'UniformOutput', false);
|
||||
best_vnle_2 = cellfun(@(x) min(cell2mat(x)), ber_vnle_values);
|
||||
best_vnle_2 = best_vnle_2(idx);
|
||||
|
||||
set(gca, 'YScale', 'log');
|
||||
ylim([5e-5 0.3]);
|
||||
xlim([min(xax), max(xax) ]);
|
||||
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||
legend
|
||||
beautifyBERplot()
|
||||
xlabel('Adaption speed');
|
||||
ylabel('BER');
|
||||
gmi_vnle_values = cellfun(@(a) cellfun(@(y) y.gmi, a.vnle_pf_package, 'UniformOutput', false), a, 'UniformOutput', false);
|
||||
best_gmi_vnle = cellfun(@(x) min(cell2mat(x)), gmi_vnle_values);
|
||||
best_gmi_vnle = best_gmi_vnle(idx);
|
||||
|
||||
ber_mlse_values = cellfun(@(a) cellfun(@(y) y.ber_mlse, a.vnle_pf_package, 'UniformOutput', false), a, 'UniformOutput', false);
|
||||
best_mlse = cellfun(@(x) min(cell2mat(x)), ber_mlse_values);
|
||||
best_mlse = best_mlse(idx);
|
||||
|
||||
if M == 8
|
||||
best_vnle_2(2) = [];
|
||||
best_mlse(2) = [];
|
||||
best_gmi_vnle(2) = [];
|
||||
best_db(2) = [];
|
||||
|
||||
baudrate(2) = [];
|
||||
elseif M == 4
|
||||
|
||||
end
|
||||
|
||||
mlse = 1;
|
||||
end
|
||||
|
||||
db = 0;
|
||||
try
|
||||
ber_db_values = cellfun(@(a) cellfun(@(y) y.ber, a.dbtgt_package, 'UniformOutput', false), a, 'UniformOutput', false);
|
||||
best_db = cellfun(@(x) min(cell2mat(x)), ber_db_values);
|
||||
best_db = best_db(idx);
|
||||
if M == 4
|
||||
best_db(end-1:end) = [];
|
||||
baudrate(end-1:end) = [];
|
||||
end
|
||||
|
||||
db = 1;
|
||||
end
|
||||
|
||||
%% BER PLOT
|
||||
|
||||
% figure(1)
|
||||
subplot(1,2,1)
|
||||
cols = cbrewer2('Set1',6);
|
||||
hold on
|
||||
title(sprintf('BER'));
|
||||
% title(sprintf('%d 1st order',uloops.vnle_order1(i)));
|
||||
xax = baudrate.*1e-9;
|
||||
|
||||
if M == 4 || M == 2
|
||||
plot(xax,best_db,'DisplayName',sprintf('PAM %d | DB+MLSE',M),'Color',cols(M/2,:),'LineStyle',':','HandleVisibility','on','Marker','o','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
plot(ief.(sprintf('M%d', M)).baudr_new,ief.(sprintf('M%d', M)).ber_new,'DisplayName',sprintf('PAM %d |VNLE',M),'Color',cols(M/2,:),'LineStyle','-','HandleVisibility','on','Marker','square','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
elseif M == 6
|
||||
plot(xax,best_vnle_2,'DisplayName',sprintf('PAM %d |VNLE',M),'Color',cols(M/2,:),'LineStyle','-','HandleVisibility','on','Marker','square','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
|
||||
% plot(ief.(sprintf('M%d', M)).baudr_new,ief.(sprintf('M%d', M)).ber_new,'DisplayName',sprintf('PAM %d |VNLE',M),'Color',cols(M/2,:),'LineStyle','-','HandleVisibility','on','Marker','square','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
|
||||
else
|
||||
% plot(xax,best_vnle_2,'DisplayName',sprintf('PAM %d |VNLE',M),'Color',cols(M/2,:),'LineStyle','-','HandleVisibility','on','Marker','square','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
|
||||
plot(ief.(sprintf('M%d', M)).baudr_new,ief.(sprintf('M%d', M)).ber_new,'DisplayName',sprintf('PAM %d |VNLE',M),'Color',cols(M/2,:),'LineStyle','-','HandleVisibility','on','Marker','square','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
end
|
||||
|
||||
if 0
|
||||
if vnle
|
||||
plot(xax,best_vnle,'DisplayName',sprintf('VNLE'),'Color',cols(2,:),'LineStyle','-','HandleVisibility','on');
|
||||
end
|
||||
if mlse
|
||||
plot(xax,best_vnle_2,'DisplayName',sprintf('VNLE'),'Color',cols(2,:),'LineStyle','-','HandleVisibility','on');
|
||||
plot(xax,best_mlse,'DisplayName',sprintf('VNLE + 1 tap post-filter + MLSE'),'Color',cols(3,:),'LineStyle','-','HandleVisibility','on');
|
||||
end
|
||||
if db
|
||||
plot(xax,best_db,'DisplayName',sprintf('DB tgt. + MLSE'),'Color',cols(1,:),'LineStyle','-','HandleVisibility','on');
|
||||
end
|
||||
|
||||
plot(ief.(sprintf('M%d', M)).baudr,ief.(sprintf('M%d', M)).ber,'DisplayName',sprintf('VNLE [100,15,15] (ETH)'),'Color',cols(4,:),'LineStyle','-','HandleVisibility','on');
|
||||
plot(ief.(sprintf('M%d', M)).baudr_lowdsp,ief.(sprintf('M%d', M)).ber_lowdsp,'DisplayName',sprintf('VNLE [100,15,15] (ETH)'),'Color',cols(4,:),'LineStyle','-','HandleVisibility','on');
|
||||
end
|
||||
|
||||
set(gca, 'YScale', 'log');
|
||||
ylim([1e-6 0.3]);
|
||||
xlim([92, 260 ]);
|
||||
xticks([0:16:280]);
|
||||
yline([4.85e-3, 2e-2],'HandleVisibility','off');
|
||||
% legend
|
||||
% beautifyBERplot()
|
||||
xlabel('baudrate in GBd');
|
||||
ylabel('BER');
|
||||
set(findall(gca, '-property', 'Interpreter'), 'Interpreter', 'latex');
|
||||
|
||||
set(gcf, 'Color', 'w');
|
||||
set(gca, 'Box', 'on', 'LineWidth', 0.8); % Thicker border
|
||||
grid on;
|
||||
set(gca, 'FontSize', 10, 'FontName', 'Times New Roman');
|
||||
%
|
||||
|
||||
%% NGMI PLOT
|
||||
|
||||
% figure(2)
|
||||
% cols = cbrewer2('Set1',6);
|
||||
% hold on
|
||||
% title(sprintf('%d km ; %.1f nm ; PAM %d',1,1313,M));
|
||||
% xax = baudrate.*1e-9;
|
||||
%
|
||||
% plot(xax,best_gmi_vnle./log2(M),'DisplayName',sprintf('NGMI VNLE'),'Color',cols(2,:),'LineStyle','-','HandleVisibility','on');
|
||||
%
|
||||
% plot(ief.(sprintf('M%d', M)).baudr,ief.(sprintf('M%d', M)).ngmi,'DisplayName',sprintf('VNLE [100,15,15] (ETH)'),'Color',cols(4,:),'LineStyle','-','HandleVisibility','on');
|
||||
% plot(ief.(sprintf('M%d', M)).baudr_lowdsp,ief.(sprintf('M%d', M)).ngmi_lowdsp,'DisplayName',sprintf('VNLE [100,15,15] (ETH)'),'Color',cols(4,:),'LineStyle','-','HandleVisibility','on');
|
||||
%
|
||||
% set(gca, 'YScale', 'log');
|
||||
% ylim([0.7 1]);
|
||||
% xlim([min(xax), max(xax) ]);
|
||||
% xticks(xax);
|
||||
% yline([0.8],'HandleVisibility','off');
|
||||
% legend
|
||||
% beautifyBERplot()
|
||||
% xlabel('Baudrate in GBd');
|
||||
% ylabel('NGMI');
|
||||
|
||||
%% AIR Plot
|
||||
% subplot(1,3,2)
|
||||
%
|
||||
% netRateMLSE = TransmissionPerformance().calculateNetRate(log2(M)*baudrate,'BER',best_mlse);
|
||||
% netRateVNLE = TransmissionPerformance().calculateNetRate(log2(M)*baudrate,'NGMI',best_gmi_vnle./log2(M), 'BER',best_vnle_2);
|
||||
% netRateDB = TransmissionPerformance().calculateNetRate(log2(M)*baudrate,'BER',best_db);
|
||||
%
|
||||
% netRateIEF = TransmissionPerformance().calculateNetRate(log2(M)*ief.(sprintf('M%d', M)).baudr,'BER',ief.(sprintf('M%d', M)).ber,'NGMI',ief.(sprintf('M%d', M)).ngmi);
|
||||
% netRateIEF_lowdsp = TransmissionPerformance().calculateNetRate(log2(M)*ief.(sprintf('M%d', M)).baudr_lowdsp,'BER',ief.(sprintf('M%d', M)).ber_lowdsp,'NGMI',ief.(sprintf('M%d', M)).ngmi_lowdsp);
|
||||
%
|
||||
% cols = cbrewer2('Set1',8);
|
||||
% hold on
|
||||
% title(sprintf('AIR'));
|
||||
% xax = baudrate.*1e-9;
|
||||
%
|
||||
% if M == 2 || M == 4
|
||||
%
|
||||
% % plot(xax,netRateMLSE.HD.NetRate.*1e-9,'DisplayName',sprintf('MLSE - HD'),'Color',cols(1,:),'LineStyle',':','HandleVisibility','on');
|
||||
% % plot(xax,netRateVNLE.SDHD.NetRate.*1e-9,'DisplayName',sprintf('VNLE SD+HD'),'Color',cols(4,:),'LineStyle','-','HandleVisibility','on');
|
||||
% plot(xax,netRateDB.HD.NetRate.*1e-9,'DisplayName',sprintf('PAM %d | DB+MLSE HD',M),'Color',cols(M/2,:),'LineStyle','-','HandleVisibility','on');
|
||||
% plot(xax,netRateDB.O_FEC.NetRate.*1e-9,'DisplayName',sprintf('PAM %d | DB+MLSE O-FEC',M),'Color',cols(M/2,:),'LineStyle',':','HandleVisibility','on');
|
||||
% % plot(xax,netRateDB.KP4_hamming.NetRate.*1e-9,'DisplayName',sprintf('PAM %d | DB+MLSE KP4-FEC',M),'Color',cols(M/2,:),'LineStyle','-','HandleVisibility','on');
|
||||
%
|
||||
% else
|
||||
%
|
||||
% % plot(xax,netRateMLSE.HD.NetRate.*1e-9,'DisplayName',sprintf('MLSE - HD'),'Color',cols(1,:),'LineStyle',':','HandleVisibility','on');
|
||||
% % plot(xax,netRateVNLE.SDHD.NetRate.*1e-9,'DisplayName',sprintf('VNLE SD+HD'),'Color',cols(4,:),'LineStyle','-','HandleVisibility','on');
|
||||
% % plot(ief.(sprintf('M%d', M)).baudr,netRateIEF.HD.NetRate,'DisplayName',sprintf('PAM %d | HD IEF',M),'Color',cols(M/2,:),'LineStyle',':','HandleVisibility','on');
|
||||
% plot(ief.(sprintf('M%d', M)).baudr,netRateIEF.SDHD.NetRate,'DisplayName',sprintf('PAM %d | SD+HD IEF',M),'Color',cols(M/2,:),'LineStyle','-','HandleVisibility','on');
|
||||
%
|
||||
% end
|
||||
% set(gca, 'YScale', 'log');
|
||||
% ylim([92 450]);
|
||||
% xlim([min(xax), max(xax) ]);
|
||||
% xlim([92, 260 ]);
|
||||
% xticks([0:16:280]);
|
||||
% yline([0.8],'HandleVisibility','off');
|
||||
% legend
|
||||
% beautifyBERplot()
|
||||
% xlabel('Baudrate in GBd');
|
||||
% ylabel('Net Rate in Gbps');
|
||||
%
|
||||
%
|
||||
|
||||
|
||||
%% NDR PLOT
|
||||
|
||||
%%% PLOT COMPLETE BAUDRATE
|
||||
figure(20)
|
||||
cols = cbrewer2('Set1',6);
|
||||
hold on
|
||||
title(sprintf('%d km | %d nm | PAM %d',1,1313.5,M));
|
||||
subplot(1,2,2)
|
||||
netRateIEF = TransmissionPerformance().calculateNetRate(log2(M)*ief.(sprintf('M%d', M)).baudr,'BER',ief.(sprintf('M%d', M)).ber,'NGMI',ief.(sprintf('M%d', M)).ngmi);
|
||||
netRateIEF_lowdsp = TransmissionPerformance().calculateNetRate(log2(M)*ief.(sprintf('M%d', M)).baudr_lowdsp,'BER',ief.(sprintf('M%d', M)).ber_lowdsp,'NGMI',ief.(sprintf('M%d', M)).ngmi_lowdsp);
|
||||
netRateIEF_new = TransmissionPerformance().calculateNetRate(log2(M)*ief.(sprintf('M%d', M)).baudr_new,'BER',ief.(sprintf('M%d', M)).ber_new,'NGMI',ief.(sprintf('M%d', M)).ngmi_new);
|
||||
|
||||
plot(baudrate,best_vnle,'DisplayName',sprintf('VNLE'),'Color',cols(1,:),'LineStyle','-','HandleVisibility','on');
|
||||
|
||||
plot(baudrate,best_mlse,'DisplayName',sprintf('VNLE + 1 tap post-filter + MLSE'),'Color',cols(2,:),'LineStyle','-','HandleVisibility','on');
|
||||
cols = cbrewer2('Set1',8);
|
||||
hold on
|
||||
title(sprintf('Net Bitrate'));
|
||||
xax = baudrate.*1e-9;
|
||||
|
||||
plot(baudrate,best_db,'DisplayName',sprintf('DB tgt. + MLSE'),'Color',cols(3,:),'LineStyle','-','HandleVisibility','on');
|
||||
if M == 2 || M == 4
|
||||
|
||||
set(gca, 'YScale', 'log');
|
||||
ylim([5e-5 0.3]);
|
||||
xlim([min(baudrate), max(baudrate) ]);
|
||||
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||
legend
|
||||
beautifyBERplot()
|
||||
xlabel('Bit Rate in Gbps');
|
||||
ylabel('BER');
|
||||
log2M = log2(M);
|
||||
|
||||
netRateDB = TransmissionPerformance().calculateNetRate(log2(M)*baudrate,'BER',best_db);
|
||||
|
||||
% plot(xax,netRateMLSE.HD.NetRate.*1e-9,'DisplayName',sprintf('MLSE - HD'),'Color',cols(1,:),'LineStyle',':','HandleVisibility','on');
|
||||
% plot(xax,netRateVNLE.SDHD.NetRate.*1e-9,'DisplayName',sprintf('VNLE SD+HD'),'Color',cols(4,:),'LineStyle','-','HandleVisibility','on');
|
||||
plot(xax,netRateDB.HD.NetRate.*1e-9,'DisplayName',sprintf('PAM %d | DB+MLSE HD',M),'Color',cols(M/2,:),'LineStyle',':','HandleVisibility','on','Marker','square','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
|
||||
plot(xax,netRateDB.O_FEC.NetRate.*1e-9,'DisplayName',sprintf('PAM %d | DB+MLSE O-FEC',M),'Color',cols(M/2,:),'LineStyle','-.','HandleVisibility','on','Marker','x','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
% plot(xax,netRateDB.KP4_hamming.NetRate.*1e-9,'DisplayName',sprintf('PAM %d | DB+MLSE KP4-FEC',M),'Color',cols(M/2,:),'LineStyle','-','HandleVisibility','on','Marker','*','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
|
||||
plot(ief.(sprintf('M%d', M)).baudr_new,netRateIEF_new.SDHD.NetRate,'DisplayName',sprintf('PAM %d | SD+HD',M),'Color',cols(M/2,:),'LineStyle','-','HandleVisibility','on','Marker','o','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
|
||||
plot(ief.(sprintf('M%d', M)).baudr_new,ief.(sprintf('M%d', M)).ngmi_new.*ief.(sprintf('M%d', M)).baudr_new.*log2M ,'DisplayName',sprintf('PAM %d | AIR',M),'Color',cols(M/2,:),'LineStyle','-','HandleVisibility','on','Marker','o','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
|
||||
|
||||
elseif M == 6
|
||||
|
||||
log2M = 2.5;
|
||||
netRateMLSE = TransmissionPerformance().calculateNetRate(log2(M)*baudrate,'BER',best_mlse);
|
||||
netRateVNLE = TransmissionPerformance().calculateNetRate(log2(M)*baudrate,'NGMI',best_gmi_vnle./log2(M), 'BER',best_vnle_2);
|
||||
|
||||
plot(xax,netRateVNLE.HD.NetRate.*1e-9,'DisplayName',sprintf('MLSE - HD'),'Color',cols(M/2,:),'LineStyle',':','HandleVisibility','on','Marker','square','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
plot(xax,netRateVNLE.SDHD.NetRate.*1e-9,'DisplayName',sprintf('VNLE SD+HD'),'Color',cols(M/2,:),'LineStyle','-','HandleVisibility','on','Marker','o','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
|
||||
% plot(ief.(sprintf('M%d', M)).baudr_new,netRateIEF_new.HD.NetRate,'DisplayName',sprintf('PAM %d | HD IEF',M),'Color',cols(M/2,:),'LineStyle',':','HandleVisibility','on','Marker','square','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
% plot(ief.(sprintf('M%d', M)).baudr_new,netRateIEF_new.SDHD.NetRate,'DisplayName',sprintf('PAM %d | SD+HD IEF',M),'Color',cols(M/2,:),'LineStyle','-','HandleVisibility','on','Marker','o','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
|
||||
|
||||
else
|
||||
|
||||
log2M = log2(M);
|
||||
|
||||
netRateMLSE = TransmissionPerformance().calculateNetRate(log2(M)*baudrate,'BER',best_mlse);
|
||||
netRateVNLE = TransmissionPerformance().calculateNetRate(log2(M)*baudrate,'NGMI',best_gmi_vnle./log2(M), 'BER',best_vnle_2);
|
||||
|
||||
% plot(xax,netRateVNLE.HD.NetRate.*1e-9,'DisplayName',sprintf('MLSE - HD'),'Color',cols(M/2,:),'LineStyle',':','HandleVisibility','on','Marker','square','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
% plot(xax,netRateVNLE.SDHD.NetRate.*1e-9,'DisplayName',sprintf('VNLE SD+HD'),'Color',cols(M/2,:),'LineStyle','-','HandleVisibility','on','Marker','o','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
|
||||
plot(ief.(sprintf('M%d', M)).baudr_new,netRateIEF_new.HD.NetRate,'DisplayName',sprintf('PAM %d | HD IEF',M),'Color',cols(M/2,:),'LineStyle',':','HandleVisibility','on','Marker','square','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
plot(ief.(sprintf('M%d', M)).baudr_new,netRateIEF_new.SDHD.NetRate,'DisplayName',sprintf('PAM %d | SD+HD IEF',M),'Color',cols(M/2,:),'LineStyle','-','HandleVisibility','on','Marker','o','MarkerFaceColor',[1,1,1],'MarkerEdgeColor',cols(M/2,:),'MarkerSize',4,'LineWidth',1.4);
|
||||
|
||||
end
|
||||
set(gca, 'YScale', 'log');
|
||||
ylim([150 450]);
|
||||
xlim([min(xax), max(xax) ]);
|
||||
xlim([92, 270 ]);
|
||||
xticks([0:16:280]);
|
||||
yline([0.8],'HandleVisibility','off');
|
||||
% legend
|
||||
|
||||
xlabel('Baudrate in GBd');
|
||||
ylabel('Net Rate in Gbps');
|
||||
set(findall(gca, '-property', 'Interpreter'), 'Interpreter', 'latex');
|
||||
|
||||
set(gcf, 'Color', 'w');
|
||||
set(gca, 'Box', 'on', 'LineWidth', 0.8); % Thicker border
|
||||
grid on;
|
||||
set(gca, 'FontSize', 10, 'FontName', 'Times New Roman');
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user