111 lines
3.4 KiB
Matlab
111 lines
3.4 KiB
Matlab
% Silas Amplifier characterization
|
|
|
|
laser = Exfo_laser("mainframe_channel",1,"safety_mode",0,"connection_id",'10','lab_interface','gpib');
|
|
laser.getLaserInfo();
|
|
laser.disableLaser;
|
|
laser.setWavelength(1310);
|
|
laser.enableLaser;
|
|
|
|
pdfa = Thor_PDFA();
|
|
%%
|
|
params.laserpower = [-30,-20,-10,0];
|
|
params.lambda = [1310]; %calcWavelengthPlan(16, 400e9 , 1310);
|
|
params.pump = [0:5:100];
|
|
|
|
wh = DataStorage(params);
|
|
wh.addStorage("spectrum_osa");
|
|
wh.addStorage("wavelength_osa");
|
|
wh.addStorage("psig_osa");
|
|
wh.addStorage("pase_osa");
|
|
wh.addStorage("osnr_osa");
|
|
wh.addStorage("amp_gain");
|
|
wh.addStorage("psig_total");
|
|
|
|
cols = linspecer(numel(params.laserpower));
|
|
ccnt = 0;
|
|
for p = params.laserpower
|
|
ccnt=ccnt+1;
|
|
laser.setWavelength(params.lambda(1));
|
|
usrcmd = sprintf('Laser to %d dBm',p);
|
|
waitUntilClick('Text',usrcmd);
|
|
|
|
|
|
for w = params.lambda
|
|
laser.setWavelength(w)
|
|
% pm.setWavelength([1550, w]);
|
|
span_nm = 5;
|
|
lambda_c_nm = w;
|
|
osa = OSA_Advantest( ...
|
|
'span_nm', 40, ...
|
|
'lambda_c_nm', w, ...
|
|
'resolution_nm', 0.1, ...
|
|
'sampling_points', 1001 );
|
|
osa.configure();
|
|
|
|
|
|
for pmp = params.pump
|
|
% pdfa.setPumpLevel(pmp);
|
|
usrcmd = sprintf('Amp to %d %',pmp);
|
|
waitUntilClick('Text',usrcmd);
|
|
|
|
% OSA
|
|
[lambda_nm, psd_dBm] = osa.measure();
|
|
osnr = osa.computeOSNR('bw_signal_nm',0.01,'ref_bw_nm',0.1,'debugplots',0,...
|
|
'carrier_frequency',w,'noise_guard_nm',1,'noise_window_nm',1);
|
|
|
|
osa.plot("FigureNumber",abs(p)+10,"Color",cols(ccnt,:));
|
|
xlabel('Wavelength [nm]');
|
|
ylabel('Opt. Spectrum [dBm]');
|
|
grid minor
|
|
|
|
% Powermeter
|
|
totalpower=10*log10(sum(10.^(psd_dBm./10)));
|
|
% [totalpower]=pm.readPower;
|
|
% totalpower=totalpower(2) + 20; %20dB attenuation with eigenlight to satisfy 3dB max of PMeter
|
|
|
|
wh.addValueToStorage(lambda_nm,'wavelength_osa',p,w,pmp);
|
|
wh.addValueToStorage(psd_dBm,'spectrum_osa',p,w,pmp);
|
|
wh.addValueToStorage(osnr.p_ase_db,'pase_osa',p,w,pmp);
|
|
wh.addValueToStorage(osnr.p_sig_db,'psig_osa',p,w,pmp);
|
|
wh.addValueToStorage(osnr,'osnr_osa',p,w,pmp);
|
|
wh.addValueToStorage(totalpower,'psig_total',p,w,pmp);
|
|
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
%% P out
|
|
|
|
figure(3);hold on
|
|
for p = [-30:10:0]
|
|
|
|
psig_osa = wh.getStoValue('psig_osa',p,params.lambda,params.pump);
|
|
pl=plot(params.pump,psig_osa,'DisplayName',sprintf('P_{signal}: %d dB ',p));
|
|
|
|
psig_total = wh.getStoValue('psig_total',p,params.lambda,params.pump);
|
|
plot(params.pump,psig_total,'DisplayName',sprintf('P_{total}: %d dB ',p),'LineStyle','--','Color',pl.Color);
|
|
|
|
pase = wh.getStoValue('pase_osa',p,params.lambda,params.pump);
|
|
plot(params.pump,pase,'DisplayName',sprintf('P_{ASE}: %d dB ',p),'LineStyle',':','Color',pl.Color);
|
|
|
|
|
|
end
|
|
legend
|
|
|
|
|
|
|
|
%% Gain
|
|
|
|
figure(4);hold on
|
|
for p = [-30:10:0]
|
|
|
|
% Die -2dB sind Korrekturfaktor aus dem Setup! Gilt für PDFA und SOA
|
|
psig_osa = wh.getStoValue('psig_osa',p,params.lambda,params.pump);
|
|
pl=plot(params.pump,psig_osa-(p-2),'DisplayName',sprintf('Gain: %d dB ',p));
|
|
|
|
psig_total = wh.getStoValue('psig_total',p,params.lambda,params.pump);
|
|
pl=plot(params.pump,psig_total-(p-2),'DisplayName',sprintf('Gain: %d dB ',p),'Color',pl.Color,'LineStyle','--');
|
|
|
|
end
|
|
legend |