% 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; % pm = OptPowerMeter8153A("active",[0,1],"wavelength_nm",[1550,1310]); % pm.readPower % pdfa = Thor_PDFA(); %% params.laserpower = [-30,-20,-10,0]; params.lambda = [1260:5:1360]; %calcWavelengthPlan(16, 400e9 , 1310); params.pump = [50,75,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 pmp = params.pump % pdfa.setPumpLevel(pmp); usrcmd = sprintf('Amp to %d mA',2*pmp); 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(); % 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",pmp+1,"Color",cols(ccnt,:)); xlabel('Wavelength [nm]'); ylabel('Opt. Spectrum [dBm]'); xlim([params.lambda(1)-5 params.lambda(end)+5]) 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 % before tuning all the way back to 1270nm set PDFA off % pdfa.setPumpLevel(0); % pdfa.disablePDFA; end %% OSNR figure(2);hold on for p = [-30:10:0] pmp = 100; osnr = wh.getStoValue('osnr_osa',p,params.lambda,pmp); osnr_measured_dB = cellfun(@(x) x.measured_dB, osnr); osnr_direct_dB = cellfun(@(x) x.direct_dB, osnr); plot(params.lambda,osnr_direct_dB,'DisplayName',sprintf('P_{in}: %d dB ',p)); end legend %% P out figure(3);hold on for p = [-30:10:0] pmp = 100; psig_osa = wh.getStoValue('psig_osa',p,params.lambda,pmp)+3; pl=plot(params.lambda,psig_osa,'DisplayName',sprintf('P_{signal}: %d dB ',p)); psig_powermeter = wh.getStoValue('psig_total',p,params.lambda,pmp)+3; plot(params.lambda,psig_powermeter,'DisplayName',sprintf('P_{total}: %d dB ',p),'LineStyle','--','Color',pl.Color); yline(p,'Color',pl.Color,'DisplayName',sprintf('P_{total}: %d dB ',p)); end legend %% GAIN figure(3);hold on for p = [-30:10:0] pmp = 50; psig_osa = wh.getStoValue('psig_osa',p,params.lambda,pmp); % psig_powermeter = wh.getStoValue('psig_powermeter',p,params.lambda,pmp); g = psig_osa-p; pl=plot(params.lambda,g,'DisplayName',sprintf('P_{in}: %d dB ',p)); end legend