% === DSP settings === dsp_options.database_type = "mysql"; dsp_options.dataBase = "labor"; dsp_options.server = "192.168.178.192"; dsp_options.port = 3306; dsp_options.user = "silas"; dsp_options.password = "silas"; db = DBHandler("dataBase", dsp_options.dataBase, "type", dsp_options.database_type, ... "server", dsp_options.server, "port", dsp_options.port, ... "user", dsp_options.user, "password", dsp_options.password); %% fp = QueryFilter(); fp.where('Runs','run_id','GREATER_EQUAL',3153); % fp.where('Runs', 'symbolrate', 'EQUALS', 112e9); fp.where('Runs', 'fiber_length', 'EQUALS', 0); % fp.where('Runs', 'interference_path_length', 'EQUALS', 300); % fp.where('Runs', 'sir', 'EQUALS', 23); fp.where('Runs', 'db_mode', 'EQUALS', '"no_db"'); % fp.where('Runs', 'is_mpi', 'EQUALS', 1); % fp.where('Runs', 'pam_level', 'EQUALS', 4); % fp.where('Runs', 'v_bias', 'EQUALS', 2.65); [dataTable,~] = db.queryDB(fp, db.getTableFieldNames('mpi_superview')); dataTable_save = dataTable; %% % No compensation method dataTable = dataTable(dataTable.dc_buffer_len == 1, :); dataTable = dataTable(dataTable.ffe_buffer_len == 1, :); dataTable = dataTable(dataTable.smoothing_buffer_len == 0, :); dataTable = dataTable(dataTable.smoothing_buffer_update == 0, :); dataTable = dataTable(dataTable.DCmu == 0, :); % BER over SIR plotTable = sortrows(dataTable, 'sir'); validBer = ~isnan(plotTable.sir) & ~isnan(plotTable.BER) & plotTable.BER > 0 & plotTable.BER < 0.1; figure; hold on; scatter(plotTable.sir(validBer), plotTable.BER(validBer), 36, ... 'filled', ... 'DisplayName', 'BER'); xlabel('SIR [dB]'); ylabel('BER'); title(sprintf('BER over SIR (%d filtered rows)', height(dataTable))); legend('Location', 'best'); beautifyBERplot("setcolors", true, "setmarkers", true,"logscale",true,"polyfit",false); %% % Any Value over SIR varname = 'BER'; groupvar = 'pam_level'; requiredCols = {'sir', varname, groupvar}; missingCols = setdiff(requiredCols, dataTable.Properties.VariableNames); if ~isempty(missingCols) error('Missing required column(s) for grouped plot: %s', strjoin(missingCols, ', ')); end plotTable = sortrows(dataTable, 'sir'); validline = ~isnan(plotTable.sir) ... & ~isnan(plotTable.(varname)) ... & ~isnan(plotTable.(groupvar));% & plotTable.BER > 0 & plotTable.BER < 0.1; groupValues = unique(plotTable.(groupvar)(validline)); figure; hold on; for groupIdx = 1:numel(groupValues) currentGroup = groupValues(groupIdx); groupRows = validline & plotTable.(groupvar) == currentGroup; scatter(plotTable.sir(groupRows), plotTable.(varname)(groupRows), 36, ... 'filled', ... 'DisplayName', sprintf('PAM %g', currentGroup)); end xlabel('SIR [dB]'); ylabel(varname); title(sprintf('%s over SIR grouped by %s (%d filtered rows)', varname, groupvar, height(dataTable))); legend('Location', 'best'); beautifyBERplot("setcolors", true, "setmarkers", true,"logscale",true,"polyfit",false);