measurement state
This commit is contained in:
@@ -1,41 +1,125 @@
|
||||
|
||||
% filename = "C:\Users\sioe\Documents\High_Speed_Measurement_2024\bias_testing\PAM4_b2b_bias_sweep_20241023_130342_wh.mat";
|
||||
%
|
||||
% a = load(filename);
|
||||
% wh = a.obj;
|
||||
filename = "C:\Users\sioe\Documents\High_Speed_Measurement_2024\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;
|
||||
PAM = wh.parameter.M.values(1);
|
||||
lambda_vals = wh.parameter.lambda.values;
|
||||
M_vals = wh.parameter.M.values;
|
||||
fsym_vals = [168e9, 144e9, 120e9];
|
||||
|
||||
m = wh.getStoValue('m',v_bias_vals(1),awg_vpp_vals(1),precomp_amp_max_vals(1),rop_atten_vals(1),PAM);
|
||||
|
||||
|
||||
|
||||
ber_ffe= [];
|
||||
ber_mlse= [];
|
||||
rop_measured= [];
|
||||
pd_in_measured= [];
|
||||
ber_ffe = [];
|
||||
ber_mlse = [];
|
||||
rop_measured = [];
|
||||
pd_in_measured = [];
|
||||
|
||||
rop_measured = [];
|
||||
cnt = 0;
|
||||
for PAM = wh.parameter.M.values
|
||||
cnt = cnt+1;
|
||||
ber_ffe(cnt,:) = wh.getStoValue('ber_ffe',v_bias_vals,awg_vpp_vals(1),precomp_amp_max_vals(1),rop_atten_vals(1),PAM)';
|
||||
ber_mlse(cnt,:) = wh.getStoValue('ber_mlse',v_bias_vals,awg_vpp_vals(1),precomp_amp_max_vals(1),rop_atten_vals(1),PAM);
|
||||
rop_measured(cnt,:) = wh.getStoValue('rop',v_bias_vals,awg_vpp_vals(1),precomp_amp_max_vals(1),rop_atten_vals(1),PAM);
|
||||
pd_in_measured(cnt,:) = wh.getStoValue('pd_in',v_bias_vals,awg_vpp_vals(1),precomp_amp_max_vals(1),rop_atten_vals(1),PAM);
|
||||
|
||||
figure(252)
|
||||
clf
|
||||
hold on
|
||||
cols = cbrewer2('Set1',3);
|
||||
for l = 1:numel(lambda_vals)
|
||||
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_collect',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));
|
||||
|
||||
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));
|
||||
|
||||
|
||||
subplot(1,3,l)
|
||||
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), 4); % 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 = "C:\Users\sioe\Documents\High_Speed_Measurement_2024\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);
|
||||
@@ -43,24 +127,35 @@ for i = 1:3
|
||||
|
||||
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(rop_measured(i,:),ber_ffe(i,:),'Marker','+','DisplayName',['PAM ',num2str(wh.parameter.M.values(i))]);
|
||||
a.DataTipTemplate.DataTipRows(1).Label = 'P_{out}';
|
||||
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 = 'Vbias';
|
||||
a.DataTipTemplate.DataTipRows(3).Value = v_bias_vals;
|
||||
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('Measured MZM Output Power (dBm)');
|
||||
xlabel('Bias Voltage');
|
||||
ylabel('Bit Error Rate (BER)');
|
||||
title('Bit Error Rate vs. ROP');
|
||||
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]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user