minimal examplw
This commit is contained in:
@@ -13,17 +13,22 @@ fp.where('Runs','pam_level','EQUALS', 4);
|
||||
fp.where('Runs','rop_attenuation','EQUALS', 0);
|
||||
fp.where('Runs','is_mpi','EQUALS', 0);
|
||||
fp.where('Runs', 'db_mode','EQUALS', 0);
|
||||
fields = db.getTableFieldNames('Runs');
|
||||
% fields = db.getTableFieldNames('Runs');
|
||||
% [dataTable,~] = db.queryDB(fp, fields);
|
||||
fields = db.getTableFieldNames('power_state_info');
|
||||
fields = [fields; db.getTableFieldNames('Runs')];
|
||||
fields = [fields; db.getTableFieldNames('dashboard_ungrouped_alltime')]; %dashboard_ungrouped_after_nov_2025 dashboard_ungrouped_aug_nov_2025
|
||||
fields = unique(fields);
|
||||
[dataTable,~] = db.queryDB(fp, fields);
|
||||
|
||||
|
||||
fsym = dataTable.symbolrate;
|
||||
M = double(dataTable.pam_level);
|
||||
duob_mode = db_mode(strrep(dataTable.db_mode,'"',''));
|
||||
fsym = dataTable(1,:).symbolrate;
|
||||
M = double(dataTable(1,:).pam_level);
|
||||
duob_mode = db_mode(strrep(dataTable(1,:).db_mode,'"',''));
|
||||
|
||||
|
||||
% Load and Sync signal data from DB
|
||||
[Tx_bits, Symbols, Scpe_cell, ~] = loadAndSyncSignalDataFromDb(dataTable, dsp_options);
|
||||
[Tx_bits, Symbols, Scpe_cell, ~] = loadAndSyncSignalDataFromDb(dataTable(1,:), dsp_options);
|
||||
|
||||
% Preprocess signal
|
||||
Scpe_sig = preprocessSignal(Scpe_cell{1}, Symbols, fsym);
|
||||
@@ -31,6 +36,40 @@ Scpe_sig = preprocessSignal(Scpe_cell{1}, Symbols, fsym);
|
||||
% Show spectrum
|
||||
Scpe_sig.spectrum("fignum",1,"displayname",'Rx')
|
||||
|
||||
% meta = struct();
|
||||
% meta.varnames = dataTable.Properties.VariableNames;
|
||||
%
|
||||
% for k = 1:numel(meta.varnames)
|
||||
% v = meta.varnames{k};
|
||||
% col = dataTable.(v);
|
||||
%
|
||||
% if isnumeric(col) || islogical(col)
|
||||
% meta.(v) = col;
|
||||
% elseif isstring(col)
|
||||
% meta.(v) = cellstr(col);
|
||||
% elseif iscellstr(col)
|
||||
% meta.(v) = col;
|
||||
% else
|
||||
% error("Unsupported table column type: %s", class(col))
|
||||
% end
|
||||
% end
|
||||
% exp_data.metadata = meta;
|
||||
|
||||
exp_data = struct();
|
||||
exp_data.metadata = dataTable;
|
||||
exp_data.tx_bits = Tx_bits.signal;
|
||||
exp_data.tx_signal = Symbols.signal;
|
||||
exp_data.rx_signal_2sps = Scpe_sig.signal;
|
||||
|
||||
fname = dataTable(1,:).rx_raw_path;
|
||||
[~, filename, ext] = fileparts(fname);
|
||||
filename = strrep(filename,"_raw_signal","");
|
||||
filename = filename + ext;
|
||||
savepath = fullfile('F:\2024\sioe_labor\export_skuehl\',filename);
|
||||
save(savepath,'exp_data','-v7.3');
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,127 +0,0 @@
|
||||
% 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
|
||||
@@ -1,54 +0,0 @@
|
||||
laser = Exfo_laser("mainframe_channel",1,"safety_mode",0,"connection_id",'10','lab_interface','gpib');
|
||||
laser.getLaserInfo();
|
||||
|
||||
pm = OptPowerMeter8153A("active",[0,1],"wavelength_nm",[1550,start_wavelength]);
|
||||
pm.readPower
|
||||
|
||||
laserparams.lambda = [1260:2:1360];
|
||||
laserparams.laserpower = [0,3,6,8,10];
|
||||
laser_output_wh = DataStorage(laserparams);
|
||||
laser_output_wh.addStorage("plaser");
|
||||
|
||||
pm = OptPowerMeter8153A("active",[0,1],"wavelength_nm",[1550,1310]);
|
||||
laser.setWavelength(1310);
|
||||
|
||||
cw_pwr = NaN(numel(laserparams.laserpower),numel(laserparams.lambda));
|
||||
row = 1;
|
||||
for p = laserparams.laserpower
|
||||
laser.setPower(p);
|
||||
cnt = 1;
|
||||
for w = laserparams.lambda
|
||||
laser.setWavelength(w);
|
||||
pm.setWavelength([1550,w]);
|
||||
|
||||
for i = 1:20
|
||||
[totalpower]=pm.readPower;
|
||||
cw_measurement(i)=totalpower(2)+10;
|
||||
cw_pwr(row,cnt) = mean(cw_measurement);
|
||||
pause(3);
|
||||
end
|
||||
|
||||
laser_output_wh.addValueToStorage(cw_measurement,'plaser',w,p);
|
||||
|
||||
figure(2027);clf
|
||||
plot(laserparams.lambda,cw_pwr(1:row,:),'Marker','*');
|
||||
xlabel('Wavelength [nm]');
|
||||
ylabel('Laser Output Power [dBm]');
|
||||
ylim([0, 11]);
|
||||
xlim([laserparams.lambda(1) laserparams.lambda(end)])
|
||||
grid minor
|
||||
|
||||
cnt = cnt+1;
|
||||
end
|
||||
row = row+1;
|
||||
end
|
||||
|
||||
figure();hold on
|
||||
for p = laserparams.laserpower
|
||||
plot(laserparams.lambda,laser_output_wh.getStoValue('plaser',laserparams.lambda,p))
|
||||
end
|
||||
xlabel('Wavelength [nm]');
|
||||
ylabel('Laser Output Power [dBm]');
|
||||
ylim([0, 11]);
|
||||
xlim([laserparams.lambda(1) laserparams.lambda(end)])
|
||||
grid minor
|
||||
Reference in New Issue
Block a user