366 lines
18 KiB
Matlab
366 lines
18 KiB
Matlab
|
|
M = 4;
|
|
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 = {'20250221T004926' '20250221T023534' '20250221T024256' '20250221T024629' '20250221T024929' '20250221T025305' '20250221T025505' '20250221T025856' '20250221T030122' '20250221T030311' '20250221T030513'};
|
|
end
|
|
|
|
if 1
|
|
uloops = struct;
|
|
uloops.filecode = file_codes;
|
|
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);
|
|
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
|
|
|
|
|
|
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
|
|
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);
|
|
|
|
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);
|
|
|
|
% netRateVNLE = TransmissionPerformance().calculateNetRate(log2(M)*baudrate,'NGMI',best_gmi_vnle./log2(M), 'BER',best_vnle);
|
|
|
|
vnle = 1;
|
|
end
|
|
|
|
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);
|
|
|
|
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
|
|
|
|
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);
|
|
|
|
|
|
cols = cbrewer2('Set1',8);
|
|
hold on
|
|
title(sprintf('Net Bitrate'));
|
|
xax = baudrate.*1e-9;
|
|
|
|
if M == 2 || M == 4
|
|
|
|
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 |