filename = "Z:\2024\sioe\High Speed Messungen Oktober\bias_5km\PAMX_5km_20241025_204334_wh.mat"; a = load(filename); wh = a.obj; v_bias_vals = wh.parameter.vbias.values; awg_vpp_vals = wh.parameter.awg_vpp.values; precomp_amp_max_vals = wh.parameter.precomp_amp_max.values; rop_atten_vals = wh.parameter.rop_atten.values; lambda_vals = wh.parameter.lambda.values; M_vals = wh.parameter.M.values; fsym_vals = [168e9, 144e9, 120e9]; ber_ffe = []; ber_mlse = []; rop_measured = []; pd_in_measured = []; rop_measured = []; cnt = 0; figure(252) clf hold on cols = cbrewer2('Set1',3); for l = 1:numel(lambda_vals) figure() for m = 1:numel(M_vals) ber_ffe = wh.getStoValue('ber_ffe',v_bias_vals,awg_vpp_vals(1),precomp_amp_max_vals(1),rop_atten_vals(1),M_vals(m),lambda_vals(l)); ber = wh.getStoValue('ber_ffe',v_bias_vals,awg_vpp_vals(1),precomp_amp_max_vals(1),rop_atten_vals(1),M_vals(m),lambda_vals(l)); exfo = wh.getStoValue('exfo',v_bias_vals,awg_vpp_vals(1),precomp_amp_max_vals(1),rop_atten_vals(1),M_vals(m),lambda_vals(l)); lb = wh.getStoValue('exfo',v_bias_vals,awg_vpp_vals(1),precomp_amp_max_vals(1),rop_atten_vals(1),M_vals(m),lambda_vals(l)); for e = 1:numel(exfo) laser_pow(e) = exfo{e}.cur_power; end rop_measured = wh.getStoValue('rop',v_bias_vals,awg_vpp_vals(1),precomp_amp_max_vals(1),rop_atten_vals(1),M_vals(m),lambda_vals(l)); pd_in_measured(l,m,:) = wh.getStoValue('pd_in',v_bias_vals,awg_vpp_vals(1),precomp_amp_max_vals(1),rop_atten_vals(1),M_vals(m),lambda_vals(l)); rx_logbook = wh.getStoValue('rx_logbook',v_bias_vals(1),awg_vpp_vals(1),precomp_amp_max_vals(1),rop_atten_vals(1),M_vals(1),lambda_vals(1)); hold on a = scatter(v_bias_vals,min(ber,[],2),40,'LineWidth',2,'Marker','.','DisplayName',['PAM ',num2str(M_vals(m))],'MarkerEdgeColor',cols(m,:)); title([num2str(lambda_vals(l)),'nm']) a.DataTipTemplate.DataTipRows(1).Label = 'Vbias'; a.DataTipTemplate.DataTipRows(2).Label = 'BER'; a.DataTipTemplate.DataTipRows(2).Format ='%.1e'; a.DataTipTemplate.DataTipRows(3).Label = 'P_{out}'; a.DataTipTemplate.DataTipRows(3).Value = rop_measured; a.DataTipTemplate.DataTipRows(3).Format = ['auto']; a.DataTipTemplate.DataTipRows(4).Label = 'Baudr'; a.DataTipTemplate.DataTipRows(4).Value = repmat(fsym_vals(m).*1e-9,size(ber_ffe)); a.DataTipTemplate.DataTipRows(4).Format = ['%d',' GBd']; a.DataTipTemplate.DataTipRows(5).Label = 'L_{out}'; a.DataTipTemplate.DataTipRows(5).Value = laser_pow; a.DataTipTemplate.DataTipRows(5).Format = ['auto']; % Polynomial fit (e.g., second-order polynomial) [woutliers,n] = rmoutliers( min(ber,[],2) ); p = polyfit( v_bias_vals(~n), log10(woutliers), 3); % Adjust order as needed BER_fit = polyval(p, v_bias_vals); % Plot the fitted curve plot(v_bias_vals, 10.^(BER_fit), '-r', 'LineWidth', 1.5,'Color',cols(m,:),'HandleVisibility','off'); % Continue with the rest of your plot settings yline(3.8e-3, 'DisplayName', 'HD-FEC', 'LineStyle', '--', 'HandleVisibility', 'off'); xlabel('Bias Voltage'); ylabel('Bit Error Rate (BER)'); sgtitle('Bit Error Rate vs. ROP'); set(gca, 'yscale', 'log'); set(gca, 'Box', 'on'); grid on; grid minor; legend('Interpreter', 'none'); ylim([1e-3,0.5]); xlim([-16, -2]); ylim([1e-3,0.5]); xlim([min(v_bias_vals) max(v_bias_vals)]); end end %% filename = "Z:\2024\sioe\High Speed Messungen Oktober\bias_testing_and_b2b\PAM4_b2b_bias_sweep_20241023_191202_wh_BB_BIAS_FINAL.mat"; a = load(filename); wh = a.obj; v_bias_vals = wh.parameter.vbias.values; awg_vpp_vals = wh.parameter.awg_vpp.values; precomp_amp_max_vals = wh.parameter.precomp_amp_max.values; rop_atten_vals = wh.parameter.rop_atten.values; M_vals = wh.parameter.M.values; ber_ffe = []; ber_mlse = []; rop_measured = []; pd_in_measured = []; figure(2024) for i = 1:3 ber_ffe(i,:) = wh.getStoValue('ber_ffe',v_bias_vals,awg_vpp_vals(1),precomp_amp_max_vals(1),rop_atten_vals(1),M_vals(i)); rop_measured(i,:) = wh.getStoValue('rop',v_bias_vals,awg_vpp_vals(1),precomp_amp_max_vals(1),rop_atten_vals(1),M_vals(i)); [bestber,bestindex] = min(ber_ffe(i,:),[],'all'); [awg_pos,v_bias_pos]=ind2sub(size(ber_ffe(i,:)),bestindex); bestawgvpp=awg_vpp_vals(awg_pos); bestvbias=v_bias_vals(v_bias_pos); disp(['Best Vpp: ',num2str(bestvbias),' V; Best Vpp AWG: ',num2str(bestawgvpp),' V' ]); % Polynomial fit (e.g., second-order polynomial) [woutliers,n] = rmoutliers( ber_ffe(i,:) ); p = polyfit( v_bias_vals(~n), log10(woutliers), 8); % Adjust order as needed BER_fit = polyval(p, v_bias_vals); % Plot the fitted curve plot(v_bias_vals, 10.^(BER_fit), '-r', 'LineWidth', 1.5,'Color',cols(i,:),'HandleVisibility','off'); hold on a = scatter(v_bias_vals,ber_ffe(i,:),'Marker','+','DisplayName',['PAM ',num2str(wh.parameter.M.values(i))],'MarkerEdgeColor',cols(i,:)); a.DataTipTemplate.DataTipRows(1).Label = 'Vbias'; a.DataTipTemplate.DataTipRows(2).Label = 'BER'; a.DataTipTemplate.DataTipRows(2).Format ='%.1e'; a.DataTipTemplate.DataTipRows(3).Label = 'P_{out}'; a.DataTipTemplate.DataTipRows(3).Value = rop_measured(i,:); a.DataTipTemplate.DataTipRows(3).Format = 'auto'; end % Continue with the rest of your plot settings yline(3.8e-3, 'DisplayName', 'HD-FEC', 'LineStyle', '--', 'HandleVisibility', 'off'); xlabel('Bias Voltage'); ylabel('Bit Error Rate (BER)'); title('Bit Error Rate vs. ROP | MI->DO | B2B'); set(gca, 'yscale', 'log'); set(gca, 'Box', 'on'); grid on; grid minor; legend('Interpreter', 'none'); ylim([1e-4,0.5]); xlim([1.6 3.2]);