updates from lab pc during ecoc sprint
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
|
||||
|
||||
savePath = 'Z:\2025\ECOC Silas\ecoc_2025\';
|
||||
|
||||
fullFolderPath = fullfile(savePath, current_folder);
|
||||
if ~exist(fullFolderPath, 'dir')
|
||||
mkdir(fullFolderPath);
|
||||
@@ -19,19 +17,19 @@ referenceFields = fieldnames(db.tables.Configurations);
|
||||
|
||||
assert(isequal(fieldnames(conf), referenceFields), 'Fieldnames do not match the reference structure!');
|
||||
|
||||
|
||||
%% Lab Automation
|
||||
|
||||
if run_lab_automation
|
||||
|
||||
% DC Source
|
||||
if confPrev.v_bias ~= conf.v_bias
|
||||
if (any(confPrev.v_bias ~= conf.v_bias)) || (~exist('dcs','var')) || (isempty(confPrev.v_bias))
|
||||
dcs = DC_supply("active",[1,1],"voltage",[conf.v_bias, 5]);
|
||||
dcs.set("voltage",[conf.v_bias, 5]);
|
||||
[v_bias_meas,i_bias_meas]=dcs.readVals();
|
||||
end
|
||||
% Laser
|
||||
if confPrev.laser_power ~= conf.laser_power
|
||||
|
||||
if (any(confPrev.laser_power ~= conf.laser_power)) || (~exist('laser','var')) || (isempty(confPrev.laser_power))
|
||||
laser = Exfo_laser("mainframe_channel",1,"safety_mode",0,"connection_id",'10','lab_interface','gpib');
|
||||
laser.setWavelength(conf.wavelength);
|
||||
laser.setPower(conf.laser_power);
|
||||
@@ -39,16 +37,24 @@ if run_lab_automation
|
||||
end
|
||||
|
||||
% Optical Attenuator
|
||||
voa = OptAtten("active",[0,2,1,1],"value",[0,conf.pd_in_desired,conf.signal_attenuation,conf.interference_attenuation],"wavelength",[conf.wavelength,conf.wavelength,conf.wavelength,conf.wavelength]);
|
||||
if ~exist('voa','var')
|
||||
voa = OptAtten("active",[1,2,1,1],"value",[0,conf.pd_in_desired,conf.signal_attenuation,conf.interference_attenuation],"wavelength",[conf.wavelength,conf.wavelength,conf.wavelength,conf.wavelength]);
|
||||
end
|
||||
voa.set('value',[0,conf.pd_in_desired,conf.signal_attenuation,conf.interference_attenuation]);
|
||||
|
||||
if voa.power_state(3) > -24 || voa.power_state(1)+ voa.atten_state(4) > -38
|
||||
holdAndShowValue
|
||||
end
|
||||
|
||||
% PDFA
|
||||
pdfa = Thor_PDFA("safety_mode",0,"serialport_number",'COM15');
|
||||
if ~exist('pdfa','var')
|
||||
pdfa = Thor_PDFA("safety_mode",0,"serialport_number",'COM15');
|
||||
end
|
||||
|
||||
% Construct AWG and Scope Modules %%%%%%
|
||||
fdac = 224e9;
|
||||
fadc = 160e9;
|
||||
Scp = ScopeKeysight("model","DSAZ634A",'autoscale',1,"fadc","GSa_160","channel",[0,0,1,0],"recordLen",5000000,"removeDC",1,"extRef",1);
|
||||
Scp = ScopeKeysight("model","DSAZ634A",'autoscale',0,"fadc","GSa_160","channel",[0,0,1,0],"recordLen",recordlen,"removeDC",1,"extRef",1);
|
||||
Awg = AwgKeysight("model","M8199A_ILV","fdac",fdac,"scaletodac",[1,1],"skews",[0,0],"voltages",[0,conf.v_awg]);
|
||||
A2S = Awg2Scope(Awg,Scp,[0,0,3,0],"waitUntilClick",0);
|
||||
|
||||
@@ -56,12 +62,16 @@ end
|
||||
|
||||
|
||||
%% Signal generation and transmission
|
||||
if 0% awg_upload_required || isempty(loop_id)
|
||||
if awg_upload_required || isempty(loop_id)
|
||||
%%%%% Symbol Generation %%%%%%
|
||||
Pform = Pulseformer("fsym",conf.symbolrate,"fdac",8*conf.symbolrate,"pulse","rc","pulselength",16,"alpha",conf.pulsef_alpha);
|
||||
|
||||
|
||||
if conf.symbolrate < 64e9
|
||||
sequence_order = min(18,sequence_order);
|
||||
end
|
||||
|
||||
Pamsource = PAMsource(...
|
||||
"fsym",conf.symbolrate,"M",conf.pam_level,"order",19,"useprbs",1,...
|
||||
"fsym",conf.symbolrate,"M",conf.pam_level,"order",sequence_order,"useprbs",1,...
|
||||
"fs_out",fdac,...
|
||||
"applyclipping",0,...
|
||||
"clipfactor",4,...
|
||||
@@ -69,13 +79,13 @@ if 0% awg_upload_required || isempty(loop_id)
|
||||
"pulseformer",Pform,...
|
||||
"randkey",1,...
|
||||
"duobinary_mode", conf.db_mode);
|
||||
|
||||
|
||||
conf.pam_source = Pamsource;
|
||||
confPrev = conf;
|
||||
|
||||
|
||||
[Digi_sig,Symbols,Bits] = Pamsource.process();
|
||||
|
||||
|
||||
|
||||
|
||||
%%%%% Precompensation Routine %%%%%%
|
||||
if precomp_mode == 1 % measure channel
|
||||
precomp_est = ChannelFreqResp("Nacq",2048,"Navg",100,"Ncp",63,'f_ref',fdac);
|
||||
@@ -84,12 +94,12 @@ if 0% awg_upload_required || isempty(loop_id)
|
||||
precomp_est = ChannelFreqResp("Nacq",2048,"Navg",100,"Ncp",63,'f_ref',Digi_sig.fs);
|
||||
Digi_sig = precomp_est.precomp(Digi_sig,'maxampdb',conf.precomp_amp,'loadPath',precomp_path,'fileName',precomp_fn);
|
||||
end
|
||||
|
||||
|
||||
% Digi_sig.spectrum("displayname",'Tx Spectrum','fignum',10,'normalizeTo0dB',0);
|
||||
|
||||
|
||||
%%%%% Resample to DAC rate %%%%%%
|
||||
Digi_sig = Digi_sig.resample("fs_out",Awg.fdac);
|
||||
|
||||
|
||||
% [~,~,Scpe_sig_raw,~] = A2S.process("signal2",Digi_sig);
|
||||
|
||||
Awg.upload("signal2",Digi_sig);
|
||||
@@ -104,7 +114,6 @@ if precomp_mode == 1
|
||||
return; % End routine if precomp mode is active
|
||||
end
|
||||
|
||||
|
||||
%% Save static TX data (only once)
|
||||
currentTime = datetime('now', 'Format', 'yyyyMMdd_HHmmss');
|
||||
timeStr = char(currentTime);
|
||||
@@ -119,8 +128,6 @@ save([savePath, tx_symbols_path], "Symbols");
|
||||
tx_signal_path = [filesep, current_folder, filesep, base_filename, '_signal'];
|
||||
save([savePath, tx_signal_path], "Digi_sig");
|
||||
|
||||
n_recording = 2; % Or any number you want
|
||||
|
||||
for recIdx = 1:n_recording
|
||||
fprintf('Recording %d / %d\n', recIdx, n_recording);
|
||||
|
||||
@@ -167,7 +174,7 @@ for recIdx = 1:n_recording
|
||||
newRun.date_of_run = datetime(currentTime, 'InputFormat', 'yyyyMMdd_HHmmss');
|
||||
newRun.tx_bits_path = tx_bits_path;
|
||||
newRun.tx_symbols_path = tx_symbols_path;
|
||||
newRun.rx_sync_path = []; % Leave empty for now
|
||||
newRun.rx_sync_path = ""; % Leave empty for now
|
||||
newRun.rx_raw_path = rx_raw_path;
|
||||
newRun.filename = filename;
|
||||
newRun.tx_signal_path = tx_signal_path;
|
||||
@@ -197,10 +204,12 @@ for recIdx = 1:n_recording
|
||||
|
||||
db.appendToTable('Measurements', meas);
|
||||
|
||||
%% Submit DSP Routine
|
||||
|
||||
% [out, ~] = submit_dsp(run_id, basePath, database_name, savePath, ...
|
||||
% "parallel", parallel_dsp, "max_occurences", max_occurences);
|
||||
|
||||
%% Submit DSP Routine
|
||||
|
||||
if subimt_DSP
|
||||
[out, a] = submit_dsp(run_id, databasePath, database_name, savePath, ...
|
||||
"parallel", parallel_dsp, "max_occurences", max_occurences);
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user