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; 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 = {"20250221T004651"}; baudrate = [96,112,120,128,136,144,152,160,168,172,176]; end if 1 uloops = struct; uloops.filecode = file_codes; uloops.tcorrect = [0]; wh = DataStorage(uloops); wh.addStorage("ber"); wh = submit_handle(@dsp_ief_file,wh,"parallel",0); end a = wh.getStoValue('ber',uloops.filecode, uloops.tcorrect); % 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); 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); %%% PLOT PARAMETER OPTIMIZATION figure() cols = cbrewer2('Set1',6); hold on title(sprintf('%d km | %d nm | PAM %d',1,1313.5,M)); xax = uloops.tcorrect; plot(xax,best_vnle,'DisplayName',sprintf('VNLE'),'Color',cols(1,:),'LineStyle','-','HandleVisibility','on'); plot(xax,best_mlse,'DisplayName',sprintf('VNLE + 1 tap post-filter + MLSE'),'Color',cols(2,:),'LineStyle','-','HandleVisibility','on'); % plot(xax,best_db,'DisplayName',sprintf('DB tgt. + MLSE'),'Color',cols(3,:),'LineStyle','-','HandleVisibility','on'); 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('Number 1st order taps'); ylabel('BER'); %%% PLOT COMPLETE BAUDRATE figure(20) cols = cbrewer2('Set1',6); hold on title(sprintf('%d km | %d nm | PAM %d',1,1313.5,M)); 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'); plot(baudrate,best_db,'DisplayName',sprintf('DB tgt. + MLSE'),'Color',cols(3,:),'LineStyle','-','HandleVisibility','on'); 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');