stuff
This commit is contained in:
@@ -4,70 +4,77 @@ dsp_options.storage_path = 'Z:\2024\sioe_labor\';
|
||||
dsp_options.max_occurences = 1;
|
||||
db = DBHandler("dataBase", 'labor_highspeed', "type", 'mysql' );
|
||||
|
||||
fp = QueryFilter();
|
||||
|
||||
fp.where('Runs','fiber_length','EQUALS', 2);
|
||||
fp.where('Runs','wavelength','EQUALS', 1310);
|
||||
fp.where('Runs','bitrate','EQUALS', 300e9);
|
||||
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');
|
||||
% [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(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(1,:), dsp_options);
|
||||
|
||||
% Preprocess signal
|
||||
Scpe_sig = preprocessSignal(Scpe_cell{1}, Symbols, fsym);
|
||||
|
||||
% Show spectrum
|
||||
Scpe_sig.spectrum("fignum",1,"displayname",'Rx')
|
||||
|
||||
% meta = struct();
|
||||
% meta.varnames = dataTable.Properties.VariableNames;
|
||||
% fp = QueryFilter();
|
||||
%
|
||||
% for k = 1:numel(meta.varnames)
|
||||
% v = meta.varnames{k};
|
||||
% col = dataTable.(v);
|
||||
% fp.where('Runs','fiber_length','EQUALS', 2);
|
||||
% fp.where('Runs','wavelength','EQUALS', 1310);
|
||||
% fp.where('Runs','bitrate','EQUALS', 300e9);
|
||||
% 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');
|
||||
% % [dataTable,~] = db.queryDB(fp, fields);
|
||||
%
|
||||
% 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;
|
||||
run_ids = [ 993 1205 1413 1623 1833 2043 2253 2628 2836 2958 3000 3042 3323 5098 5225 5267 5309];
|
||||
|
||||
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');
|
||||
for id = run_ids
|
||||
|
||||
fp = QueryFilter();
|
||||
fp.where('Runs', 'run_id','EQUALS', id);
|
||||
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(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(1,:), dsp_options);
|
||||
|
||||
% Preprocess signal
|
||||
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');
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ Smlse = cell(1,N);
|
||||
Sdbt = cell(1,N);
|
||||
|
||||
% Choose your quantile band. For your old style, use 0.04/0.99:
|
||||
qLow = 0.0; % lower quantile (e.g., 0.04 for old script)
|
||||
qLow = 0.0; % lower quantile (e.g.,s 0.04 for old script)
|
||||
qHigh = 1; % upper quantile (e.g., 0.99 for old script)
|
||||
cols = linspecer(N); % one color per wavelength (Ch)
|
||||
cols = cbrewer2('set1',N);
|
||||
@@ -51,10 +51,10 @@ for l = 1:N
|
||||
showLegend = 1; % one legend entry per technique
|
||||
|
||||
% Plot shaded band + mean line with boundedline
|
||||
% plotBandMeanBL(rop, ffe_mat, cols(l,:), sprintf('FFE @ %.1d nm',round(wavelengthplan(l))), qLow, qHigh, '--s', showLegend);
|
||||
plotBandMeanBL(rop, ffe_mat, cols(l,:), sprintf('FFE @ %.1d nm',round(wavelengthplan(l))), qLow, qHigh, '--s', showLegend);
|
||||
% scatter(Sffe,fec.*ones(size(Sffe)),20,'v','MarkerFaceColor','black');
|
||||
|
||||
plotBandMeanBL(rop, vnle_mat, cols(l,:), sprintf('VNLE @ %.1d nm',round(wavelengthplan(l))), qLow, qHigh, '--x', showLegend);
|
||||
% plotBandMeanBL(rop, vnle_mat, cols(l,:), sprintf('VNLE @ %.1d nm',round(wavelengthplan(l))), qLow, qHigh, '--x', showLegend);
|
||||
|
||||
% plotBandMeanBL(rop, mlse_mat, cols(l,:), sprintf('VNLE+PF+MLSE @ %.1d nm',round(wavelengthplan(l))), qLow, qHigh, '-o', showLegend);
|
||||
|
||||
@@ -73,7 +73,7 @@ ylim([1e-5 0.3]);
|
||||
grid on;
|
||||
legend show;
|
||||
|
||||
|
||||
%%
|
||||
S_cell = Sdbt;
|
||||
S_cell =Smlse;
|
||||
S_cell = {Svnle,Smlse,Sdbt};
|
||||
@@ -106,7 +106,7 @@ for i = 1:length(S_cell)
|
||||
'Bandwidth', 0.05);
|
||||
|
||||
ylim([floor(min(S_mat,[],'all')), ceil(max(S_mat,[],'all'))])
|
||||
ylim([-8 0]);
|
||||
% ylim([-8 0]);
|
||||
ylabel('ROP at FEC crossing');
|
||||
title(sprintf('RROP to cross BER %.2e', fec));
|
||||
grid on; box on;
|
||||
@@ -118,10 +118,6 @@ end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
%% ================= helper =================
|
||||
function plotBandMeanBL(x, Y, color, techLabel, qLow, qHigh, lineSpec, showLegend)
|
||||
% Y: (nPoints x nRealizations)
|
||||
|
||||
@@ -6,9 +6,9 @@ run(fullfile(fileparts(mfilename('fullpath')),'WDM_settings.m'));
|
||||
s.num_realiz = 2;
|
||||
s.wavelengthplan = calcWavelengthPlan(16,400e9,1310);
|
||||
% wavelengthplan = [1295,1305,1315,1325];
|
||||
link_length = 0;
|
||||
pmd = 0.1;
|
||||
gamma = 0.0023;
|
||||
link_length = 1;
|
||||
s.pmd = 0.1;
|
||||
s.gamma = 0.0023;
|
||||
|
||||
s.M = 4;
|
||||
m = floor(log2(s.M)*10)/10;
|
||||
@@ -52,7 +52,7 @@ f_plan = physconst('lightspeed')./(s.wavelengthplan.*1e-9);
|
||||
margin = 25e12; % some THz left and right
|
||||
f_span = (max(f_plan)+margin)-(min(f_plan)-margin);
|
||||
f_nyq = f_span/2;
|
||||
kover = 8;
|
||||
kover = 4;
|
||||
upsample_required = f_nyq./(fdac*kover/2);
|
||||
upsample_pow = 2^nextpow2(upsample_required);
|
||||
upsample_ceil = ceil(upsample_required);
|
||||
@@ -64,13 +64,23 @@ signal_cell = {};
|
||||
Symbols = {};
|
||||
Tx_bits = {};
|
||||
|
||||
s.rop = -6:0.75:-0.75;
|
||||
s.rop = -12:0.75:-0.75;
|
||||
|
||||
output_ffe = cell(length(s.wavelengthplan),length(s.rop),s.num_realiz);
|
||||
output_vnle = cell(length(s.wavelengthplan),length(s.rop),s.num_realiz);
|
||||
output_mlse = cell(length(s.wavelengthplan),length(s.rop),s.num_realiz);
|
||||
output_dbt = cell(length(s.wavelengthplan),length(s.rop),s.num_realiz);
|
||||
|
||||
s.p = "pair";
|
||||
switch s.p
|
||||
case "co"
|
||||
pol_rot = 100.*ones(1,length(s.wavelengthplan));
|
||||
case "pair"
|
||||
pol_rot = repmat([100,100,0,0],1,length(s.wavelengthplan)/4);
|
||||
case "alt"
|
||||
pol_rot = repmat([100,0,100,0],1,length(s.wavelengthplan)/4);
|
||||
end
|
||||
|
||||
for realiz = 1:s.num_realiz
|
||||
|
||||
|
||||
@@ -100,7 +110,7 @@ for realiz = 1:s.num_realiz
|
||||
%%%%% s.MODULATE E/O CONVERSION %%%%%
|
||||
Eml_out = EML("mode",eml_mode.im_cosinus,"power",3,"fsimu",El_sig.fs,"lambda",s.wavelengthplan(l),"bias",vbias,"u_pi",u_pi,"linewidth",laser_linewidth,"randomkey",s.random_key+l+realiz).process(El_sig);
|
||||
|
||||
signal_cell{l} = Polarization_Controller("mode","rot_power","desired_power",100).process(Eml_out);
|
||||
signal_cell{l} = Polarization_Controller("mode","rot_power","desired_power",pol_rot(l)).process(Eml_out);
|
||||
end
|
||||
|
||||
Opt_sig_wdm = Optical_Multiplex("fs_in",fdac*kover,"fs_out",upsample_pow*fdac*kover,...
|
||||
@@ -108,7 +118,7 @@ for realiz = 1:s.num_realiz
|
||||
|
||||
Opt_sig_wdm = Amplifier("amp_mode","ideal_no_noise","gain_mode","output_power","amplification_db",3+10*log10(N)).process(Opt_sig_wdm);
|
||||
|
||||
% Opt_sig_wdm.spectrum("fignum",101,"displayname",'bla','normalizeTo0dB',0,'lambda0_nm',1310,'useWavelengthAxis',0);
|
||||
Opt_sig_wdm.spectrum("fignum",101,"displayname",'bla','normalizeTo0dB',0,'lambda0_nm',1310,'useWavelengthAxis',0);
|
||||
|
||||
% Opt_sig_wdm.spectrum("fignum",101,"displayname",'bla','normalizeTo0dB',1,'max_num_lines',2);
|
||||
|
||||
@@ -123,7 +133,7 @@ for realiz = 1:s.num_realiz
|
||||
Dvec = getDispersionVector(nSegments, D_local, zdw, randomize_D, s.random_key+realiz);
|
||||
for seg = 1:nSegments
|
||||
|
||||
Opt_sig_wdm_fib = DP_Fiber("L",segment_length,"D",Dvec(s),"Dpmd",pmd,"Ds",0.07,...
|
||||
Opt_sig_wdm_fib = DP_Fiber("L",segment_length,"D",Dvec(seg),"Dpmd",s.pmd,"Ds",0.07,...
|
||||
"beat_len",10,"corr_len",100,"dz",1,"manakov",0,...
|
||||
"gamma",s.gamma,"lambda",zdw,"n_waveplates",10,"SS_dphimax",0.01,...
|
||||
"SS_dzmax",50,"SS_dzmin",10,"X_alpha",0.3,"X_beta",0,"rng",1).process(Opt_sig_wdm_fib);
|
||||
@@ -135,11 +145,11 @@ for realiz = 1:s.num_realiz
|
||||
% Opt_sig_wdm_fib.move_it_spectrum("fignum",100212,"displayname",'bla');
|
||||
|
||||
% Opt_sig = Fiber("fsimu",Opt_sig.fs,"fiber_length",s.link_length/1000,"alpha",0.3,"D",0,"lambda0",1310,"s.gamma",0,"Dslope",0.07).process(Opt_sig)
|
||||
Opt_sig_wdm_demux = Optical_Demultiplex("attenuation",0,"B",200e9,"filtype",1,"fs_out",Opt_sig_wdm_rx.fs/upsample_pow,"fs_in",Opt_sig_wdm_rx.fs,"lambda_center",1310).process(Opt_sig_wdm_fib);
|
||||
Opt_sig_wdm_demux = Optical_Demultiplex("attenuation",0,"B",200e9,"filtype",1,"fs_out",fdac*kover,"fs_in",fdac*kover*upsample_pow,"lambda_center",1310).process(Opt_sig_wdm_fib);
|
||||
|
||||
for ri = 1:length(s.rop)
|
||||
|
||||
parfor l = 1:N
|
||||
for l = 1:N
|
||||
|
||||
%%%%%% ROP %%%%%%
|
||||
Opt_sig_wdm_rx = Amplifier("amp_mode","ideal_no_noise","gain_mode","output_power","amplification_db",s.rop(ri)).process(Opt_sig_wdm_demux{l}); % rop+10*log10(N)
|
||||
|
||||
Reference in New Issue
Block a user