Many changes towards simulation of JLT and once again the evaluation of the Highspeed data from Lab experiments 2024
This commit is contained in:
@@ -0,0 +1,224 @@
|
||||
% === SETTINGS ===
|
||||
dsp_options.append_to_db = 1;
|
||||
dsp_options.max_occurences = 1;
|
||||
|
||||
experiment = "highspeed_2024";
|
||||
dsp_options.mode = "load_run_id"; % 'simulate' & 'load_files'
|
||||
dsp_options.load_file_path = struct();
|
||||
|
||||
if dsp_options.mode == "load_run_id"
|
||||
|
||||
if experiment == "highspeed_2024"
|
||||
|
||||
dsp_options.database_type = 'mysql';
|
||||
dsp_options.dataBase = 'labor_highspeed';%'C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\silas_labor_newdsp_newstructure.db';
|
||||
dsp_options.storage_path = 'Z:\2024\sioe_labor\';
|
||||
db = DBHandler("dataBase", [dsp_options.dataBase], "type", dsp_options.database_type);
|
||||
|
||||
elseif experiment == "mpi_ecoc_2025"
|
||||
|
||||
dsp_options.database_type = 'mysql';
|
||||
dsp_options.dataBase = 'labor';
|
||||
dsp_options.storage_path = 'Z:\2025\ECOC Silas\ecoc_2025\';
|
||||
db = DBHandler("dataBase", [dsp_options.dataBase], "type", dsp_options.database_type);
|
||||
|
||||
end
|
||||
|
||||
elseif dsp_options.mode == "load_files"
|
||||
|
||||
dsp_options.load_file_path.tx_bits_path = "Z:\2025\ECOC Silas\ecoc_2025\mpi_opti_1000m_pam2 4 6 8\20250417_091513_PAM_4_R_112_bits.mat"';
|
||||
dsp_options.load_file_path.tx_symbols_path = "Z:\2025\ECOC Silas\ecoc_2025\mpi_opti_1000m_pam2 4 6 8\20250417_091513_PAM_4_R_112_symbols.mat"';
|
||||
dsp_options.load_file_path.rx_raw_path = "Z:\2025\ECOC Silas\ecoc_2025\mpi_opti_1000m_pam2 4 6 8\20250417_091525_PAM_4_R_112_rec01_rx_signal_raw.mat"';
|
||||
|
||||
elseif dsp_options.mode == "simulate"
|
||||
|
||||
error('Not yet implemented')
|
||||
|
||||
end
|
||||
|
||||
% === Get Run ID's ===
|
||||
|
||||
fp = QueryFilter();
|
||||
% fp.where('Runs', 'run_id','EQUALS', 987);
|
||||
% fp.where('Runs', 'pam_level','EQUALS', 4);
|
||||
fp.where('Runs', 'bitrate','LESS_THAN', 310e9);
|
||||
fp.where('Runs', 'fiber_length','EQUALS', 1);
|
||||
fp.where('Runs', 'is_mpi','EQUALS', 0);
|
||||
% fp.where('Runs', 'interference_path_length','EQUALS', 1000);
|
||||
% fp.where('Runs', 'loop_id','GREATER_THAN', 11);
|
||||
% fp.where('Runs', 'sir','EQUALS',18);
|
||||
fp.where('Runs', 'wavelength','EQUALS', 1310);
|
||||
% fp.where('Runs', 'db_mode','EQUALS', 1);
|
||||
fp.where('Runs', 'rop_attenuation','EQUALS', 0);
|
||||
% fp.where('Runs', 'power_pd_in','GREATER_THAN', 7);
|
||||
|
||||
|
||||
[dataTable,~] = db.queryDB(fp, db.getTableFieldNames('Runs'));
|
||||
|
||||
|
||||
% Keep only the rows corresponding to the first occurrence of each 'sir' value
|
||||
% [~, unique_indices] = unique(dataTable.sir, 'first');
|
||||
% dataTable = dataTable(unique_indices, :);
|
||||
|
||||
% dataTable = dataTable(1,:);
|
||||
|
||||
% === Set LOOPS & Initialize DataStorage ===
|
||||
dsp_options.parameters = struct();
|
||||
% dsp_options.parameters.pf_ncoeffs = [1,2];%[0,logspace(-4,0,10)];
|
||||
|
||||
wh = DataStorage(dsp_options.parameters);
|
||||
wh.addStorage("ffe_package");
|
||||
wh.addStorage("mlse_package");
|
||||
wh.addStorage("vnle_package");
|
||||
wh.addStorage("dbtgt_package");
|
||||
wh.addStorage("dbenc_package");
|
||||
|
||||
% === RUN IT ===
|
||||
|
||||
[results,wh] = submitJobs(dataTable.run_id(:), dsp_options, "serial", 'wh', wh, 'waitbar', true);
|
||||
|
||||
|
||||
% wh.getStoValue('ffe_package',0.005);
|
||||
% wh.getStoValue('mlse_package',0.005);
|
||||
|
||||
% [dataTable,~] = db.queryDB(fp, [db.getTableFieldNames('Runs');db.getTableFieldNames('Results');db.getTableFieldNames('Equalizer')]);
|
||||
%
|
||||
% dataTable = cleanUpTable(dataTable);
|
||||
% wh_analyze = wh_adap;
|
||||
% % wh_analyze = wh_dcremoval_old2;
|
||||
% % wh_analyze = wh_dcremoval_old2;
|
||||
%
|
||||
% res = cell(wh_analyze.parameter.mu_dc.length,wh_analyze.parameter.dc_buffer_len.length);
|
||||
% ber_mean = zeros(wh_analyze.parameter.mu_dc.length,wh_analyze.parameter.dc_buffer_len.length);
|
||||
% for m = 1:wh_analyze.parameter.mu_dc.length
|
||||
% for b = 1:wh_analyze.parameter.dc_buffer_len.length
|
||||
% res{m,b}=wh_analyze.getStoValue("ffe_package",wh_analyze.parameter.mu_dc.values(m),wh_analyze.parameter.dc_buffer_len.values(b));
|
||||
% try
|
||||
% cells = res{m,b}{1};
|
||||
% idx = cellfun(@(c) ~isempty(c), cells);
|
||||
% ber = cellfun(@(c) c.metrics.BER, cells(idx));
|
||||
% ber_mean(m,b) = mean(ber);
|
||||
% catch
|
||||
% ber_mean(m,b) = NaN;
|
||||
% end
|
||||
% end
|
||||
% end
|
||||
%
|
||||
% figure()
|
||||
% hold on
|
||||
% ber_fix = cellfun(@(c) c.ffe_package{1}.metrics.BER, results_fix);
|
||||
% ber_adap_m2 = cellfun(@(c) c.ffe_package{1}.metrics.BER, results_adap);
|
||||
% ber_adap_method1 = cellfun(@(c) c.ffe_package{1}.metrics.BER, results);
|
||||
% plot(dataTable.sir,ber_fix,'LineWidth',1,'DisplayName',sprintf('DCt; fix mu = 0.5; p=1024'),'Marker','.','MarkerSize',10);
|
||||
% plot(dataTable.sir,ber_adap_method1,'LineWidth',1,'DisplayName',sprintf('DCt; adap mu 1; p=1024'),'Marker','.','MarkerSize',10);
|
||||
% plot(dataTable.sir,ber_adap_m2,'LineWidth',1,'DisplayName',sprintf('DCt; adap mu 2; p=1024'),'Marker','.','MarkerSize',10);
|
||||
% xlabel('BER');
|
||||
% xlabel('SIR');
|
||||
% yline([4.85e-3,2e-2],'HandleVisibility', 'off','LineWidth',1,'LineStyle','--');
|
||||
% % ylim([9e-4, 0.5]);
|
||||
% set(gca, 'YScale', 'log'); % BER is usually plotted log-scale
|
||||
% legend('show', 'Location', 'best');
|
||||
% grid on;
|
||||
%
|
||||
%
|
||||
%
|
||||
%
|
||||
% figure; clf
|
||||
%
|
||||
% % Create meshgrid for contourf
|
||||
% [X, Y] = meshgrid(dsp_options.parameters.mu_dc, dsp_options.parameters.dc_buffer_len);
|
||||
%
|
||||
% % Create contour plot
|
||||
% contourf(X, Y, ber_mean', 20); % 20 contour levels, adjust as needed
|
||||
%
|
||||
% % Set axes to logarithmic scale
|
||||
% set(gca, 'XScale', 'log', 'YScale', 'log');
|
||||
%
|
||||
% colormap("parula");
|
||||
% c = colorbar;
|
||||
% c.Label.String = 'BER';
|
||||
%
|
||||
% xlabel('\mu_{dc}');
|
||||
% ylabel('dc\_buffer\_len');
|
||||
% title('BER Optimization over \mu_{dc} and dc\_buffer\_len');
|
||||
%
|
||||
% % Make plot prettier
|
||||
% grid on
|
||||
% set(gca, 'Layer', 'top'); % Put grid lines on top of contours
|
||||
%
|
||||
%
|
||||
% % === Look at it ===
|
||||
% y_var = 'BER_precoded';
|
||||
% x_var = 'bitrate';
|
||||
% fixedVars = {'equalizer_structure', x_var};
|
||||
%
|
||||
% [dataTableClean, outliersTable] = removeGroupOutliers(dataTable, fixedVars, y_var);
|
||||
%
|
||||
% % --- Group and aggregate ---
|
||||
% dataTableGrpd_mean = groupIt(fixedVars, dataTableClean, @mean);
|
||||
% dataTableGrpd_min = groupIt(fixedVars, dataTableClean, @min);
|
||||
% dataTableGrpd_max = groupIt(fixedVars, dataTableClean, @max);
|
||||
%
|
||||
% % Choose a color map
|
||||
% cols = linspecer(numel(unique(dataTableGrpd_mean.equalizer_structure)));
|
||||
%
|
||||
% figure;
|
||||
% hold on;
|
||||
%
|
||||
% % Get unique equalizer structures for grouping
|
||||
% unique_eq = unique(dataTableGrpd_mean.equalizer_structure);
|
||||
%
|
||||
% for i = 1:numel(unique_eq)
|
||||
% eq_val = unique_eq(i);
|
||||
%
|
||||
% % Filter grouped data for this equalizer structure
|
||||
% filt = dataTableGrpd_mean.equalizer_structure == eq_val;
|
||||
%
|
||||
% x = dataTableGrpd_mean.(x_var)(filt);
|
||||
% y_mean = dataTableGrpd_mean.(y_var)(filt);
|
||||
% y_min = dataTableGrpd_min.(y_var)(filt);
|
||||
% y_max = dataTableGrpd_max.(y_var)(filt);
|
||||
%
|
||||
% % Bounds for boundedline (distance from mean)
|
||||
% y_lower = y_mean - y_min;
|
||||
% y_upper = y_max - y_mean;
|
||||
% y_bounds = [y_lower, y_upper];
|
||||
%
|
||||
% % --- Bounded line (mean ± min/max) ---
|
||||
% if exist('boundedline', 'file')
|
||||
% [hl, hp] = boundedline(x, y_mean, y_bounds, ...
|
||||
% 'alpha', 'transparency', 0.1, ...
|
||||
% 'cmap', cols(i,:), ...
|
||||
% 'nan', 'fill', ...
|
||||
% 'orientation', 'vert');
|
||||
% set(hl, 'LineWidth', 1.2, 'DisplayName', sprintf('Eq %s', eq_val));
|
||||
% set(hp, 'HandleVisibility', 'off');
|
||||
% else
|
||||
% % If boundedline is not available, use errorbar
|
||||
% errorbar(x, y_mean, y_lower, y_upper, ...
|
||||
% 'o-', 'Color', cols(i,:), 'LineWidth', 1.2, ...
|
||||
% 'DisplayName', sprintf('Eq %d', eq_val),'HandleVisibility', 'off');
|
||||
% end
|
||||
%
|
||||
% % --- Normal line (mean only) ---
|
||||
% plot(x, y_mean, '-', 'Color', cols(i,:), 'LineWidth', 1.5, ...
|
||||
% 'DisplayName', sprintf('Mean Eq %s', eq_val),'HandleVisibility', 'off');
|
||||
%
|
||||
% % --- Scatter plot for individual points (from original data) ---
|
||||
% % Filter original data for this group
|
||||
% orig_filt = dataTableClean.equalizer_structure == eq_val;
|
||||
% x_scatter = dataTableClean.(x_var)(orig_filt);
|
||||
% y_scatter = dataTableClean.(y_var)(orig_filt);
|
||||
%
|
||||
% scatter(x_scatter, y_scatter, 10,cols(i,:), 'filled', ...
|
||||
% 'MarkerFaceAlpha', 0.5, 'DisplayName', sprintf('Scatter Eq %s', eq_val),'HandleVisibility', 'off');
|
||||
% end
|
||||
%
|
||||
% yline([2.2e-4,4.85e-3,2e-2],'HandleVisibility', 'off','LineWidth',1,'LineStyle','--');
|
||||
% set(gca, 'YScale', 'log'); % BER is usually plotted log-scale
|
||||
% xlabel(x_var, 'Interpreter', 'none');
|
||||
% ylabel(y_var, 'Interpreter', 'none');
|
||||
% legend('show', 'Location', 'best');
|
||||
% grid on;
|
||||
% title(sprintf('%s vs. %s', y_var, x_var), 'Interpreter', 'none');
|
||||
% hold off;
|
||||
Reference in New Issue
Block a user