savePath = 'Z:\2025\ECOC Silas\ecoc_2025\'; databasePath = 'C:\Users\Silas\Documents\MATLAB\imdd_simulation\projects\ECOC_2025\'; database_name = 'ecoc2025_loops.db'; db = DBHandler("type","mysql"); % db = DBHandler("pathToDB", [databasePath, database_name],"type","sqlite"); filterParams = db.tables; % filterParams.Configurations = struct('run_id', run_id); filterParams.Configurations = struct( ... 'symbolrate', 112e9, ... %[224,336,360,390,420,448] 'fiber_length', 0, ... 'db_mode', '"no_db"', ... 'interference_attenuation', 4, ... 'interference_path_length', 300, ... 'is_mpi', 1, ... 'pam_level', 4, ... 'wavelength', 1310, ... 'precomp_amp', [], ... 'signal_attenuation', [], ... 'v_awg', [], ... 'v_bias', [] ... ); selectedFields = {'Runs.run_id','Runs.tx_bits_path','Runs.tx_signal_path','Runs.tx_symbols_path','Runs.rx_sync_path','Runs.rx_raw_path',... 'Configurations.db_mode','Configurations.pam_level','Configurations.bitrate','Configurations.symbolrate','Configurations.fiber_length','Configurations.wavelength','Configurations.precomp_amp','Measurements.power_rop','Configurations.v_bias',... 'Configurations.interference_attenuation', 'Measurements.power_mpi_interference'}; [dataTable,sql_query] = db.queryDB(filterParams, selectedFields); [~, uniqueIdx] = unique(dataTable.run_id); % Get unique run_id indices dataTable.SIR = -7 - round(dataTable.power_mpi_interference); %% for i = 1:size(dataTable,1) dataTable_ = dataTable(i,:); % Extract unique configurations for each run_id fsym = dataTable_.symbolrate; M = double(dataTable_.pam_level); duob_mode = db_mode.(strrep(char(dataTable_.db_mode),'"','')); Tx_signal = load([savePath, char(dataTable_.tx_signal_path)]); Tx_signal = Tx_signal.Digi_sig; Tx_bits = load([savePath, char(dataTable_.tx_bits_path)]); Tx_bits = Tx_bits.Bits; Symbols_mapped = PAMmapper(M,0).map(Tx_bits); Symbols_mapped.fs = dataTable_.symbolrate; Symbols = load([savePath, char(dataTable_.tx_symbols_path)]); Symbols = Symbols.Symbols; Scpe_sig_raw = load([savePath, char(dataTable_.rx_raw_path(1))]); Scpe_sig_raw = Scpe_sig_raw.Scpe_sig_raw; % Scpe_sig_raw.plot("displayname",['Scope Signal (Run ID: ',num2str(dataTable_.run_id)],"fignum",dataTable_.run_id,"clear",0); Scpe_sig_resampled = Scpe_sig_raw.resample("fs_in",Scpe_sig_raw.fs,"fs_out",fsym); [~,Scpe_cell,found_sync,test,shifts] = Scpe_sig_resampled.tsynch("reference",Symbols,"fs_ref",dataTable_.symbolrate,"debug_plots",0); shifts_mus = shifts./Scpe_sig_resampled.fs .*1e6; Scpe_sig_resampled = Scpe_sig_resampled.normalize("mode","rms"); % Scpe_sig_resampled.plot("displayname",['Scope Signal (Run ID: ',num2str(dataTable_.run_id)],"fignum",dataTable_.run_id,"clear",0); hold on; % xline(shifts_mus,'HandleVisibility','off'); shifts = shifts-shifts(1)+1; sep_sig = NaN(M,length(Scpe_sig_resampled)); avg_sig = NaN(M,length(Scpe_sig_resampled)); for j = 1:size(Scpe_cell,1) [sep_sig_,avg_sig_]=showLevelScatter(Scpe_cell{j}.resample("fs_out",Symbols.fs),Symbols,"fignum",400); s = shifts(j); sep_sig(:,s+1:s+length(sep_sig_)) = sep_sig_; avg_sig(:,s+1:s+length(avg_sig_)) = avg_sig_; end disp(num2str(filterParams.Configurations.interference_path_length)); var(sep_sig,0,2,'omitnan') %% xax_in_sec = ((1:length(avg_sig)) / fsym) * 1e6; figure();hold on; cols = cbrewer2('Paired',8); % for p = 1:size(avg_sig,1) % sc=scatter(xax_in_sec,sep_sig(p,:),1,'.','MarkerEdgeColor',cols((2*p)-1,:),'MarkerEdgeAlpha',0.1); % end for p = 1:size(avg_sig,1) sc=plot(xax_in_sec,avg_sig(p,:),'LineWidth',1,'Color',cols((2*p),:)); end yline(unique(Symbols.signal),'HandleVisibility','off'); % xline(shifts./ fsym .*1e6,'HandleVisibility','off'); xlabel('time in $\mu$s'); ylabel('Normalized Amplitude'); xlim([0 25]); ylim([-2 2]); drawnow; end