From 553ed19b9f8aade2f1f743b6b057419890c1ab88 Mon Sep 17 00:00:00 2001 From: sioe Date: Wed, 13 Nov 2024 10:49:49 +0100 Subject: [PATCH] High Speed Auswertung und Database code --- Classes/01_transmit/ChannelFreqResp.m | 4 +- Classes/DataBaseHandler/DBHandler.m | 514 ++++++++++++++++++ Classes/Warehouse_class/classes/DataStorage.m | 165 ++++-- Functions/EQ_structures/duobinary_signaling.m | 4 + Functions/EQ_structures/duobinary_target.m | 4 + Functions/EQ_structures/vnle.m | 4 + .../EQ_structures/vnle_postfilter_mlse.m | 4 + db_eq_mpi.tex | 290 ++++++++++ db_eq_wo_mpi.tex | 276 ++++++++++ db_noise_mpi.tex | 295 ++++++++++ db_noise_wo_mpi.tex | 299 ++++++++++ pam6_db.tex | 186 +++++++ pam6_pf.tex | 196 +++++++ .../analysis_script.m | 7 +- .../auswertung/buildDBfromMeasurements.m | 475 ++++++++++++++++ .../auswertung/checkDB.m | 28 + .../auswertung/createConfigMenu.m | 52 ++ .../auswertung/runDSP.m | 85 +++ .../master_auswertung_10km.m | 26 +- .../single_auswertung_10km.m | 83 +++ 20 files changed, 2931 insertions(+), 66 deletions(-) create mode 100644 Classes/DataBaseHandler/DBHandler.m create mode 100644 Functions/EQ_structures/duobinary_signaling.m create mode 100644 Functions/EQ_structures/duobinary_target.m create mode 100644 Functions/EQ_structures/vnle.m create mode 100644 Functions/EQ_structures/vnle_postfilter_mlse.m create mode 100644 db_eq_mpi.tex create mode 100644 db_eq_wo_mpi.tex create mode 100644 db_noise_mpi.tex create mode 100644 db_noise_wo_mpi.tex create mode 100644 pam6_db.tex create mode 100644 pam6_pf.tex create mode 100644 projects/HighSpeedExperiment_2024/auswertung/buildDBfromMeasurements.m create mode 100644 projects/HighSpeedExperiment_2024/auswertung/checkDB.m create mode 100644 projects/HighSpeedExperiment_2024/auswertung/createConfigMenu.m create mode 100644 projects/HighSpeedExperiment_2024/auswertung/runDSP.m create mode 100644 projects/HighSpeedExperiment_2024/single_auswertung_10km.m diff --git a/Classes/01_transmit/ChannelFreqResp.m b/Classes/01_transmit/ChannelFreqResp.m index f204112..9a1be19 100644 --- a/Classes/01_transmit/ChannelFreqResp.m +++ b/Classes/01_transmit/ChannelFreqResp.m @@ -243,11 +243,11 @@ classdef ChannelFreqResp < handle %%% plot for publication figure(1234);hold all;box on;title('Magnitude Freq. Response'); %xlim([0.2 .5*max(obj.faxis)*1e-9]); - ylim([-40, 2]); + %ylim([-40, 2]); Havg_smooth = smooth(Havg,50); symaxis = (obj.faxis-(obj.f_ref/2))/1e9; Havg = fftshift(Havg); - Havg = smooth(Havg); + %Havg = smooth(Havg); plot(symaxis, 20*log10(abs(Havg)),'LineWidth',0.5); grid on; diff --git a/Classes/DataBaseHandler/DBHandler.m b/Classes/DataBaseHandler/DBHandler.m new file mode 100644 index 0000000..b7c2276 --- /dev/null +++ b/Classes/DataBaseHandler/DBHandler.m @@ -0,0 +1,514 @@ +classdef DBHandler < handle + % DBHANDLER Class to handle database queries + % This class provides methods to interact with an SQLite database, including + % inserting data, retrieving table names, and appending new rows. + + properties + conn % Database connection object + pathToDB % Path to the SQLite database + tableNames % Cell array containing names of all tables in the database + tables = struct(); % Structure containing MATLAB tables for each database table + distinctValues + end + + methods + function obj = DBHandler(options) + % DBHANDLER Constructor for the DBHandler class + % Initializes the database connection and retrieves table and field names. + % + % Usage: + % obj = DBHandler('pathToDB', 'path/to/database.db'); + + arguments + options.pathToDB = ""; % Default value for pathToDB if not provided + end + + % Assign values to class properties based on input arguments + fn = fieldnames(options); + for n = 1:numel(fn) + try + obj.(fn{n}) = options.(fn{n}); + end + end + + % Establish a connection to the SQLite database + try + obj.conn = sqlite(obj.pathToDB); + catch e + error('Failed to connect to the database: %s', e.message); + end + + % Get table names and the first rows of each table to understand the structure + obj.getTableNames(); + obj.getTables(); + obj.getDistinctValues(); + end + + function obj = getTableNames(obj) + % Get all table names from the database + try + result = fetch(obj.conn, 'SELECT name FROM sqlite_master WHERE type="table"'); + obj.tableNames = result.name; + catch e + error('Failed to retrieve table names: %s', e.message); + end + end + + function obj = getTables(obj) + % Get a preview (first row) of each table to understand its structure + for i = 1:numel(obj.tableNames) + try + tableName = obj.tableNames{i}; + + results = fetch(obj.conn, sprintf('SELECT * FROM %s WHERE 1 = 2', tableName)); + % Matlab cant handle if there is a NULL in a returned + % datarow... therefore do not return a row using the + % above condition which is never true + % results = sqlread(obj.conn, tableName, MaxRows=1); + + for l = 1:numel(results.Properties.VariableNames) + varName = results.Properties.VariableNames{l}; + obj.tables.(tableName).(varName) = []; % Store the preview as a reference + end + + catch e + warning('Failed to read the table %s: %s', tableName, e.message); + end + end + end + + function obj = getDistinctValues(obj) + % getDistinctValues Retrieves distinct values for each relevant field in all tables + % excluding fields ending with "_id". Stores distinct values in the 'distinctValues' + % property. + + % Initialize a structure to store distinct values for each table + obj.distinctValues = struct(); + + % Iterate over each table in obj.tables + tableNames = fieldnames(obj.tables); + + for i = 1:numel(tableNames) + tableName = tableNames{i}; + + % Initialize a sub-struct to store distinct values for each field in the table + obj.distinctValues.(tableName) = struct(); + + % Get all fields of the current table + fieldNames = fieldnames(obj.tables.(tableName)); + + % Iterate over each field + for j = 1:numel(fieldNames) + fieldName = fieldNames{j}; + + % Skip fields ending with '_id' as they don't contain useful distinct values + if endsWith(fieldName, '_id') + continue; + end + + % Construct SQL to get distinct values for the current field + query = sprintf('SELECT DISTINCT %s FROM %s', fieldName, tableName); + + % Execute query and fetch distinct values + try + result = fetch(obj.conn, query); + + % Store the distinct values in the structure + if ~isempty(result) + distinctValues = table2array(result); + else + distinctValues = []; + end + + obj.distinctValues.(tableName).(fieldName) = distinctValues; + + catch e + warning('Failed to retrieve distinct values for %s.%s: %s', tableName, fieldName, e.message); + obj.distinctValues.(tableName).(fieldName) = []; + end + end + end + + % Display the distinct values (optional, for debugging purposes) + disp('Distinct values for each field:'); + disp(obj.distinctValues); + end + + + function lastID = appendToTable(obj, tableName, newRow) + % appendToTable Appends a new row to the specified table + % + % Usage: + % appendToTable(tableName, newRow) + % + % Inputs: + % tableName: The name of the table to append data to. + % newRow: A MATLAB table or struct containing the new row to be appended. + + % Check if the table exists in the fetched tables + if ~isfield(obj.tables, tableName) + error('Table %s does not exist in the database or has not been fetched.', tableName); + end + + % Convert newRow to a table if it is a struct + if isstruct(newRow) + fields = fieldnames(newRow); + emptyFields = structfun(@isempty,newRow); + if sum(emptyFields)>0 + newRow.(fields{emptyFields==1}) = NaN; + disp(['In Table: ',tableName,': ',fields{emptyFields==1},' was empty, is now NaN ',newRow.(fields{emptyFields==1})]) + + end + newRow = struct2table(newRow); + end + + % Ensure the new row matches the structure of the existing table + existingTableStructure = obj.tables.(tableName); + + % Perform data type checks and conversions + for colName = newRow.Properties.VariableNames + % Extract the value and its intended column type + value = newRow.(colName{1}); + existingValue = existingTableStructure.(colName{1}); + + % If the value is a class object, convert it to JSON format + if isobject(value) && ~isdatetime(value) && ~isa(value,"string") + newRow.(colName{1}) = string(jsonencode(value)); + + % If the value is a character array, convert it to a string + elseif ischar(value) + newRow.(colName{1}) = string(value); + + end + + end + + % Append the new row to the database table + try + sqlwrite(obj.conn, tableName, newRow); + % disp(['Successfully appended new row to the table ', tableName]); + catch e + error('Failed to append to the table %s: %s', tableName, e.message); + end + + % Retrieve the measurement_id of the newly inserted row for linking other tables + result = fetch(obj.conn, 'SELECT last_insert_rowid()'); + lastID = result{1, 1}; % Access the value directly from the table + end + + function exists = checkIfRunExists(obj, table2check, column2check, value2check) + % checkIfRunExists Checks if a specific value exists in a specified column of a table + % + % Usage: + % exists = checkIfRunExists(table2check, column2check, value2check) + % + % Inputs: + % table2check: The name of the table to check for duplicates. + % column2check: The name of the column to check within the specified table. + % value2check: The value to check for in the specified column. + % + % Outputs: + % exists: Boolean indicating whether the value already exists in the table. + + % Ensure the specified table and column exist in the database + if ~isfield(obj.tables, table2check) + error('Table %s does not exist in the database.', table2check); + end + + % Ensure the specified column exists in the table structure + if ~isfield(obj.tables.(table2check), column2check) + error('Column %s does not exist in the table %s.', column2check, table2check); + end + + % Construct the query to check for the value in the specified column + query = sprintf('SELECT COUNT(*) FROM %s WHERE %s = "%s"', table2check, column2check, value2check); + + % Execute the query and pass the value2check to avoid SQL injection issues + try + result = fetch(obj.conn, query); + count = result{1, 1}; % Extract the count from the result + catch e + error('Failed to execute the duplicate check query: %s', e.message); + end + + % If count is greater than 0, then the value exists in the table + exists = count > 0; + + if exists + disp(['The value "', value2check, '" already exists in the column "', column2check, '" of the table "', table2check, '".']); + else + % disp(['The value "', value2check, '" does not exist in the column "', column2check, '" of the table "', table2check, '".']); + end + end + + function answer = fetch(obj,query) + answer = fetch(obj.conn,query); + end + + function result = getPathsWithFlexibleFilter(obj, filterParams, selectedFields) + % getPathsWithFlexibleFilter Retrieves values from Runs table with flexible filtering + % and lets the user select which fields to include in the SELECT statement. + % + % Usage: + % [rxRawPaths, filteredValues] = getPathsWithFlexibleFilter(filterParams) + % + % Inputs: + % filterParams: A structure containing the parameters with their values. + % If left empty, two popup windows will prompt the user for input. + % + % Outputs: + % rxRawPaths: Cell array of values from the Runs table matching the criteria. + % filteredValues: Table of distinct values for parameters included in filterParams. + arguments + obj + filterParams = []; + selectedFields = []; + end + + % Step 1: Prompt the user to input filter parameters if not provided + if isempty(filterParams) + filterParams = obj.promptFilterParameters(); + end + + % Step 2: Prompt the user to select fields to include in the SELECT statement + if isempty(selectedFields) + selectedFields = obj.promptSelectFields(); + else + if iscell(selectedFields) + + elseif isstruct(selectedFields) + + end + end + + % Step 3: Construct the SQL query based on the inputs + query = obj.constructSQLQuery(filterParams, selectedFields); + + % Step 4: Execute the query and handle results + result = obj.fetch(query); + end + + function query = constructSQLQuery(obj, filterParams, selectedFields) + % constructSQLQuery Constructs the SQL query based on filter parameters and selected fields. + + % Construct the SELECT clause dynamically based on user selection + selectClause = 'SELECT DISTINCT '; + for i = 1:numel(selectedFields) + fieldParts = strsplit(selectedFields{i}, '.'); + tableName = fieldParts{1}; + fieldName = fieldParts{2}; + + if isnumeric(obj.tables.(tableName).(fieldName)) + selectClause = [selectClause, 'COALESCE(', selectedFields{i}, ', -1) AS ', fieldName]; + else + selectClause = [selectClause, 'COALESCE(', selectedFields{i}, ', '''') AS ', fieldName]; + end + + if i < numel(selectedFields) + selectClause = [selectClause, ', ']; + else + selectClause = [selectClause, ' ']; + end + end + + % Construct the FROM and WHERE clause + baseQuery = [selectClause, 'FROM Runs ' ... + 'LEFT JOIN Configurations ON Runs.run_id = Configurations.run_id ' ... + 'LEFT JOIN Measurements ON Runs.run_id = Measurements.run_id ' ... + 'LEFT JOIN BERs ON Runs.run_id = BERs.run_id ' ... + 'LEFT JOIN Equalizer ON BERs.eq_id = Equalizer.eq_id ' ... + 'WHERE ']; + + % Loop through each table in filterParams + filterClauses = []; + tableNames = fieldnames(filterParams); + + for t = 1:numel(tableNames) + tableName = tableNames{t}; + tableParams = filterParams.(tableName); + + % Loop through each parameter in the table + fieldNames = fieldnames(tableParams); + for i = 1:numel(fieldNames) + fieldName = fieldNames{i}; + value = tableParams.(fieldName); + + % Construct the full column name in the format "tableName.fieldName" + fullName = sprintf('%s.%s', tableName, fieldName); + + % Handle different types of values for SQL query construction + if isempty(value) + % Skip this parameter if it is empty (include all values) + continue; + elseif isnumeric(value) && isnan(value) + % If value is NaN, use IS NULL in SQL + filterClause = sprintf('%s IS NULL', fullName); + elseif isnumeric(value) + filterClause = sprintf('%s = %f', fullName, value); + elseif islogical(value) || (isnumeric(value) && ismember(value, [0, 1])) + filterClause = sprintf('%s = %d', fullName, value); + elseif ischar(value) || isstring(value) + filterClause = sprintf('%s = "%s"', fullName, value); + else + error('Unsupported data type for field "%s".', fullName); + end + + % Add the constructed filter clause to the list + filterClauses = [filterClauses, filterClause, ' AND ']; + end + end + + % Remove trailing ' AND ' from the filter clauses if any filters were added + if ~isempty(filterClauses) + filterClauses = filterClauses(1:end-5); + end + + % Construct the final SQL query + if isempty(filterClauses) + query = [selectClause, 'FROM Runs ' ... + 'LEFT JOIN Configurations ON Runs.run_id = Configurations.run_id ' ... + 'LEFT JOIN Measurements ON Runs.run_id = Measurements.run_id ' ... + 'LEFT JOIN BERs ON Runs.run_id = BERs.run_id']; + else + query = [baseQuery, filterClauses]; + end + + end + + + function selectedFields = promptSelectFields(obj) + % promptSelectFields Prompts the user to select fields from multiple tables to include in the SELECT statement using settingsdlg. + + % Get all possible fields from all tables (excluding sqlite_sequence) + tableNames = fieldnames(obj.tables); + tableNames = setdiff(tableNames, {'sqlite_sequence'}); % Remove sqlite_sequence + + % Prepare the inputs for settingsdlg + promptSettings = {}; + allFieldsFullName = {}; + convertedFieldNames = {}; + + for i = 1:numel(tableNames) + tableFields = fieldnames(obj.tables.(tableNames{i})); + for j = 1:numel(tableFields) + fieldName = tableFields{j}; + fullName = sprintf('%s.%s', tableNames{i}, fieldName); + convertedName = strrep(fullName, '.', '_'); % Replace '.' with '_' + + allFieldsFullName{end + 1} = fullName; % Add full name to the list + convertedFieldNames{end + 1} = convertedName; % Store the converted name + + % Add the field name and checkbox setting to the prompt + promptSettings{end + 1} = {sprintf('Include %s', fullName), convertedName}; + promptSettings{end + 1} = false; % Default: not selected + end + end + + % Create the settings dialog + [settings, button] = settingsdlg(... + 'title', 'Select Fields for the SQL Query', ... + 'description', 'Check the boxes for the fields you want to include in the SELECT statement.', ... + promptSettings{:} ... + ); + + % If the user cancels, default to selecting all fields + if strcmp(button, 'cancel') + selectedFields = allFieldsFullName; + return; + end + + % Parse user input into selectedFields + selectedFields = {}; + for i = 1:numel(allFieldsFullName) + convertedName = convertedFieldNames{i}; + if isfield(settings, convertedName) && settings.(convertedName) % Add to selectedFields if the checkbox was selected + selectedFields{end + 1} = allFieldsFullName{i}; %#ok + end + end + + % If no fields are selected, default to selecting all fields + if isempty(selectedFields) + selectedFields = allFieldsFullName; + end + end + + function filterParams = promptFilterParameters(obj) + % promptFilterParameters Prompts the user to enter filter parameters using the settingsdlg framework. + + % Get all possible parameters from all tables (excluding sqlite_sequence) + tableNames = fieldnames(obj.tables); + tableNames = setdiff(tableNames, {'sqlite_sequence'}); % Remove sqlite_sequence + + % Prepare the inputs for settingsdlg with sections and separators + promptSettings = {}; + allFieldsFullName = {}; + convertedFieldNames = {}; + + for i = 1:numel(tableNames) + % Add a separator for each table section + promptSettings{end + 1} = 'separator'; + promptSettings{end + 1} = tableNames{i}; + + % Get all fields from the current table + tableFields = fieldnames(obj.tables.(tableNames{i})); + + % Prepare each field to be added to the dialog + for j = 1:numel(tableFields) + fieldName = tableFields{j}; + fullName = sprintf('%s.%s', tableNames{i}, fieldName); + convertedName = strrep(fullName, '.', '_'); % Replace '.' with '_' + + allFieldsFullName{end + 1} = fullName; % Add full name to the list + convertedFieldNames{end + 1} = convertedName; % Store the converted name + + % Add the field name and value setting to the prompt + promptSettings{end + 1} = {sprintf('%s', fullName), convertedName}; + promptSettings{end + 1} = []; + end + end + + % Create the settings dialog + [settings, button] = settingsdlg(... + 'title', 'Input Parameters for Filtering', ... + 'description', 'Enter the values for each field to filter. Leave empty to include all values. Type NaN for NULL.', ... + promptSettings{:} ... + ); + + % If the user cancels, return an empty struct + if strcmp(button, 'cancel') + filterParams = struct(); + return; + end + + % Parse user input into filterParams structure + filterParams = struct(); + + for i = 1:numel(allFieldsFullName) + value = settings.(convertedFieldNames{i}); + + % Split full name to get table and field names + fieldParts = strsplit(allFieldsFullName{i}, '.'); + tableName = fieldParts{1}; + fieldName = fieldParts{2}; + + % If the table does not exist in the filterParams struct, create it + if ~isfield(filterParams, tableName) + filterParams.(tableName) = struct(); + end + + % Assign values to the respective fields under each table + if isempty(value) + filterParams.(tableName).(fieldName) = []; % Set to empty to include all values + elseif isnumeric(value) && isnan(value) + filterParams.(tableName).(fieldName) = NaN; % Use NaN to handle as NULL + else + filterParams.(tableName).(fieldName) = value; % Use the entered value + end + end + end + + + + + end +end diff --git a/Classes/Warehouse_class/classes/DataStorage.m b/Classes/Warehouse_class/classes/DataStorage.m index e6e010c..af00a6a 100644 --- a/Classes/Warehouse_class/classes/DataStorage.m +++ b/Classes/Warehouse_class/classes/DataStorage.m @@ -125,77 +125,79 @@ classdef DataStorage < handle lin_idx = obj.getIndicesByPhys(varargin); errcnt = 0; for i=1:numel(lin_idx) - - tmp = obj.sto.(storageVarName){lin_idx(i)}; - if ~isempty(tmp) - if isa(tmp,'Signal') || isa(tmp,'struct') || isa(tmp,'Exfo_laser') || isa(tmp,'DC_supply') + tmp = obj.sto.(storageVarName){lin_idx(i)}; + if ~isempty(tmp) + + if isa(tmp,'double') + value(i) = tmp ; + elseif isa(tmp,'Signal') || isa(tmp,'struct') || isa(tmp,'Exfo_laser') || isa(tmp,'DC_supply') + if i == 1 + value = {}; + end + value{i} = tmp ; + + elseif isa(tmp,'cell') + if isa(tmp{1},'Signal') + if i == 1 + value = {}; + end + value{i} = tmp{1} ; + else + value{i} = tmp{1} ; + end + + else + + try if i == 1 value = {}; end value{i} = tmp ; + catch + % value(i,:) = tmp(1:size(value,2)) ; - elseif isa(tmp,'cell') - if isa(tmp{1},'Signal') - if i == 1 - value = {}; - end - value{i} = tmp{1} ; - else - value{i} = tmp{1} ; - end + if size(value,2) < size(tmp,2) - else - - try - if i == 1 - value = {}; - end - value{i} = tmp ; - catch - % value(i,:) = tmp(1:size(value,2)) ; - - if size(value,2) < size(tmp,2) + diff = size(tmp,2) - size(value,2); + value(:,end+1:end+diff) = NaN(size(value,1),diff); + value(i,:) = tmp ; - diff = size(tmp,2) - size(value,2); - value(:,end+1:end+diff) = NaN(size(value,1),diff); - value(i,:) = tmp ; + elseif size(value,2) > size(tmp,2) - elseif size(value,2) > size(tmp,2) - - diff = size(value,2) - size(tmp,2); - tmp(:,end+1:end+diff) = NaN(1,diff); - value(i,:) = tmp ; - - end + diff = size(value,2) - size(tmp,2); + tmp(:,end+1:end+diff) = NaN(1,diff); + value(i,:) = tmp ; end - + end - else - errcnt = errcnt+1; - if errcnt < 3 + end + else + errcnt = errcnt+1; + + if errcnt < 3 %get back the n-dimensional subiondices... [sub{1:length(size(obj.sto.(storageVarName)))}] = ind2sub(size(obj.sto.(storageVarName)),lin_idx(i)); - %get back the physical representaion + %get back the physical representaion word = []; for phys_idx = 1:numel(obj.fn) parametername = obj.fn(phys_idx); word = [word,char(parametername),': ', num2str(obj.parameter.(parametername).getPhysForIndex(sub{phys_idx})),' ;']; end - % warning(['Requested Data is not in Warehouse ', word]); - elseif errcnt == 3 - % warning(['... ', word]); - end - - end - if errcnt > 2 - % warning([num2str(errcnt),' requested datapoint(s) not in warehouse.']); + % warning(['Requested Data is not in Warehouse ', word]); + elseif errcnt == 3 + % warning(['... ', word]); end - + end + if errcnt > 2 + % warning([num2str(errcnt),' requested datapoint(s) not in warehouse.']); + end + + end else error('Wrong Request using ExampleWarehouse.getStoValue(*parameter set*). Give me all the Parameters! Please!') @@ -259,7 +261,7 @@ classdef DataStorage < handle end - + % Mapping for single Index function idx = getIndexByPhys(obj,fieldname,phys) %map single phys to index @@ -267,7 +269,70 @@ classdef DataStorage < handle end - + + function phys_indices = getPhysIndicesByLinIndex(obj, lin_idx) + % Converts a linear index into the corresponding physical parameter values + % Inputs: + % - lin_idx: The linear index within the storage array + % Output: + % - phys_indices: A cell array containing the physical parameter values for each dimension + + % Initialize output cell array + phys_indices = cell(1, numel(obj.fn)); + + % Convert linear index to subscript indices + [subscripts{1:numel(obj.dim)}] = ind2sub(obj.dim, lin_idx); + + % Map subscripts to physical values for each parameter + for i = 1:numel(obj.fn) + param_name = obj.fn(i); + phys_indices{i} = obj.parameter.(param_name).getPhysForIndex(subscripts{i}); + end + end + + function [physStruct, stored_value] = getPhysAndValueByLinIndex(obj, storageVarName, lin_idx) + % Retrieves a structure with physical parameter values as fieldnames, + % their corresponding parameter names as values, and the stored value + % for a given linear index. + % Inputs: + % - storageVarName: Name of the storage variable in obj.sto + % - lin_idx: The linear index within the storage array + % Outputs: + % - physStruct: A structure with physical parameter values as fieldnames + % and parameter names as values + % - stored_value: The value stored at the given linear index in the + % specified storage variable + + % Initialize an empty structure + physStruct = struct(); + + % Convert linear index to subscript indices + [subscripts{1:numel(obj.dim)}] = ind2sub(obj.dim, lin_idx); + + % Map subscripts to physical values and parameter names for each dimension + for i = 1:numel(obj.fn) + param_name = obj.fn(i); + phys_value = obj.parameter.(param_name).getPhysForIndex(subscripts{i}); + + % Add to the structure with phys_value as the fieldname and param_name as the value + physStruct.(param_name) = phys_value; + end + + % Retrieve the stored value at the given linear index + stored_value = obj.sto.(storageVarName){lin_idx}; + end + + function num_elements = getLastLinIndice(obj) + % Returns all possible linear indices for the data structure + % Output: + % - lin_indices: A column vector containing all linear indices for the storage array + + % Calculate the total number of elements in the storage array + num_elements = prod(obj.dim); + end + + + end end diff --git a/Functions/EQ_structures/duobinary_signaling.m b/Functions/EQ_structures/duobinary_signaling.m new file mode 100644 index 0000000..8fd2f80 --- /dev/null +++ b/Functions/EQ_structures/duobinary_signaling.m @@ -0,0 +1,4 @@ +function duobinary_signaling() + + +end \ No newline at end of file diff --git a/Functions/EQ_structures/duobinary_target.m b/Functions/EQ_structures/duobinary_target.m new file mode 100644 index 0000000..2a72291 --- /dev/null +++ b/Functions/EQ_structures/duobinary_target.m @@ -0,0 +1,4 @@ +function duobinary_target() + + +end \ No newline at end of file diff --git a/Functions/EQ_structures/vnle.m b/Functions/EQ_structures/vnle.m new file mode 100644 index 0000000..508b2e3 --- /dev/null +++ b/Functions/EQ_structures/vnle.m @@ -0,0 +1,4 @@ +function eq_signal = vnle(EQ,rx_signal,tx_symbols) + %VNLE + eq_signal = EQ.process(rx_signal,tx_symbols); +end \ No newline at end of file diff --git a/Functions/EQ_structures/vnle_postfilter_mlse.m b/Functions/EQ_structures/vnle_postfilter_mlse.m new file mode 100644 index 0000000..3feb3ea --- /dev/null +++ b/Functions/EQ_structures/vnle_postfilter_mlse.m @@ -0,0 +1,4 @@ +function vnle_postfilter_mlse() + + +end \ No newline at end of file diff --git a/db_eq_mpi.tex b/db_eq_mpi.tex new file mode 100644 index 0000000..12994d7 --- /dev/null +++ b/db_eq_mpi.tex @@ -0,0 +1,290 @@ +% This file was created by matlab2tikz. +% +%The latest updates can be retrieved from +% http://www.mathworks.com/matlabcentral/fileexchange/22022-matlab2tikz-matlab2tikz +%where you can also make suggestions and rate matlab2tikz. +% +\definecolor{mycolor1}{rgb}{0.89020,0.10196,0.10980}% +% +\begin{tikzpicture} + +\begin{axis}[% +width=0.951\fwidth, +height=\fheight, +at={(0\fwidth,0\fheight)}, +scale only axis, +xmin=-3.14159265358979, +xmax=3.14159265358979, +xlabel style={font=\color{white!15!black}}, +xlabel={Normalized Frequency}, +ymin=-46, +ymax=3, +ytick={-200, -190, -180, -170, -160, -150, -140, -130, -120, -110, -100, -90, -80, -70, -60, -50, -40, -30, -20, -10, 0, 10}, +ylabel style={font=\color{white!15!black}}, +ylabel={normalized to 0 dB}, +axis background/.style={fill=white}, +axis x line*=bottom, +axis y line*=left, +xmajorgrids, +xminorgrids, +ymajorgrids, +yminorgrids, +legend style={legend cell align=left, align=left, draw=white!15!black} +] +\addplot [color=mycolor1, line width=1.0pt] + table[row sep=crcr]{% +-3.11704896098362 -34.152640124107\\ +-3.09250526837745 -37.30368249791\\ +-3.06796157577129 -36.4084155134507\\ +-3.04341788316511 -32.8472897555048\\ +-3.01887419055894 -29.7603420288457\\ +-2.99433049795277 -27.3878352702008\\ +-2.9697868053466 -25.5045919439843\\ +-2.94524311274043 -23.8596773095355\\ +-2.92069942013426 -22.4231778333755\\ +-2.89615572752809 -21.0738854605452\\ +-2.87161203492192 -19.8241748642718\\ +-2.84706834231575 -18.7656037744813\\ +-2.82252464970958 -17.9427012863468\\ +-2.79798095710341 -17.3300455020831\\ +-2.77343726449724 -16.8570972623564\\ +-2.74889357189107 -16.4303665810903\\ +-2.7243498792849 -15.9603331293506\\ +-2.67526249407256 -14.9152364147404\\ +-2.62617510886022 -13.7282789909322\\ +-2.60163141625405 -13.2711055669692\\ +-2.57708772364788 -13.0159869302563\\ +-2.55254403104171 -12.8627077954076\\ +-2.52800033843554 -12.6991459702061\\ +-2.50345664582937 -12.4271267312005\\ +-2.47891295322319 -11.8866214027661\\ +-2.45436926061703 -11.0536074564346\\ +-2.42982556801086 -10.1083695425263\\ +-2.40528187540468 -9.31388042827889\\ +-2.38073818279852 -8.778725491267\\ +-2.35619449019234 -8.39313608791176\\ +-2.33165079758618 -8.14092384893069\\ +-2.30710710498001 -8.06093370603605\\ +-2.28256341237383 -8.14161353993601\\ +-2.25801971976767 -8.27290604595128\\ +-2.23347602716149 -8.36591478049129\\ +-2.20893233455532 -8.43416110047679\\ +-2.18438864194916 -8.4380075354912\\ +-2.15984494934298 -8.30596285747854\\ +-2.13530125673681 -8.1165797444491\\ +-2.11075756413064 -7.98175190194559\\ +-2.08621387152447 -7.8619798953406\\ +-2.06167017891831 -7.69653976428778\\ +-2.03712648631213 -7.4271708098562\\ +-2.01258279370596 -7.04574805161646\\ +-1.98803910109979 -6.57390723520547\\ +-1.96349540849362 -6.06771072445017\\ +-1.93895171588745 -5.63493976637049\\ +-1.91440802328128 -5.34213348629677\\ +-1.88986433067511 -5.15834304528927\\ +-1.86532063806894 -5.06241865677818\\ +-1.84077694546277 -5.00995310954403\\ +-1.8162332528566 -4.94933187405054\\ +-1.79168956025043 -4.89778434539084\\ +-1.76714586764426 -4.91128987148945\\ +-1.74260217503809 -4.93802078574208\\ +-1.71805848243192 -4.97303502588234\\ +-1.69351478982575 -4.97451045806658\\ +-1.66897109721958 -4.95636002488353\\ +-1.64442740461341 -4.90272361408173\\ +-1.61988371200724 -4.81348152997761\\ +-1.59534001940106 -4.74564957733824\\ +-1.5707963267949 -4.70301446670535\\ +-1.54625263418873 -4.63831980162999\\ +-1.52170894158255 -4.5187929199835\\ +-1.49716524897639 -4.34815184803496\\ +-1.47262155637021 -4.1192135361535\\ +-1.42353417115788 -3.54761072032757\\ +-1.3989904785517 -3.29683622342827\\ +-1.37444678594554 -3.13389750127856\\ +-1.34990309333936 -3.00703329422139\\ +-1.32535940073319 -2.93820099699774\\ +-1.30081570812703 -2.93351704789859\\ +-1.27627201552085 -2.93615105708502\\ +-1.25172832291468 -2.94778942364624\\ +-1.22718463030851 -2.97707904052072\\ +-1.17809724509618 -3.05857142505209\\ +-1.15355355249 -3.0594055914491\\ +-1.12900985988383 -3.0316612426535\\ +-1.10446616727766 -2.97068360146257\\ +-1.07992247467149 -2.88584164144167\\ +-1.05537878206532 -2.7788187463398\\ +-1.03083508945915 -2.64179784593011\\ +-0.957204011640641 -2.11741383173444\\ +-0.932660319034468 -1.94697175864269\\ +-0.908116626428303 -1.74913747055684\\ +-0.88357293382213 -1.51630002589027\\ +-0.859029241215957 -1.32388103733548\\ +-0.834485548609791 -1.25547919459462\\ +-0.785398163397446 -1.35535922330764\\ +-0.76085447079128 -1.40105712246658\\ +-0.736310778185107 -1.48314193528621\\ +-0.711767085578934 -1.60767016561632\\ +-0.687223392972768 -1.67551731596785\\ +-0.662679700366596 -1.71494365777474\\ +-0.63813600776043 -1.71820525815976\\ +-0.613592315154257 -1.68776926339483\\ +-0.589048622548084 -1.62532409404639\\ +-0.564504929941918 -1.54010490273969\\ +-0.539961237335746 -1.4164302592139\\ +-0.490873852123407 -1.07552633714884\\ +-0.441786466911061 -0.688310981739598\\ +-0.417242774304896 -0.488474201410419\\ +-0.392699081698723 -0.315746347742085\\ +-0.343611696486384 -0.0494373636250245\\ +-0.319068003880211 -0\\ +-0.294524311274046 -0.0661029758684393\\ +-0.269980618667873 -0.280784524800559\\ +-0.2454369260617 -0.657474690551474\\ +-0.220893233455534 -1.19458775500653\\ +-0.196349540849361 -1.92980106861027\\ +-0.171805848243189 -2.781939214681\\ +-0.147262155637023 -3.82635324494866\\ +-0.0981747704246843 -6.57941824337365\\ +-0.0490873852123386 -9.47773091071146\\ +-0.0245436926061728 -10.6809263718464\\ +0 -11.2450827557943\\ +0.0245436926061728 -10.6809263718464\\ +0.0490873852123386 -9.47773091071146\\ +0.0981747704246843 -6.57941824337366\\ +0.147262155637023 -3.82635324494866\\ +0.171805848243189 -2.781939214681\\ +0.196349540849361 -1.92980106861027\\ +0.220893233455534 -1.19458775500652\\ +0.2454369260617 -0.657474690551474\\ +0.269980618667873 -0.280784524800552\\ +0.294524311274046 -0.0661029758684322\\ +0.319068003880211 0\\ +0.343611696486384 -0.0494373636250245\\ +0.392699081698723 -0.315746347742085\\ +0.417242774304896 -0.488474201410419\\ +0.466330159517234 -0.886419690092346\\ +0.490873852123407 -1.07552633714884\\ +0.539961237335746 -1.4164302592139\\ +0.564504929941918 -1.54010490273969\\ +0.589048622548084 -1.62532409404639\\ +0.613592315154257 -1.68776926339483\\ +0.63813600776043 -1.71820525815976\\ +0.662679700366596 -1.71494365777474\\ +0.687223392972768 -1.67551731596784\\ +0.711767085578934 -1.60767016561632\\ +0.736310778185107 -1.48314193528621\\ +0.76085447079128 -1.40105712246658\\ +0.785398163397446 -1.35535922330764\\ +0.834485548609791 -1.25547919459462\\ +0.859029241215957 -1.32388103733548\\ +0.88357293382213 -1.51630002589027\\ +0.908116626428303 -1.74913747055684\\ +0.932660319034468 -1.94697175864269\\ +1.00629139685298 -2.46538205939333\\ +1.03083508945915 -2.64179784593011\\ +1.05537878206532 -2.7788187463398\\ +1.07992247467149 -2.88584164144167\\ +1.10446616727766 -2.97068360146258\\ +1.12900985988383 -3.0316612426535\\ +1.15355355249 -3.0594055914491\\ +1.17809724509618 -3.0585714250521\\ +1.22718463030851 -2.97707904052072\\ +1.25172832291468 -2.94778942364624\\ +1.27627201552085 -2.93615105708502\\ +1.30081570812703 -2.93351704789858\\ +1.32535940073319 -2.93820099699773\\ +1.34990309333936 -3.0070332942214\\ +1.37444678594554 -3.13389750127857\\ +1.3989904785517 -3.29683622342827\\ +1.42353417115788 -3.54761072032757\\ +1.47262155637021 -4.1192135361535\\ +1.49716524897639 -4.34815184803496\\ +1.52170894158255 -4.5187929199835\\ +1.54625263418873 -4.63831980162999\\ +1.5707963267949 -4.70301446670535\\ +1.59534001940106 -4.74564957733824\\ +1.61988371200724 -4.8134815299776\\ +1.64442740461341 -4.90272361408173\\ +1.66897109721958 -4.95636002488353\\ +1.69351478982575 -4.97451045806659\\ +1.71805848243192 -4.97303502588234\\ +1.74260217503809 -4.93802078574208\\ +1.76714586764426 -4.91128987148945\\ +1.79168956025043 -4.89778434539084\\ +1.8162332528566 -4.94933187405054\\ +1.84077694546277 -5.00995310954403\\ +1.86532063806894 -5.06241865677818\\ +1.88986433067511 -5.15834304528927\\ +1.91440802328128 -5.34213348629677\\ +1.93895171588745 -5.6349397663705\\ +1.96349540849362 -6.06771072445017\\ +1.98803910109979 -6.57390723520547\\ +2.01258279370596 -7.04574805161646\\ +2.03712648631213 -7.4271708098562\\ +2.06167017891831 -7.69653976428778\\ +2.08621387152447 -7.86197989534059\\ +2.11075756413064 -7.98175190194559\\ +2.13530125673681 -8.1165797444491\\ +2.15984494934298 -8.30596285747854\\ +2.18438864194916 -8.4380075354912\\ +2.20893233455532 -8.43416110047679\\ +2.23347602716149 -8.3659147804913\\ +2.25801971976767 -8.27290604595129\\ +2.28256341237383 -8.14161353993602\\ +2.30710710498001 -8.06093370603606\\ +2.33165079758618 -8.1409238489307\\ +2.35619449019234 -8.39313608791177\\ +2.38073818279852 -8.778725491267\\ +2.40528187540468 -9.31388042827889\\ +2.42982556801086 -10.1083695425263\\ +2.45436926061703 -11.0536074564346\\ +2.47891295322319 -11.8866214027661\\ +2.50345664582937 -12.4271267312005\\ +2.52800033843554 -12.6991459702061\\ +2.55254403104171 -12.8627077954076\\ +2.57708772364788 -13.0159869302563\\ +2.60163141625405 -13.2711055669692\\ +2.62617510886022 -13.7282789909322\\ +2.67526249407256 -14.9152364147404\\ +2.7243498792849 -15.9603331293506\\ +2.74889357189107 -16.4303665810851\\ +2.77343726449724 -16.8570972623589\\ +2.79798095710341 -17.3300455020857\\ +2.82252464970958 -17.9427012862682\\ +2.84706834231575 -18.7656037743951\\ +2.87161203492192 -19.8241749566727\\ +2.89615572752809 -21.0738850792815\\ +2.92069942013426 -22.423178321796\\ +2.94524311274043 -23.8596801342157\\ +2.9697868053466 -25.5045988241004\\ +2.99433049795277 -27.4518090423811\\ +3.01887419055894 -29.5850728981767\\ +3.04341788316511 -32.5498276313891\\ +3.06796157577129 -36.9286792174989\\ +3.09250526837745 -42.8433185127069\\ +3.11704896098362 -40.1613695561787\\ +3.1415926535898 -34.8799159666441\\ +}; +\addlegendentry{DB out19.2665} + +\end{axis} + +\begin{axis}[% +width=1.227\fwidth, +height=1.227\fheight, +at={(-0.16\fwidth,-0.135\fheight)}, +scale only axis, +xmin=0, +xmax=1, +ymin=0, +ymax=1, +axis line style={draw=none}, +ticks=none, +axis x line*=bottom, +axis y line*=left, +xmajorgrids, +ymajorgrids +] +\end{axis} +\end{tikzpicture}% \ No newline at end of file diff --git a/db_eq_wo_mpi.tex b/db_eq_wo_mpi.tex new file mode 100644 index 0000000..1bd7534 --- /dev/null +++ b/db_eq_wo_mpi.tex @@ -0,0 +1,276 @@ +% This file was created by matlab2tikz. +% +%The latest updates can be retrieved from +% http://www.mathworks.com/matlabcentral/fileexchange/22022-matlab2tikz-matlab2tikz +%where you can also make suggestions and rate matlab2tikz. +% +\definecolor{mycolor1}{rgb}{0.89020,0.10196,0.10980}% +% +\begin{tikzpicture} + +\begin{axis}[% +width=0.951\fwidth, +height=\fheight, +at={(0\fwidth,0\fheight)}, +scale only axis, +xmin=-3.14159265358979, +xmax=3.14159265358979, +xlabel style={font=\color{white!15!black}}, +xlabel={Normalized Frequency}, +ymin=-46, +ymax=3, +ytick={-200, -190, -180, -170, -160, -150, -140, -130, -120, -110, -100, -90, -80, -70, -60, -50, -40, -30, -20, -10, 0, 10}, +ylabel style={font=\color{white!15!black}}, +ylabel={normalized to 0 dB}, +axis background/.style={fill=white}, +axis x line*=bottom, +axis y line*=left, +xmajorgrids, +ymajorgrids, +legend style={legend cell align=left, align=left, draw=white!15!black} +] +\addplot [color=mycolor1, line width=1.0pt] + table[row sep=crcr]{% +-3.11704896098362 -35.5782004188707\\ +-3.09250526837745 -33.1159623086625\\ +-3.06796157577129 -29.8127430785645\\ +-3.04341788316511 -27.1142231619025\\ +-3.01887419055894 -24.9816651036867\\ +-2.99433049795277 -23.2550131042722\\ +-2.9697868053466 -21.7690569330913\\ +-2.94524311274043 -20.5282040877856\\ +-2.92069942013426 -19.5466143865162\\ +-2.87161203492192 -17.8570502294022\\ +-2.84706834231575 -17.1174741970484\\ +-2.82252464970958 -16.4882067469752\\ +-2.79798095710341 -15.9631811263125\\ +-2.74889357189107 -15.040897271394\\ +-2.7243498792849 -14.4824420267243\\ +-2.67526249407256 -13.1757573992517\\ +-2.62617510886022 -11.8206968465478\\ +-2.60163141625405 -11.3586194137695\\ +-2.57708772364788 -11.1512196798002\\ +-2.55254403104171 -11.1141125004655\\ +-2.52800033843554 -11.1356970410682\\ +-2.50345664582937 -11.1042663245222\\ +-2.47891295322319 -10.8457113724973\\ +-2.45436926061703 -10.2509043772106\\ +-2.42982556801086 -9.49600909903207\\ +-2.40528187540468 -8.91571719428563\\ +-2.38073818279852 -8.56674653189375\\ +-2.35619449019234 -8.30608957254529\\ +-2.33165079758618 -8.07333298133048\\ +-2.30710710498001 -7.90854344190689\\ +-2.28256341237383 -7.81114175561396\\ +-2.25801971976767 -7.72909129645249\\ +-2.23347602716149 -7.62278081883213\\ +-2.20893233455532 -7.50934135816258\\ +-2.18438864194916 -7.34162072128382\\ +-2.15984494934298 -7.05197027921345\\ +-2.13530125673681 -6.72846162821838\\ +-2.11075756413064 -6.504146636756\\ +-2.06167017891831 -6.18679569976343\\ +-2.03712648631213 -5.98544377852629\\ +-2.01258279370596 -5.7268545940405\\ +-1.96349540849362 -5.10207648230094\\ +-1.93895171588745 -4.85548883097329\\ +-1.91440802328128 -4.71795834646901\\ +-1.88986433067511 -4.65821693591604\\ +-1.86532063806894 -4.66014145162995\\ +-1.84077694546277 -4.65493723917044\\ +-1.8162332528566 -4.59055661230468\\ +-1.79168956025043 -4.4864244064304\\ +-1.76714586764426 -4.40468844343732\\ +-1.74260217503809 -4.29729371979585\\ +-1.71805848243192 -4.15868013907824\\ +-1.69351478982575 -3.98304771525945\\ +-1.66897109721958 -3.79412377848772\\ +-1.61988371200724 -3.35829857637475\\ +-1.59534001940106 -3.21155314163612\\ +-1.5707963267949 -3.14335782104515\\ +-1.54625263418873 -3.11025013724856\\ +-1.49716524897639 -3.03771327815913\\ +-1.47262155637021 -2.96542246404228\\ +-1.44807786376405 -2.87345583737682\\ +-1.42353417115788 -2.75279980788936\\ +-1.3989904785517 -2.654987976207\\ +-1.37444678594554 -2.58255627944738\\ +-1.32535940073319 -2.47749537435604\\ +-1.30081570812703 -2.42926024690468\\ +-1.27627201552085 -2.36648968572744\\ +-1.25172832291468 -2.28236363181344\\ +-1.22718463030851 -2.18293152968466\\ +-1.20264093770234 -2.05603615965727\\ +-1.17809724509618 -1.93721440822181\\ +-1.15355355249 -1.84295801281856\\ +-1.12900985988383 -1.75506184318309\\ +-1.07992247467149 -1.62153330633635\\ +-1.05537878206532 -1.57859378742956\\ +-1.03083508945915 -1.52956038827949\\ +-1.00629139685298 -1.47648612994634\\ +-0.932660319034468 -1.25222217345828\\ +-0.908116626428303 -1.17388047239177\\ +-0.88357293382213 -1.08991913238873\\ +-0.859029241215957 -1.0262928345747\\ +-0.834485548609791 -0.996923088744765\\ +-0.809941856003618 -0.984189869128095\\ +-0.785398163397446 -0.957970382685453\\ +-0.76085447079128 -0.928971074953964\\ +-0.736310778185107 -0.892174695809111\\ +-0.711767085578934 -0.84622157240419\\ +-0.63813600776043 -0.69126953432994\\ +-0.589048622548084 -0.542550375291384\\ +-0.564504929941918 -0.491672510477834\\ +-0.539961237335746 -0.46643717780092\\ +-0.515417544729573 -0.465110728576775\\ +-0.490873852123407 -0.488012994046102\\ +-0.466330159517234 -0.553875213284073\\ +-0.441786466911061 -0.60431464496255\\ +-0.417242774304896 -0.679993294821351\\ +-0.392699081698723 -0.734482253211944\\ +-0.368155389092557 -0.721399317000689\\ +-0.343611696486384 -0.619598926472982\\ +-0.294524311274046 -0.30630258882568\\ +-0.269980618667873 -0.169900080060494\\ +-0.2454369260617 -0.0760700467178523\\ +-0.220893233455534 -0.0321032252202613\\ +-0.171805848243189 -0\\ +-0.147262155637023 -0.0160755308971048\\ +-0.12271846303085 -0.0519964181031938\\ +-0.0981747704246843 -0.156635723284822\\ +-0.0245436926061728 -0.499771678339783\\ +0 -0.565174080829159\\ +0.0245436926061728 -0.499771678339776\\ +0.0490873852123386 -0.381706064715679\\ +0.12271846303085 -0.0519964181031867\\ +0.147262155637023 -0.0160755308971048\\ +0.171805848243189 0\\ +0.220893233455534 -0.0321032252202613\\ +0.2454369260617 -0.0760700467178523\\ +0.269980618667873 -0.169900080060494\\ +0.294524311274046 -0.30630258882568\\ +0.343611696486384 -0.619598926472982\\ +0.368155389092557 -0.721399317000689\\ +0.392699081698723 -0.734482253211951\\ +0.417242774304896 -0.679993294821351\\ +0.441786466911061 -0.60431464496255\\ +0.466330159517234 -0.553875213284073\\ +0.490873852123407 -0.488012994046102\\ +0.515417544729573 -0.465110728576775\\ +0.539961237335746 -0.466437177800927\\ +0.564504929941918 -0.491672510477834\\ +0.589048622548084 -0.542550375291384\\ +0.63813600776043 -0.69126953432994\\ +0.687223392972768 -0.795648160574636\\ +0.711767085578934 -0.846221572404183\\ +0.736310778185107 -0.892174695809111\\ +0.76085447079128 -0.928971074953964\\ +0.785398163397446 -0.957970382685453\\ +0.809941856003618 -0.984189869128095\\ +0.834485548609791 -0.996923088744765\\ +0.859029241215957 -1.0262928345747\\ +0.88357293382213 -1.08991913238873\\ +0.908116626428303 -1.17388047239177\\ +0.932660319034468 -1.25222217345828\\ +0.957204011640641 -1.32373537243189\\ +1.00629139685298 -1.47648612994634\\ +1.03083508945915 -1.52956038827949\\ +1.05537878206532 -1.57859378742956\\ +1.07992247467149 -1.62153330633635\\ +1.10446616727766 -1.68626503805518\\ +1.12900985988383 -1.75506184318309\\ +1.15355355249 -1.84295801281856\\ +1.17809724509618 -1.93721440822181\\ +1.20264093770234 -2.05603615965727\\ +1.22718463030851 -2.18293152968467\\ +1.25172832291468 -2.28236363181345\\ +1.27627201552085 -2.36648968572745\\ +1.30081570812703 -2.42926024690468\\ +1.32535940073319 -2.47749537435604\\ +1.37444678594554 -2.58255627944738\\ +1.3989904785517 -2.65498797620701\\ +1.42353417115788 -2.75279980788936\\ +1.44807786376405 -2.87345583737682\\ +1.47262155637021 -2.96542246404228\\ +1.49716524897639 -3.03771327815913\\ +1.54625263418873 -3.11025013724856\\ +1.5707963267949 -3.14335782104514\\ +1.59534001940106 -3.21155314163612\\ +1.61988371200724 -3.35829857637475\\ +1.66897109721958 -3.79412377848772\\ +1.69351478982575 -3.98304771525944\\ +1.71805848243192 -4.15868013907824\\ +1.74260217503809 -4.29729371979585\\ +1.76714586764426 -4.40468844343732\\ +1.79168956025043 -4.4864244064304\\ +1.8162332528566 -4.59055661230469\\ +1.84077694546277 -4.65493723917044\\ +1.86532063806894 -4.66014145162995\\ +1.88986433067511 -4.65821693591604\\ +1.91440802328128 -4.71795834646901\\ +1.93895171588745 -4.85548883097329\\ +1.96349540849362 -5.10207648230094\\ +2.01258279370596 -5.7268545940405\\ +2.03712648631213 -5.98544377852629\\ +2.06167017891831 -6.18679569976344\\ +2.11075756413064 -6.504146636756\\ +2.13530125673681 -6.72846162821838\\ +2.15984494934298 -7.05197027921345\\ +2.18438864194916 -7.34162072128382\\ +2.20893233455532 -7.50934135816258\\ +2.23347602716149 -7.62278081883213\\ +2.25801971976767 -7.72909129645249\\ +2.28256341237383 -7.81114175561396\\ +2.30710710498001 -7.90854344190689\\ +2.33165079758618 -8.07333298133048\\ +2.35619449019234 -8.30608957254529\\ +2.38073818279852 -8.56674653189375\\ +2.40528187540468 -8.91571719428563\\ +2.42982556801086 -9.49600909903207\\ +2.45436926061703 -10.2509043772106\\ +2.47891295322319 -10.8457113724973\\ +2.50345664582937 -11.1042663245222\\ +2.52800033843554 -11.1356970410682\\ +2.55254403104171 -11.1141125004655\\ +2.57708772364788 -11.1512196798002\\ +2.60163141625405 -11.3586194137695\\ +2.62617510886022 -11.8206968465478\\ +2.7243498792849 -14.4824420267244\\ +2.74889357189107 -15.0408972714706\\ +2.79798095710341 -15.9631811263036\\ +2.82252464970958 -16.4882067465251\\ +2.84706834231575 -17.1174741963807\\ +2.87161203492192 -17.8570490225173\\ +2.89615572752809 -18.6774208577484\\ +2.92069942013426 -19.5466157773339\\ +2.94524311274043 -20.5282137117928\\ +2.9697868053466 -21.7690828912817\\ +2.99433049795277 -23.3639330048926\\ +3.01887419055894 -25.1309853229038\\ +3.04341788316511 -27.3374155587587\\ +3.06796157577129 -30.2196680996993\\ +3.11704896098362 -37.8881022767508\\ +3.1415926535898 -35.937686895609\\ +}; +\addlegendentry{DB out47.1757} + +\end{axis} + +\begin{axis}[% +width=1.227\fwidth, +height=1.227\fheight, +at={(-0.16\fwidth,-0.135\fheight)}, +scale only axis, +xmin=0, +xmax=1, +ymin=0, +ymax=1, +axis line style={draw=none}, +ticks=none, +axis x line*=bottom, +axis y line*=left, +xmajorgrids, +ymajorgrids +] +\end{axis} +\end{tikzpicture}% \ No newline at end of file diff --git a/db_noise_mpi.tex b/db_noise_mpi.tex new file mode 100644 index 0000000..a5b0a99 --- /dev/null +++ b/db_noise_mpi.tex @@ -0,0 +1,295 @@ +% This file was created by matlab2tikz. +% +%The latest updates can be retrieved from +% http://www.mathworks.com/matlabcentral/fileexchange/22022-matlab2tikz-matlab2tikz +%where you can also make suggestions and rate matlab2tikz. +% +\definecolor{mycolor1}{rgb}{0.89020,0.10196,0.10980}% +% +\begin{tikzpicture} + +\begin{axis}[% +width=0.951\fwidth, +height=\fheight, +at={(0\fwidth,0\fheight)}, +scale only axis, +xmin=-3.14159265358979, +xmax=3.14159265358979, +xlabel style={font=\color{white!15!black}}, +xlabel={Normalized Frequency}, +ymin=-35, +ymax=0, +ytick={-200, -190, -180, -170, -160, -150, -140, -130, -120, -110, -100, -90, -80, -70, -60, -50, -40, -30, -20, -10, 0, 10}, +ylabel style={font=\color{white!15!black}}, +ylabel={normalized to 0 dB}, +axis background/.style={fill=white}, +axis x line*=bottom, +axis y line*=left, +xmajorgrids, +xminorgrids, +ymajorgrids, +yminorgrids, +legend style={legend cell align=left, align=left, draw=white!15!black} +] +\addplot [color=mycolor1, line width=1.0pt] + table[row sep=crcr]{% +-3.11704896098362 -34.3131450488072\\ +-3.09250526837745 -22.267196196234\\ +-3.06796157577129 -19.6346895905463\\ +-3.04341788316511 -18.1952524397801\\ +-3.01887419055894 -17.2592174472064\\ +-2.99433049795277 -16.5769279469376\\ +-2.9697868053466 -16.090951771503\\ +-2.94524311274043 -16.0046100828047\\ +-2.92069942013426 -15.8418247678835\\ +-2.89615572752809 -15.3149223521918\\ +-2.87161203492192 -14.658730543711\\ +-2.84706834231575 -14.1277333218487\\ +-2.82252464970958 -13.7205707193609\\ +-2.79798095710341 -13.3952353522632\\ +-2.77343726449724 -13.1831608890304\\ +-2.7243498792849 -12.9357026724654\\ +-2.69980618667873 -12.7853157461907\\ +-2.67526249407256 -12.6608293199766\\ +-2.65071880146639 -12.5994351134766\\ +-2.62617510886022 -12.5594134618066\\ +-2.60163141625405 -12.252405861374\\ +-2.55254403104171 -10.9940967498421\\ +-2.52800033843554 -10.5275867823918\\ +-2.50345664582937 -10.4307919970419\\ +-2.47891295322319 -10.7441236244153\\ +-2.45436926061703 -11.3443158297057\\ +-2.42982556801086 -11.9038524771046\\ +-2.40528187540468 -11.8977758894782\\ +-2.38073818279852 -11.4032305242715\\ +-2.35619449019234 -10.8206876678612\\ +-2.33165079758618 -10.3655775288927\\ +-2.30710710498001 -10.1411502371605\\ +-2.28256341237383 -10.0275725518735\\ +-2.25801971976767 -9.79947146240389\\ +-2.23347602716149 -9.44254273389932\\ +-2.18438864194916 -8.66113441860007\\ +-2.15984494934298 -8.32312800793783\\ +-2.11075756413064 -7.79280902100031\\ +-2.08621387152447 -7.45195580784125\\ +-2.06167017891831 -7.18469013477623\\ +-2.03712648631213 -7.11040672526116\\ +-2.01258279370596 -7.22639646388401\\ +-1.98803910109979 -7.51517990964668\\ +-1.96349540849362 -7.93800563912671\\ +-1.93895171588745 -8.29828148114878\\ +-1.91440802328128 -8.387179482289\\ +-1.88986433067511 -8.28530306362875\\ +-1.86532063806894 -8.20282444470519\\ +-1.84077694546277 -8.19381257640935\\ +-1.8162332528566 -8.1599225730401\\ +-1.79168956025043 -8.01820487442049\\ +-1.76714586764426 -7.56130073272246\\ +-1.74260217503809 -7.14061573945742\\ +-1.71805848243192 -6.62682673757766\\ +-1.69351478982575 -6.19223388107344\\ +-1.66897109721958 -5.90625549009543\\ +-1.64442740461341 -5.74369686649744\\ +-1.61988371200724 -5.70472998208211\\ +-1.59534001940106 -5.63935449974836\\ +-1.5707963267949 -5.55146369024497\\ +-1.54625263418873 -5.55135711200268\\ +-1.52170894158255 -5.61443959310917\\ +-1.49716524897639 -5.72500445090551\\ +-1.47262155637021 -5.93402555559094\\ +-1.44807786376405 -6.24769554324589\\ +-1.42353417115788 -6.51551248033976\\ +-1.3989904785517 -6.74232519069472\\ +-1.37444678594554 -6.77048169178611\\ +-1.34990309333936 -6.67391454327632\\ +-1.32535940073319 -6.51628877937085\\ +-1.27627201552085 -6.1030106496908\\ +-1.25172832291468 -5.93485117988067\\ +-1.22718463030851 -5.87756181550613\\ +-1.20264093770234 -5.85961739672202\\ +-1.17809724509618 -5.83345817542033\\ +-1.15355355249 -5.78901638459508\\ +-1.12900985988383 -5.68962723876609\\ +-1.10446616727766 -5.54337665236435\\ +-1.07992247467149 -5.36856900781121\\ +-1.05537878206532 -5.21670034258733\\ +-1.03083508945915 -5.10731269634078\\ +-1.00629139685298 -5.01734118293459\\ +-0.981747704246807 -4.97536935522933\\ +-0.957204011640641 -4.97971773581759\\ +-0.932660319034468 -5.034237466321\\ +-0.908116626428303 -5.09928298231328\\ +-0.88357293382213 -5.12622376596804\\ +-0.859029241215957 -5.12356760360715\\ +-0.834485548609791 -5.18926715032397\\ +-0.809941856003618 -5.24776542972374\\ +-0.785398163397446 -5.3398222380389\\ +-0.76085447079128 -5.36523740936401\\ +-0.736310778185107 -5.26486466619456\\ +-0.711767085578934 -5.0551647745266\\ +-0.687223392972768 -4.7404255947558\\ +-0.662679700366596 -4.32316600023172\\ +-0.63813600776043 -4.06213468290632\\ +-0.613592315154257 -3.93585700038375\\ +-0.589048622548084 -3.93578572547992\\ +-0.564504929941918 -4.09417112434627\\ +-0.539961237335746 -4.44194577474517\\ +-0.515417544729573 -4.75916484246466\\ +-0.490873852123407 -4.93749189095814\\ +-0.466330159517234 -5.05192489877623\\ +-0.441786466911061 -4.99827294144359\\ +-0.417242774304896 -4.82034500119954\\ +-0.392699081698723 -4.53631000669057\\ +-0.368155389092557 -4.16237685284171\\ +-0.343611696486384 -3.71750617836146\\ +-0.319068003880211 -3.22184120926914\\ +-0.171805848243189 -0\\ +-0.147262155637023 -2.42164758505762\\ +-0.12271846303085 -2.55785798440041\\ +-0.0981747704246843 -2.39339347291558\\ +-0.0736310778185114 -1.97663231386586\\ +-0.0490873852123386 -1.70870310785322\\ +-0.0245436926061728 -1.48162490657379\\ +0 -1.38410632608296\\ +0.0245436926061728 -1.48162490657379\\ +0.0490873852123386 -1.70870310785322\\ +0.0736310778185114 -1.97663231386586\\ +0.0981747704246843 -2.39339347291558\\ +0.12271846303085 -2.55785798440041\\ +0.147262155637023 -2.42164758505762\\ +0.171805848243189 0\\ +0.220893233455534 -1.05640831862885\\ +0.319068003880211 -3.22184120926914\\ +0.343611696486384 -3.71750617836146\\ +0.368155389092557 -4.16237685284171\\ +0.392699081698723 -4.53631000669057\\ +0.417242774304896 -4.82034500119954\\ +0.441786466911061 -4.99827294144359\\ +0.466330159517234 -5.05192489877624\\ +0.490873852123407 -4.93749189095814\\ +0.515417544729573 -4.75916484246466\\ +0.539961237335746 -4.44194577474517\\ +0.564504929941918 -4.09417112434627\\ +0.589048622548084 -3.93578572547992\\ +0.613592315154257 -3.93585700038375\\ +0.63813600776043 -4.06213468290632\\ +0.662679700366596 -4.32316600023172\\ +0.687223392972768 -4.7404255947558\\ +0.711767085578934 -5.05516477452661\\ +0.736310778185107 -5.26486466619456\\ +0.76085447079128 -5.36523740936401\\ +0.785398163397446 -5.3398222380389\\ +0.809941856003618 -5.24776542972374\\ +0.834485548609791 -5.18926715032396\\ +0.859029241215957 -5.12356760360715\\ +0.88357293382213 -5.12622376596804\\ +0.908116626428303 -5.09928298231328\\ +0.932660319034468 -5.034237466321\\ +0.957204011640641 -4.97971773581759\\ +0.981747704246807 -4.97536935522933\\ +1.00629139685298 -5.01734118293459\\ +1.03083508945915 -5.10731269634078\\ +1.05537878206532 -5.21670034258733\\ +1.07992247467149 -5.36856900781121\\ +1.10446616727766 -5.54337665236435\\ +1.12900985988383 -5.68962723876609\\ +1.15355355249 -5.78901638459508\\ +1.17809724509618 -5.83345817542033\\ +1.20264093770234 -5.85961739672201\\ +1.22718463030851 -5.87756181550613\\ +1.25172832291468 -5.93485117988067\\ +1.27627201552085 -6.10301064969081\\ +1.32535940073319 -6.51628877937085\\ +1.34990309333936 -6.67391454327632\\ +1.37444678594554 -6.77048169178612\\ +1.3989904785517 -6.74232519069473\\ +1.42353417115788 -6.51551248033977\\ +1.44807786376405 -6.24769554324589\\ +1.47262155637021 -5.93402555559094\\ +1.49716524897639 -5.72500445090551\\ +1.52170894158255 -5.61443959310918\\ +1.54625263418873 -5.55135711200268\\ +1.5707963267949 -5.55146369024497\\ +1.59534001940106 -5.63935449974836\\ +1.61988371200724 -5.7047299820821\\ +1.64442740461341 -5.74369686649744\\ +1.66897109721958 -5.90625549009542\\ +1.69351478982575 -6.19223388107344\\ +1.71805848243192 -6.62682673757765\\ +1.74260217503809 -7.14061573945742\\ +1.76714586764426 -7.56130073272246\\ +1.79168956025043 -8.01820487442049\\ +1.8162332528566 -8.1599225730401\\ +1.84077694546277 -8.19381257640935\\ +1.86532063806894 -8.20282444470519\\ +1.88986433067511 -8.28530306362875\\ +1.91440802328128 -8.387179482289\\ +1.93895171588745 -8.29828148114878\\ +1.96349540849362 -7.93800563912671\\ +1.98803910109979 -7.51517990964668\\ +2.01258279370596 -7.22639646388401\\ +2.03712648631213 -7.11040672526116\\ +2.06167017891831 -7.18469013477623\\ +2.08621387152447 -7.45195580784125\\ +2.11075756413064 -7.79280902100031\\ +2.15984494934298 -8.32312800793783\\ +2.18438864194916 -8.66113441860008\\ +2.23347602716149 -9.44254273389932\\ +2.25801971976767 -9.79947146240389\\ +2.28256341237383 -10.0275725518735\\ +2.30710710498001 -10.1411502371605\\ +2.33165079758618 -10.3655775288927\\ +2.35619449019234 -10.8206876678612\\ +2.38073818279852 -11.4032305242715\\ +2.40528187540468 -11.8977758894782\\ +2.42982556801086 -11.9038524771046\\ +2.45436926061703 -11.3443158297057\\ +2.47891295322319 -10.7441236244153\\ +2.50345664582937 -10.4307919970419\\ +2.52800033843554 -10.5275867823917\\ +2.55254403104171 -10.9940967498419\\ +2.60163141625405 -12.2524058613756\\ +2.62617510886022 -12.5594134617074\\ +2.65071880146639 -12.5994351136522\\ +2.67526249407256 -12.660829319499\\ +2.69980618667873 -12.7853157436709\\ +2.7243498792849 -12.9357026694219\\ +2.77343726449724 -13.1831605981046\\ +2.79798095710341 -13.3952355524471\\ +2.82252464970958 -13.7205723063792\\ +2.84706834231575 -14.1277364158962\\ +2.87161203492192 -14.6591344197684\\ +2.89615572752809 -15.3153254629515\\ +2.92069942013426 -15.8413568119397\\ +2.94524311274043 -16.0023943536069\\ +2.9697868053466 -16.0874143228353\\ +2.99433049795277 -16.4203948950371\\ +3.01887419055894 -17.2198129812753\\ +3.04341788316511 -18.151481900993\\ +3.06796157577129 -19.4062059756628\\ +3.09250526837745 -21.3473313091987\\ +3.11704896098362 -25.248496420222\\ +3.1415926535898 -28.3767847971192\\ +}; +\addlegendentry{DB Noise19.2665} + +\end{axis} + +\begin{axis}[% +width=1.227\fwidth, +height=1.227\fheight, +at={(-0.16\fwidth,-0.135\fheight)}, +scale only axis, +xmin=0, +xmax=1, +ymin=0, +ymax=1, +axis line style={draw=none}, +ticks=none, +axis x line*=bottom, +axis y line*=left, +xmajorgrids, +ymajorgrids +] +\end{axis} +\end{tikzpicture}% \ No newline at end of file diff --git a/db_noise_wo_mpi.tex b/db_noise_wo_mpi.tex new file mode 100644 index 0000000..386de01 --- /dev/null +++ b/db_noise_wo_mpi.tex @@ -0,0 +1,299 @@ +% This file was created by matlab2tikz. +% +%The latest updates can be retrieved from +% http://www.mathworks.com/matlabcentral/fileexchange/22022-matlab2tikz-matlab2tikz +%where you can also make suggestions and rate matlab2tikz. +% +\definecolor{mycolor1}{rgb}{0.89020,0.10196,0.10980}% +% +\begin{tikzpicture} + +\begin{axis}[% +width=0.951\fwidth, +height=\fheight, +at={(0\fwidth,0\fheight)}, +scale only axis, +xmin=-3.14159265358979, +xmax=3.14159265358979, +xlabel style={font=\color{white!15!black}}, +xlabel={Normalized Frequency}, +ymin=-35, +ymax=3, +ytick={-200, -190, -180, -170, -160, -150, -140, -130, -120, -110, -100, -90, -80, -70, -60, -50, -40, -30, -20, -10, 0, 10}, +ylabel style={font=\color{white!15!black}}, +ylabel={normalized to 0 dB}, +axis background/.style={fill=white}, +axis x line*=bottom, +axis y line*=left, +xmajorgrids, +ymajorgrids, +legend style={legend cell align=left, align=left, draw=white!15!black} +] +\addplot [color=mycolor1, line width=1.0pt] + table[row sep=crcr]{% +-3.11704896098362 -29.56690412476\\ +-3.09250526837745 -25.3644918186209\\ +-3.06796157577128 -22.30730387375\\ +-3.04341788316511 -19.9954524619813\\ +-3.01887419055894 -18.1507513447907\\ +-2.99433049795277 -16.6076585312891\\ +-2.9697868053466 -15.2461686465389\\ +-2.94524311274043 -14.2059915088232\\ +-2.92069942013426 -13.4872968374207\\ +-2.89615572752809 -12.7053099196834\\ +-2.87161203492192 -11.7799752503431\\ +-2.84706834231575 -10.9157197897258\\ +-2.82252464970958 -10.2283939059761\\ +-2.79798095710341 -9.76811722848216\\ +-2.77343726449724 -9.60018105035478\\ +-2.74889357189107 -9.63373286010098\\ +-2.7243498792849 -9.59587490688709\\ +-2.69980618667873 -9.37254772114989\\ +-2.67526249407256 -9.05870610749954\\ +-2.62617510886022 -8.52456927054195\\ +-2.60163141625405 -8.03921949291331\\ +-2.55254403104171 -6.68995050377789\\ +-2.52800033843554 -6.25353078740822\\ +-2.50345664582937 -6.19551569975192\\ +-2.4789129532232 -6.59545901902654\\ +-2.45436926061702 -7.30521855386077\\ +-2.42982556801086 -7.85202206428982\\ +-2.40528187540469 -7.71940845485185\\ +-2.38073818279852 -6.98988271739371\\ +-2.35619449019234 -6.05737033896411\\ +-2.33165079758617 -5.21147393956923\\ +-2.30710710498001 -4.65553527546583\\ +-2.28256341237383 -4.37497436709315\\ +-2.25801971976766 -4.24445427323096\\ +-2.23347602716149 -4.23783848068609\\ +-2.20893233455532 -4.38974561023634\\ +-2.18438864194915 -4.64227723733761\\ +-2.15984494934298 -4.87939584637504\\ +-2.13530125673681 -5.06102058647945\\ +-2.11075756413064 -5.1115797662322\\ +-2.08621387152447 -4.74443552790122\\ +-2.0616701789183 -4.11252781856745\\ +-2.03712648631213 -3.57844099840829\\ +-2.01258279370596 -3.15461107678053\\ +-1.98803910109979 -2.97187224999008\\ +-1.96349540849362 -3.11854439147683\\ +-1.93895171588745 -3.32783807306128\\ +-1.91440802328128 -3.42392975582494\\ +-1.88986433067511 -3.42557304147892\\ +-1.86532063806894 -3.36394467547953\\ +-1.84077694546277 -3.30855026424176\\ +-1.8162332528566 -3.14790250068943\\ +-1.79168956025043 -2.92004953531518\\ +-1.76714586764426 -2.66565529315556\\ +-1.74260217503809 -2.38358723758726\\ +-1.71805848243192 -2.21108638851551\\ +-1.69351478982575 -2.22382786445652\\ +-1.66897109721958 -2.43174036822529\\ +-1.61988371200724 -3.20868918272751\\ +-1.59534001940107 -3.40804148700824\\ +-1.5707963267949 -3.46769295384922\\ +-1.54625263418873 -3.44256929870861\\ +-1.52170894158256 -3.34829866588534\\ +-1.49716524897639 -3.18823276160444\\ +-1.47262155637021 -3.0096158207128\\ +-1.44807786376404 -2.80196796486164\\ +-1.42353417115788 -2.57991209356132\\ +-1.39899047855171 -2.39324891004939\\ +-1.37444678594553 -2.17497178218852\\ +-1.34990309333936 -1.9815178598944\\ +-1.32535940073319 -1.86783751695322\\ +-1.30081570812703 -1.86688379492939\\ +-1.27627201552085 -1.87464022701403\\ +-1.25172832291468 -1.82812211345248\\ +-1.22718463030851 -1.78495277610481\\ +-1.20264093770234 -1.80770510184558\\ +-1.15355355249 -2.01822512349233\\ +-1.12900985988383 -2.0104138728127\\ +-1.10446616727766 -1.9854246410849\\ +-1.07992247467149 -1.83098330554181\\ +-1.05537878206532 -1.40389512308032\\ +-1.03083508945915 -1.01656520978779\\ +-1.00629139685298 -0.81242159058003\\ +-0.981747704246811 -0.714551381103277\\ +-0.957204011640641 -0.751649983982947\\ +-0.908116626428299 -0.96939431010497\\ +-0.88357293382213 -1.02782313519112\\ +-0.859029241215961 -1.02764295098685\\ +-0.834485548609788 -1.04303118195184\\ +-0.809941856003618 -1.1135874216063\\ +-0.785398163397449 -1.21428662741738\\ +-0.760854470791276 -1.3250286832735\\ +-0.736310778185107 -1.37763336808698\\ +-0.711767085578938 -1.27527840883845\\ +-0.687223392972768 -1.08192664495025\\ +-0.662679700366596 -0.707175116884688\\ +-0.638136007760426 -0.440848611322355\\ +-0.613592315154257 -0.317627491607571\\ +-0.589048622548088 -0.368550433609716\\ +-0.564504929941915 -0.529567019701872\\ +-0.539961237335746 -0.740023137301691\\ +-0.515417544729576 -0.936949534039805\\ +-0.490873852123404 -1.08380683423007\\ +-0.466330159517234 -1.14951693986952\\ +-0.441786466911065 -1.16653296678408\\ +-0.417242774304896 -1.12681254908156\\ +-0.392699081698723 -1.04344044810478\\ +-0.368155389092554 -0.911358559656215\\ +-0.343611696486384 -0.673593283068104\\ +-0.319068003880215 -0.378671203309167\\ +-0.294524311274042 -0.147237291038302\\ +-0.269980618667873 -0.0687611272534738\\ +-0.245436926061704 -0.0284356029270683\\ +-0.220893233455531 -0.00158982689712062\\ +-0.196349540849361 -3.5527136788005e-15\\ +-0.171805848243192 -0.0290183239765689\\ +-0.147262155637023 -0.0677220011932569\\ +-0.12271846303085 -0.0755749861006834\\ +-0.0736310778185114 -0.150623061280683\\ +-0.0490873852123421 -0.150293248571142\\ +-0.0245436926061693 -0.075910244951956\\ +0 -0.129653251125745\\ +0.0245436926061693 -0.0759102449519595\\ +0.0490873852123421 -0.150293248571142\\ +0.0736310778185114 -0.150623061280683\\ +0.12271846303085 -0.0755749861006869\\ +0.147262155637023 -0.0677220011932569\\ +0.171805848243192 -0.0290183239765689\\ +0.196349540849361 0\\ +0.220893233455531 -0.00158982689712062\\ +0.245436926061704 -0.0284356029270718\\ +0.269980618667873 -0.0687611272534738\\ +0.294524311274042 -0.147237291038305\\ +0.319068003880215 -0.378671203309167\\ +0.343611696486384 -0.673593283068108\\ +0.368155389092554 -0.911358559656218\\ +0.392699081698723 -1.04344044810479\\ +0.417242774304896 -1.12681254908156\\ +0.441786466911065 -1.16653296678408\\ +0.466330159517234 -1.14951693986952\\ +0.490873852123404 -1.08380683423007\\ +0.515417544729576 -0.936949534039805\\ +0.539961237335746 -0.740023137301687\\ +0.564504929941915 -0.529567019701869\\ +0.589048622548088 -0.36855043360972\\ +0.613592315154257 -0.317627491607574\\ +0.638136007760426 -0.440848611322359\\ +0.662679700366596 -0.707175116884692\\ +0.687223392972768 -1.08192664495025\\ +0.711767085578938 -1.27527840883845\\ +0.736310778185107 -1.37763336808698\\ +0.760854470791276 -1.3250286832735\\ +0.785398163397449 -1.21428662741738\\ +0.809941856003618 -1.1135874216063\\ +0.834485548609788 -1.04303118195183\\ +0.859029241215961 -1.02764295098685\\ +0.88357293382213 -1.02782313519112\\ +0.908116626428299 -0.969394310104974\\ +0.957204011640641 -0.751649983982947\\ +0.981747704246811 -0.714551381103277\\ +1.00629139685298 -0.81242159058003\\ +1.03083508945915 -1.01656520978779\\ +1.05537878206532 -1.40389512308032\\ +1.07992247467149 -1.83098330554182\\ +1.10446616727766 -1.9854246410849\\ +1.12900985988383 -2.0104138728127\\ +1.15355355249 -2.01822512349233\\ +1.20264093770234 -1.80770510184558\\ +1.22718463030851 -1.78495277610481\\ +1.25172832291468 -1.82812211345248\\ +1.27627201552085 -1.87464022701403\\ +1.30081570812703 -1.86688379492939\\ +1.32535940073319 -1.86783751695322\\ +1.34990309333936 -1.98151785989441\\ +1.37444678594553 -2.17497178218852\\ +1.39899047855171 -2.3932489100494\\ +1.42353417115788 -2.57991209356132\\ +1.44807786376404 -2.80196796486164\\ +1.47262155637021 -3.0096158207128\\ +1.49716524897639 -3.18823276160444\\ +1.52170894158256 -3.34829866588535\\ +1.54625263418873 -3.44256929870861\\ +1.5707963267949 -3.46769295384922\\ +1.59534001940107 -3.40804148700824\\ +1.61988371200724 -3.20868918272751\\ +1.66897109721958 -2.43174036822529\\ +1.69351478982575 -2.22382786445652\\ +1.71805848243192 -2.21108638851551\\ +1.74260217503809 -2.38358723758726\\ +1.76714586764426 -2.66565529315556\\ +1.79168956025043 -2.92004953531518\\ +1.8162332528566 -3.14790250068943\\ +1.84077694546277 -3.30855026424176\\ +1.86532063806894 -3.36394467547953\\ +1.88986433067511 -3.42557304147892\\ +1.91440802328128 -3.42392975582495\\ +1.93895171588745 -3.32783807306128\\ +1.96349540849362 -3.11854439147683\\ +1.98803910109979 -2.97187224999008\\ +2.01258279370596 -3.15461107678053\\ +2.03712648631213 -3.57844099840829\\ +2.0616701789183 -4.11252781856745\\ +2.08621387152447 -4.74443552790122\\ +2.11075756413064 -5.1115797662322\\ +2.13530125673681 -5.06102058647945\\ +2.15984494934298 -4.87939584637504\\ +2.18438864194915 -4.64227723733761\\ +2.20893233455532 -4.38974561023634\\ +2.23347602716149 -4.23783848068609\\ +2.25801971976766 -4.24445427323096\\ +2.28256341237383 -4.37497436709315\\ +2.30710710498001 -4.65553527546583\\ +2.33165079758617 -5.21147393956922\\ +2.35619449019234 -6.05737033896411\\ +2.38073818279852 -6.98988271739371\\ +2.40528187540469 -7.71940845485185\\ +2.42982556801086 -7.85202206428983\\ +2.45436926061702 -7.30521855386077\\ +2.4789129532232 -6.59545901902653\\ +2.50345664582937 -6.19551569975192\\ +2.52800033843554 -6.25353078740822\\ +2.55254403104171 -6.68995050377788\\ +2.60163141625405 -8.03921949291331\\ +2.62617510886022 -8.52456927054182\\ +2.67526249407256 -9.05870610750129\\ +2.69980618667873 -9.37254772115121\\ +2.7243498792849 -9.59587490688876\\ +2.74889357189107 -9.63373286090274\\ +2.77343726449724 -9.60018105054644\\ +2.79798095710341 -9.76811722663992\\ +2.82252464970958 -10.2283939034122\\ +2.84706834231575 -10.9157197856076\\ +2.87161203492192 -11.7799747002882\\ +2.89615572752809 -12.7053120008311\\ +2.92069942013426 -13.4872977067247\\ +2.94524311274043 -14.2060001490953\\ +2.9697868053466 -15.246186526982\\ +3.01887419055894 -18.4109510569831\\ +3.04341788316511 -20.3062518390902\\ +3.06796157577128 -22.6467871973893\\ +3.09250526837745 -25.6049717256354\\ +3.11704896098362 -29.0319196411313\\ +3.14159265358979 -30.3572678405229\\ +}; +\addlegendentry{DB Noise54.075} + +\end{axis} + +\begin{axis}[% +width=1.227\fwidth, +height=1.227\fheight, +at={(-0.16\fwidth,-0.135\fheight)}, +scale only axis, +xmin=0, +xmax=1, +ymin=0, +ymax=1, +axis line style={draw=none}, +ticks=none, +axis x line*=bottom, +axis y line*=left, +xmajorgrids, +ymajorgrids +] +\end{axis} +\end{tikzpicture}% \ No newline at end of file diff --git a/pam6_db.tex b/pam6_db.tex new file mode 100644 index 0000000..6ebeaf2 --- /dev/null +++ b/pam6_db.tex @@ -0,0 +1,186 @@ +% This file was created by matlab2tikz. +% +%The latest updates can be retrieved from +% http://www.mathworks.com/matlabcentral/fileexchange/22022-matlab2tikz-matlab2tikz +%where you can also make suggestions and rate matlab2tikz. +% +\definecolor{mycolor1}{rgb}{0.90471,0.19176,0.19882}% +\definecolor{mycolor2}{rgb}{0.29412,0.54471,0.74941}% +\definecolor{mycolor3}{rgb}{0.37176,0.71765,0.36118}% +\definecolor{mycolor4}{rgb}{1.00000,0.54824,0.10000}% +% +\begin{tikzpicture} + +\begin{axis}[% +width=0.951\fwidth, +height=\fheight, +at={(0\fwidth,0\fheight)}, +scale only axis, +xmin=15, +xmax=40, +xlabel style={font=\color{white!15!black}}, +xlabel={Received Optical Power (dBm)}, +ymode=log, +ymin=0.001, +ymax=1, +yminorticks=true, +ylabel style={font=\color{white!15!black}}, +ylabel={Bit Error Rate (BER)}, +axis background/.style={fill=white}, +title style={font=\bfseries}, +title={Bit Error Rate vs. ROP}, +xmajorgrids, +xminorgrids, +ymajorgrids, +yminorgrids, +legend style={legend cell align=left, align=left, draw=white!15!black} +] +\addplot [color=mycolor1, mark size=2.5pt, mark=*, mark options={solid, mycolor1}] + table[row sep=crcr]{% +15 0.327010199014477\\ +16 0.311702995808577\\ +17 0.302976362038969\\ +18 0.290172900555268\\ +19 0.275210526133021\\ +20 0.263951328094344\\ +21 0.253598824873511\\ +22 0.239834843333831\\ +23 0.222991710913327\\ +24 0.213765370578083\\ +25 0.187866749545958\\ +26 0.171604235178092\\ +27 0.15502015841983\\ +28 0.131515892335633\\ +29 0.118871823008727\\ +30 0.0915567300646945\\ +31 0.0811198427608527\\ +32 0.0718601655039258\\ +33 0.0635054467668395\\ +34 0.0547899253044598\\ +35 0.029896620816824\\ +36 0.0124562018828416\\ +37 0.00786577721907566\\ +38 0.00456715827050829\\ +39 0.00261799013088214\\ +40 0.00153766551260726\\ +}; +\addlegendentry{VNLE Lw: 0.5 MHz} + +\addplot [color=mycolor2, mark size=2.5pt, mark=*, mark options={solid, mycolor2}] + table[row sep=crcr]{% +15 0\\ +16 0\\ +17 0\\ +18 0\\ +19 0\\ +20 0\\ +21 0\\ +22 0\\ +23 0\\ +24 0\\ +25 0\\ +26 0\\ +27 0\\ +28 0\\ +29 0\\ +30 0\\ +31 0\\ +32 0\\ +33 0\\ +34 0\\ +35 0\\ +36 0\\ +37 0\\ +38 0\\ +39 0\\ +40 0\\ +}; +\addlegendentry{MLSE 1 Lw: 0.5 MHz} + +\addplot [color=mycolor3, mark size=2.5pt, mark=*, mark options={solid, mycolor3}] + table[row sep=crcr]{% +15 0\\ +16 0\\ +17 0\\ +18 0\\ +19 0\\ +20 0\\ +21 0\\ +22 0\\ +23 0\\ +24 0\\ +25 0\\ +26 0\\ +27 0\\ +28 0\\ +29 0\\ +30 0\\ +31 0\\ +32 0\\ +33 0\\ +34 0\\ +35 0\\ +36 0\\ +37 0\\ +38 0\\ +39 0\\ +40 0\\ +}; +\addlegendentry{MLSE 2Lw: 0.5 MHz} + +\addplot [color=mycolor4, mark size=2.5pt, mark=*, mark options={solid, mycolor4}] + table[row sep=crcr]{% +15 0\\ +16 0\\ +17 0\\ +18 0\\ +19 0\\ +20 0\\ +21 0\\ +22 0\\ +23 0\\ +24 0\\ +25 0\\ +26 0\\ +27 0\\ +28 0\\ +29 0\\ +30 0\\ +31 0\\ +32 0\\ +33 0\\ +34 0\\ +35 0\\ +36 0\\ +37 0\\ +38 0\\ +39 0\\ +40 0\\ +}; +\addlegendentry{MLSE 3Lw: 0.5 MHz} + +\addplot [color=white!15!black, dashed, forget plot] + table[row sep=crcr]{% +15 0.0038\\ +40 0.0038\\ +}; +\end{axis} + +\begin{axis}[% +width=1.227\fwidth, +height=1.227\fheight, +at={(-0.16\fwidth,-0.135\fheight)}, +scale only axis, +xmin=0, +xmax=1, +ymin=0, +ymax=1, +axis line style={draw=none}, +ticks=none, +axis x line*=bottom, +axis y line*=left, +xmajorgrids, +ymajorgrids +] +\end{axis} +\end{tikzpicture}% \ No newline at end of file diff --git a/pam6_pf.tex b/pam6_pf.tex new file mode 100644 index 0000000..190cf44 --- /dev/null +++ b/pam6_pf.tex @@ -0,0 +1,196 @@ +% This file was created by matlab2tikz. +% +%The latest updates can be retrieved from +% http://www.mathworks.com/matlabcentral/fileexchange/22022-matlab2tikz-matlab2tikz +%where you can also make suggestions and rate matlab2tikz. +% +\definecolor{mycolor1}{rgb}{0.90471,0.19176,0.19882}% +\definecolor{mycolor2}{rgb}{0.29412,0.54471,0.74941}% +\definecolor{mycolor3}{rgb}{0.37176,0.71765,0.36118}% +\definecolor{mycolor4}{rgb}{1.00000,0.54824,0.10000}% +% +\begin{tikzpicture} + +\begin{axis}[% +width=0.951\fwidth, +height=\fheight, +at={(0\fwidth,0\fheight)}, +scale only axis, +xmin=15, +xmax=40, +xlabel style={font=\color{white!15!black}}, +xlabel={Received Optical Power (dBm)}, +ymode=log, +ymin=0.00059902281148318, +ymax=0.166016828200258, +yminorticks=true, +ylabel style={font=\color{white!15!black}}, +ylabel={Bit Error Rate (BER)}, +axis background/.style={fill=white}, +title style={font=\bfseries}, +title={Bit Error Rate vs. ROP}, +xmajorgrids, +xminorgrids, +ymajorgrids, +yminorgrids, +legend style={legend cell align=left, align=left, draw=white!15!black} +] +\addplot [color=mycolor1, line width=2.0pt, mark size=2.5pt, mark=*, mark options={solid, mycolor1}] + table[row sep=crcr]{% +15 0.16008493969837\\ +16 0.148018710347294\\ +17 0.135397560154044\\ +18 0.118006452083384\\ +19 0.094911952328202\\ +20 0.0850855474026718\\ +21 0.0778479628015516\\ +22 0.0688008084203508\\ +23 0.0471981359104626\\ +24 0.0323975844622164\\ +25 0.0267066941233258\\ +26 0.0216530251520129\\ +27 0.0173115856220635\\ +28 0.0136604981786234\\ +29 0.010617115036688\\ +30 0.00803767072150127\\ +31 0.00594925148193035\\ +32 0.00430393549305654\\ +33 0.00307915088082398\\ +34 0.0022804537988464\\ +35 0.00167379127614431\\ +36 0.00127305369675208\\ +37 0.00100184394848057\\ +38 0.000819185398428303\\ +39 0.000686879490500714\\ +40 0.00059902281148318\\ +}; +\addlegendentry{VNLE Lw: 0.5 MHz} + +\addplot [color=mycolor2, line width=2.0pt, mark size=2.5pt, mark=*, mark options={solid, mycolor2}] + table[row sep=crcr]{% +15 0.166016828200258\\ +16 0.153631814535592\\ +17 0.139560160989551\\ +18 0.1207188968257\\ +19 0.0955255600429213\\ +20 0.0862474780271488\\ +21 0.0794370227350861\\ +22 0.0710753588059826\\ +23 0.0479850261660109\\ +24 0.0336824449853977\\ +25 0.0294278203556633\\ +26 0.0260795432841729\\ +27 0.0232222912882984\\ +28 0.0207911268226788\\ +29 0.0185690126367769\\ +30 0.016517750174498\\ +31 0.0147147783268338\\ +32 0.0131875306022523\\ +33 0.0116262514367866\\ +34 0.0100031600623678\\ +35 0.00841236383082901\\ +36 0.00697852893887884\\ +37 0.00572492177977491\\ +38 0.00470189499564189\\ +39 0.00391639377849699\\ +40 0.00331771822661467\\ +}; +\addlegendentry{MLSE 1 Lw: 0.5 MHz} + +\addplot [color=mycolor3, line width=2.0pt, mark size=2.5pt, mark=*, mark options={solid, mycolor3}] + table[row sep=crcr]{% +15 0.163486347488792\\ +16 0.149813695224139\\ +17 0.13425299250961\\ +18 0.112261041987158\\ +19 0.082994350086294\\ +20 0.0737412707617834\\ +21 0.0671634794022968\\ +22 0.0587726456667211\\ +23 0.0332261458698679\\ +24 0.018219322218711\\ +25 0.0151498946067111\\ +26 0.0126402494712973\\ +27 0.0107778962318861\\ +28 0.00934718667634363\\ +29 0.00803975427910643\\ +30 0.00699832273612785\\ +31 0.00608711354347169\\ +32 0.00526619184703909\\ +33 0.00455535144407905\\ +34 0.00383096791668548\\ +35 0.00322361087478166\\ +36 0.00270202695429022\\ +37 0.00228288461605242\\ +38 0.00194291746681066\\ +39 0.001689417958183\\ +40 0.00148696561088173\\ +}; +\addlegendentry{MLSE 2Lw: 0.5 MHz} + +\addplot [color=mycolor4, line width=2.0pt, mark size=2.5pt, mark=*, mark options={solid, mycolor4}] + table[row sep=crcr]{% +15 0.162657786081141\\ +16 0.149052154919453\\ +17 0.132976813476451\\ +18 0.110511548118027\\ +19 0.0810816442047581\\ +20 0.0724869690834777\\ +21 0.0664040226552164\\ +22 0.0584625428431533\\ +23 0.0322850723515378\\ +24 0.0174209723963343\\ +25 0.0144234275217124\\ +26 0.0121558223280978\\ +27 0.0104094537953738\\ +28 0.0090009688542864\\ +29 0.00785779024825589\\ +30 0.00695804062242811\\ +31 0.00612739565717143\\ +32 0.00542141688862343\\ +33 0.00476127638738892\\ +34 0.00410460848216301\\ +35 0.0034833610562248\\ +36 0.00294163607888349\\ +37 0.00248498970375283\\ +38 0.00212522875726207\\ +39 0.00179637391524782\\ +40 0.00153523469540124\\ +}; +\addlegendentry{MLSE 3Lw: 0.5 MHz} + +\addplot [color=white!15!black, dashed, forget plot] + table[row sep=crcr]{% +15 0.0038\\ +40 0.0038\\ +}; +\addplot [color=white!15!black, dashed, forget plot] + table[row sep=crcr]{% +15 0.0038\\ +40 0.0038\\ +}; +\addplot [color=white!15!black, dashed, forget plot] + table[row sep=crcr]{% +15 0.0038\\ +40 0.0038\\ +}; +\end{axis} + +\begin{axis}[% +width=1.227\fwidth, +height=1.227\fheight, +at={(-0.16\fwidth,-0.135\fheight)}, +scale only axis, +xmin=0, +xmax=1, +ymin=0, +ymax=1, +axis line style={draw=none}, +ticks=none, +axis x line*=bottom, +axis y line*=left, +xmajorgrids, +ymajorgrids +] +\end{axis} +\end{tikzpicture}% \ No newline at end of file diff --git a/projects/HighSpeedExperiment_2024/analysis_script.m b/projects/HighSpeedExperiment_2024/analysis_script.m index c68a989..5f677a7 100644 --- a/projects/HighSpeedExperiment_2024/analysis_script.m +++ b/projects/HighSpeedExperiment_2024/analysis_script.m @@ -1,5 +1,10 @@ -if 0 +% cleanup measurement data +% remove fots from files +% merge measurments into database + + +if 1 folderPath = "/Volumes/NT-Labor/2024/sioe/High Speed Messungen Oktober/mpi_measurement"; diff --git a/projects/HighSpeedExperiment_2024/auswertung/buildDBfromMeasurements.m b/projects/HighSpeedExperiment_2024/auswertung/buildDBfromMeasurements.m new file mode 100644 index 0000000..56f3612 --- /dev/null +++ b/projects/HighSpeedExperiment_2024/auswertung/buildDBfromMeasurements.m @@ -0,0 +1,475 @@ +% Connect to SQLite database +pathToDB = 'C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\silas_labor.db'; % Update the path as needed +db = DBHandler("pathToDB",pathToDB); + +% main file path +sioe_labor_path = 'C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor'; + +% Get list of all folders (including subfolders) within sioe_labor_path +folderList = dir(fullfile(sioe_labor_path, '**', '*')); + +% Filter to include only directories and exclude '.' and '..' +folderNames = {folderList([folderList.isdir]).name}; +folderPaths = {folderList([folderList.isdir]).folder}; % Get the full paths +folderPaths = folderPaths(~ismember(folderNames, {'.', '..'})); +folderNames = folderNames(~ismember(folderNames, {'.', '..'})); + + +% Combine folder names with paths +fullFolderPaths = flip(fullfile(folderPaths, folderNames)); +only_mpi=0; + +if only_mpi + fullFolderPaths = fullFolderPaths(contains(fullFolderPaths,"mpi")); +end + +relativeFolderPaths = strrep(fullFolderPaths, sioe_labor_path, ''); + +disp(['Start to process ',num2str(numel(relativeFolderPaths)), ' folder in the directory']); + +for f = 1:numel(fullFolderPaths) + folder = fullFolderPaths{f}; + relfolder = relativeFolderPaths{f}; + + + % Get list of all files in the specified folder and subfolders + fileList = dir(folder); + + if isempty(fileList(~[fileList.isdir])) + continue + end + + matches = regexp(folder, '\d+km', 'match'); + + % Check if a match was found + if ~isempty(matches) + + length_from_foldername_km = matches{1}; % Extract the first match + length_from_foldername_km = strrep(length_from_foldername_km,'km',''); + disp(['The length is: ', length_from_foldername_km]); + else + disp('No length information found in the folder name.'); + end + + % Loop through each file and rename if necessary + for i = 1:length(fileList) + oldName = fileList(i).name; + + % Use regex to find and remove any prefix before the date string + newName = regexprep(oldName, '^[^\d]*(\d{8}_\d{6}.*)', '$1'); + + % Insert an underscore before "PAM" if missing + newName = regexprep(newName, '(\d{8}_\d{6})(PAM)', '$1_PAM'); + + % Rename the file only if a change was made + if ~strcmp(oldName, newName) + movefile(fullfile(fileList(i).folder, oldName), fullfile(fileList(i).folder, newName)); + fprintf('Renamed: %s -> %s\n', oldName, newName); + end + + + end + + + % Get new list of all files in the specified folder and subfolders, we + % renamed files so we need to get the new filenames here to work on :-) + fileList = dir(folder); + + % Initialize lists to store DataStorage objects based on size + big_wh_list = {}; % For large DataStorage objects + big_wh_filename = {}; % Corresponding filenames for large objects + small_wh_list = {}; % For small DataStorage objects + small_wh_filename = {}; % Corresponding filenames for small objects + + % Loop through each file and categorize based on the presence of 'wh' in the filename + for i = 1:length(fileList) + fileName = fileList(i).name; + if contains(fileName, 'wh') + % Load DataStorage object from file + wh = load(fullfile(fileList(i).folder, fileName)); + wh = wh.obj; + + % Classify as big or small based on dimensions + if isa(wh, 'DataStorage') + if prod(wh.dim) > 2 + big_wh_list{end+1} = wh; + big_wh_filename{end+1} = fileName; + else + small_wh_list{end+1} = wh; + small_wh_filename{end+1} = fileName; + end + end + end + end + + % Aggregate unique parameters across all large DataStorage objects + params_merge = struct; + for c = 1:numel(big_wh_list) + fnames = fieldnames(big_wh_list{c}.parameter); + for f = 1:numel(fnames) + % Initialize field if not already present + if ~isfield(params_merge, fnames{f}) + params_merge.(fnames{f}) = []; + end + + % Merge unique parameter values into params_merge + a = big_wh_list{c}.parameter.(fnames{f}).values; + b = params_merge.(fnames{f}); + vals_to_add = setdiff(a, b); % New values in a that aren't in b + b = sort([b, vals_to_add]); % Combine and sort values + params_merge.(fnames{f}) = b; + end + end + + % Process each large DataStorage object + for w = 1:numel(big_wh_list) + wh = big_wh_list{w}; + % Extract date and time for filename generation + datebody = regexp(big_wh_filename{w}, '^\d{8}_\d{6}', 'match', 'once'); + + % Get the total number of linear indices + totalIndices = wh.getLastLinIndice; + + % Initialize the waitbar + h = waitbar(0, 'Processing DataStorage...'); + + % Loop over each linear index in DataStorage + for i = 1:wh.getLastLinIndice + % Update the waitbar with the current progress + waitbar(i / totalIndices, h, sprintf('Folder: %s...\n %d of %d', string(strrep(strrep(relfolder, '\', '/'),'_',' ')), i, totalIndices)); + + % Initialize record struct for each entry and flag for non-empty data + measurementStruct = struct(); + recordIsFilled = false; + + % Loop over each storage within DataStorage and gather data + storage_names = fieldnames(wh.sto); + for s = 1:length(storage_names) + % Retrieve physical values, parameter names, and stored value + [configStruct, stored_value] = wh.getPhysAndValueByLinIndex(storage_names{s}, i); + measurementStruct.(storage_names{s}) = stored_value; + if ~isempty(stored_value) + recordIsFilled = true; % Mark as filled if value is present + end + end + + [configStruct.precomp_amp_max,configStruct.v_bias_for_pam] = getBias(configStruct.duobinary,configStruct.M); + + isMPI = isfield(measurementStruct,'i_power'); + + % Process record if it contains data + if recordIsFilled + + if ~isMPI + + % Generate filenames with conditionally formatted parameters + % Format the L parameter value (show decimal only if non-zero) + if configStruct.lambda == floor(configStruct.lambda) + L_str = sprintf('%.0f',configStruct.lambda); % No decimal part + else + L_str = sprintf('%.1f', configStruct.lambda); % Include one decimal place + end + + % Synthesize filename base with placeholders for storage types + fbody_tx = sprintf('%s_PAM_%d_L_%s_R_%d_DB_%d_ROP_%d', datebody, ... + configStruct.M, L_str, configStruct.bitrate, configStruct.duobinary, 0); + fbody_tx = strrep(fbody_tx, '.', '_'); % Replace decimal point with underscore + + fbody_rx = sprintf('%s_PAM_%d_L_%s_R_%d_DB_%d_ROP_%d', datebody, ... + configStruct.M, L_str, configStruct.bitrate, configStruct.duobinary, configStruct.rop_atten); + fbody_rx = strrep(fbody_rx, '.', '_'); + + elseif isMPI + + fbody_tx = sprintf('%s_PAM_%d_R_%d_DB_%d_I_atten_%d', datebody, ... + configStruct.M, configStruct.bitrate, configStruct.duobinary, 0); + fbody_tx = strrep(fbody_tx, '.', '_'); % Replace decimal point with underscore + + fbody_rx = sprintf('%s_PAM_%d_R_%d_DB_%d_I_atten_%d', datebody, ... + configStruct.M, configStruct.bitrate, configStruct.duobinary, configStruct.interference_atten); + fbody_rx = strrep(fbody_rx, '.', '_'); % Replace decimal point with underscore + + end + + % Check existence of different file types (bits, symbols, raw signal, rx signal) + % BIT SEQUENCE + fn_bits = [filesep, fbody_tx, '_bits.mat']; + fp_bits = fullfile([folder, fn_bits]); + if exist(fp_bits, "file") == 2 + fn_bits_rel = [relfolder, fn_bits]; + else + warning(['Bits not found at: ', fn_bits]); + end + + % SYMBOL SEQUENCE + fn_symbols = [filesep, fbody_tx, '_symbols.mat']; + fp_symbols = fullfile([folder, fn_symbols]); + if exist(fp_symbols, "file") == 2 + fn_symbols_rel = [relfolder, fn_symbols]; + else + warning(['Symbols not found at: ', fn_symbols]); + end + + % RAW RX SIGNAL + fn_rxraw = [filesep, fbody_rx, '_raw_signal.mat']; + fp_rxraw = fullfile([folder, fn_rxraw]); + missing_raw_flag = 1; % Initialize as missing + + if exist(fp_rxraw, "file") == 2 + fn_rxraw_rel = [relfolder, fn_rxraw]; + missing_raw_flag = 0; + end + + % SYNCHRONIZED RX SIGNAL + fn_rxtsynch = [filesep, fbody_rx, '_rx_signal.mat']; + fp_rxtsynch = fullfile([folder, fn_rxtsynch]); + if exist(fp_rxtsynch, "file") == 2 + fn_rxtsynch_rel = [relfolder, fn_rxtsynch]; + + matObj = matfile([folder, fn_rxtsynch]); + + % If RX signal actually contains raw signal, handle as necessary + if isprop(matObj, 'Scpe_sig_raw') + sig_rx = load([folder, fn_rxtsynch]); + if missing_raw_flag + % Save as raw signal if original raw signal is missing + Scpe_sig_raw = sig_rx.Scpe_sig_raw; + save([folder, fn_rxraw], "Scpe_sig_raw"); + delete([folder, fn_rxtsynch]); + else + % Check if raw and rx signal files are identical, then delete duplicate + sig_raw = load([folder, fn_rxraw]); + if isequal(sig_raw, sig_rx) + delete([folder, fn_rxtsynch]); + end + end + end + elseif missing_raw_flag + warning(['RX Signal not found at: ', fn_rxtsynch]); + end + end + + % Call the duplicate check function + exists = db.checkIfRunExists('Runs', 'rx_sync_path', fn_rxtsynch_rel); + + if ~exists + + % Table 1: Append to Runs + newRun = db.tables.Runs; % Get the existing table structure (an empty table) + newRun = struct(... + 'run_id', NaN, ... % Auto-increment, leave empty + 'date_of_run', datetime(datebody, 'InputFormat', 'yyyyMMdd_HHmmss'), ... + 'tx_bits_path', fn_bits_rel, ... + 'tx_symbols_path', fn_symbols_rel, ... + 'rx_sync_path', fn_rxtsynch_rel, ... + 'rx_raw_path', fn_rxraw_rel, ... + 'filename', fbody_rx ... + ); + + % Append the new row to the Runs table and get the generated run ID + run_id = db.appendToTable('Runs', newRun); + + if isMPI + + assert(configStruct.interference_atten==measurementStruct.voa.value(4),'MPI attuation differs between voa state and desired config from simulation loop.'); + interference_attenuation = configStruct.interference_atten; + interference_path_length = 2; + power_mpi_interference = measurementStruct.voa.power_state(4); + power_mpi_signal = measurementStruct.voa.power_state(3); + + rop_attenuation = 0; + wavelength = 1310; + fiber_length = 1; + + else + + interference_attenuation = NaN; + interference_path_length = NaN; + power_mpi_interference = NaN; + power_mpi_signal = NaN; + + rop_attenuation = configStruct.rop_atten; + wavelength = configStruct.lambda; + fiber_length = str2double(length_from_foldername_km); + + end + % Table 2: Append to Configurations + newConfig = db.tables.Configurations; % Get the existing table structure (an empty table) + newConfig = struct(... + 'configuration_id', NaN, ... % Auto-increment, leave empty + 'run_id', run_id, ... % Foreign key from Runs + 'unique_elab_id', "20241028-dea635ef776cd18270922ba0e52c65831ff7699f", ... % Set unique_elab_id as needed + 'bitrate', configStruct.bitrate, ... + 'symbolrate', floor(configStruct.bitrate * 1e-9 / log2(configStruct.M)) * 1e9, ... % Calculate symbolrate if available + 'pam_level', configStruct.M, ... + 'db_mode', configStruct.duobinary, ... % Assuming db_mode corresponds to duobinary mode + 'v_bias', configStruct.v_bias_for_pam, ... + 'v_awg', 2.7, ... + 'precomp_amp', configStruct.precomp_amp_max, ... + 'rop_attenuation', rop_attenuation, ... + 'wavelength', wavelength, ... + 'fiber_length', fiber_length, ... + 'is_mpi', isMPI, ... % Set false for no MPI, change as needed + 'interference_path_length', interference_path_length, ... % Set NaN if not applicable + 'interference_attenuation', interference_attenuation ... % Set NaN if not applicable + ); + + % Append the new row to the Configurations table + db.appendToTable('Configurations', newConfig); + + % Table 3: Append to Measurements + newMeas = db.tables.Measurements; % Get the existing table structure (an empty table) + newMeas = struct(... + 'measurement_id', NaN, ... % Auto-increment, leave empty + 'run_id', run_id, ... % Foreign key from Runs + 'power_laser', measurementStruct.exfo.cur_power, ... + 'power_rop', measurementStruct.rop, ... + 'power_pd_in', measurementStruct.pd_in, ... + 'power_mpi_interference', power_mpi_interference, ... + 'power_mpi_signal', power_mpi_signal, ... + 'voa_class', measurementStruct.voa, ... + 'pdfa_class', measurementStruct.pdfa, ... + 'laser_class', measurementStruct.exfo ... + ); + + % Append the new row to the Measurements table + db.appendToTable('Measurements', newMeas); + + % Table 4: Append to Bers + [ber, structure, settings] = getBers(configStruct,measurementStruct); + for t = 1:numel(ber) + + if iscell(ber(t)) + ber_ = ber(t); + ber_ = ber_{1}; + else + ber_ = ber(t); + end + + if ber_~=-1 + + newBer = struct(... + 'ber_id', NaN,... + 'run_id', run_id,... + 'processing_structure', structure(t),... + 'processing_settings', settings(t),... + 'ber', jsonencode(ber_)... + ); + db.appendToTable('BERs', newBer); + + end + + end + + end + + + end + end +end + +function [ber, structure, settings] = getBers(configStruct,measurementStruct) + +if configStruct.duobinary == 0 + + structure(1) = "vnle"; + settings(1) = EQ("Ne",[50,7,7],"Nb",[0,0,0],"training_length",4096*2,"training_loops",5,"dd_loops",5,"K",2,"DCmu",0.0,"DDmu",[0.0004 0.0004 0.0004 0.0004 ],"DFEmu",0.005,"FFEmu",0,"plotfinal",0,"ideal_dfe",1); + ber(1) = measurementStruct.ber_vnle; + + structure(2) = "vnle -> remove DC from error ""Noi{s}.signal = Noi{s}.signal - mean(Noi{s}.signal);"" -> burg(error) -> pf -> mlse"; + settings(2) = EQ("Ne",[50,7,7],"Nb",[0,0,0],"training_length",4096*2,"training_loops",5,"dd_loops",5,"K",2,"DCmu",0.0,"DDmu",[0.0004 0.0004 0.0004 0.0004 ],"DFEmu",0.005,"FFEmu",0,"plotfinal",0,"ideal_dfe",1); + ber(2) = measurementStruct.ber_vnle_mlse; + +elseif configStruct.duobinary == 1 + + structure(1) = "tx: duobinary precode; rx: db target -> mlse -> modulo"; + settings(1) = EQ("Ne",[50,7,7],"Nb",[0,0,0],"training_length",4096*2,"training_loops",5,"dd_loops",5,"K",2,"DCmu",0.0,"DDmu",[0.0004 0.0004 0.0004 0.0004 ],"DFEmu",0.005,"FFEmu",0,"plotfinal",0,"ideal_dfe",1); + ber(1) = measurementStruct.ber_db; + +elseif configStruct.duobinary == 2 + + structure(1) = "tx: duobinary precode -> encode; rx: db target -> mlse as decoder -> modulo"; + settings(1) = EQ("Ne",[50,7,7],"Nb",[0,0,0],"training_length",4096*2,"training_loops",5,"dd_loops",5,"K",2,"DCmu",0.0,"DDmu",[0.0004 0.0004 0.0004 0.0004 ],"DFEmu",0.005,"FFEmu",0,"plotfinal",0,"ideal_dfe",1); + ber(1) = measurementStruct.ber_db; + +end + + +end + +function [precomp_amp_max,v_bias_for_pam] = getBias(db,M) + +if db == 1 + ffe_only = 0; + postfilter_approach = 0; + db_channel_approach = 1; + db_coding_approach = 0; + db_precode = db_coding_approach || db_channel_approach; + if M == 4 + pulsef=1; + precomp_amp_max = -50; + v_bias_for_pam = 2.3; + pulsef = 1; + elseif M == 6 + pulsef=0; + precomp_amp_max = -50; + v_bias_for_pam = 2.3; + pulsef = 1; + elseif M == 8 + pulsef=0; + precomp_amp_max = -50; + v_bias_for_pam=2.6; + pulsef = 0; + end + +elseif db == 2 + + ffe_only = 0; + postfilter_approach = 0; + db_channel_approach = 0; + db_coding_approach = 1; + db_precode = db_coding_approach || db_channel_approach; + if M == 4 + pulsef=1; + precomp_amp_max = -38; + v_bias_for_pam = 2.8; + pulsef = 1; + elseif M == 6 + pulsef=0; + precomp_amp_max = -38; + v_bias_for_pam = 2.8; + pulsef = 1; + elseif M == 8 + pulsef=0; + precomp_amp_max = -38; + v_bias_for_pam = 2.8; + pulsef = 1; + end + +elseif db == 0 + + ffe_only = 0; + postfilter_approach = 1; + db_channel_approach = 0; + db_coding_approach = 0; + db_precode = db_coding_approach || db_channel_approach; + if M == 4 + pulsef=1; + precomp_amp_max = -37; + v_bias_for_pam = 2.3; + pulsef = 1; + elseif M == 6 + pulsef=0; + precomp_amp_max = -34; + v_bias_for_pam = 2.3; + pulsef = 1; + elseif M == 8 + pulsef=0; + precomp_amp_max = -34; + v_bias_for_pam=2.6; + pulsef = 0; + end +end +end + + diff --git a/projects/HighSpeedExperiment_2024/auswertung/checkDB.m b/projects/HighSpeedExperiment_2024/auswertung/checkDB.m new file mode 100644 index 0000000..8acd53b --- /dev/null +++ b/projects/HighSpeedExperiment_2024/auswertung/checkDB.m @@ -0,0 +1,28 @@ +function checkDB(db_path) + + db = DBHandler("pathToDB",db_path); + + num_runs = db.fetch('SELECT COUNT(*) AS total_runs FROM Runs'); + + num_configs = db.fetch('SELECT COUNT(*) AS total_configurations FROM Configurations'); + + num_meas = db.fetch('SELECT COUNT(*) AS total_measurements FROM Measurements'); + + assert((num_runs{1,1}==num_configs{1,1})&&(num_configs{1,1}==num_meas{1,1}),'Different num of entries per table') + + % should not be possible, but check if anyconfig or meas is without + % parent Run entry + unmatchedConfigs = db.fetch('SELECT COUNT(*) AS unmatched_configs FROM Configurations WHERE run_id NOT IN (SELECT run_id FROM Runs)'); + unmatchedMeasurements = db.fetch('SELECT COUNT(*) AS unmatched_measurements FROM Measurements WHERE run_id NOT IN (SELECT run_id FROM Runs)'); + + if unmatchedConfigs{1,1}~=0 || unmatchedMeasurements{1,1}~=0 + fprintf('Unmatched Configurations: %d\n', unmatchedConfigs{1,1}); + fprintf('Unmatched Measurements: %d\n', unmatchedMeasurements{1,1}); + end + + %Check for any duplicate paths + db.fetch("SELECT rx_raw_path, COUNT(*) AS occurrences FROM Runs GROUP BY rx_raw_path HAVING COUNT(*) > 1"); + db.fetch("SELECT rx_sync_path, COUNT(*) AS occurrences FROM Runs GROUP BY rx_sync_path HAVING COUNT(*) > 1"); + db.fetch("SELECT filename, COUNT(*) AS occurrences FROM Runs GROUP BY filename HAVING COUNT(*) > 1"); + +end \ No newline at end of file diff --git a/projects/HighSpeedExperiment_2024/auswertung/createConfigMenu.m b/projects/HighSpeedExperiment_2024/auswertung/createConfigMenu.m new file mode 100644 index 0000000..b413f34 --- /dev/null +++ b/projects/HighSpeedExperiment_2024/auswertung/createConfigMenu.m @@ -0,0 +1,52 @@ +function createConfigMenu(DBHandler) + % Create the main figure window + fig = uifigure('Name', 'Configuration Query', 'Position', [100, 100, 400, 300]); + + % Retrieve tables and table names using the DBHandler class + dbTables = DBHandler.getTables(); + tableNames = DBHandler.getTableNames(); + + % Assume that the DBHandler class provides methods to get the unique + % configuration options (e.g., PAM levels, bitrates, etc.) + uniqueBitrates = unique([dbTables.bitrate]); + uniquePAMLevels = unique([dbTables.pam_level]); + uniqueWavelengths = unique([dbTables.wavelength]); + uniqueDBModes = unique([dbTables.db_mode]); + + % Create dropdown menus for each configuration + lblBitrate = uilabel(fig, 'Text', 'Bitrate:', 'Position', [50, 240, 100, 20]); + dropdownBitrate = uidropdown(fig, 'Items', string(uniqueBitrates), 'Position', [150, 240, 200, 20]); + + lblPAM = uilabel(fig, 'Text', 'PAM Level:', 'Position', [50, 200, 100, 20]); + dropdownPAM = uidropdown(fig, 'Items', string(uniquePAMLevels), 'Position', [150, 200, 200, 20]); + + lblWavelength = uilabel(fig, 'Text', 'Wavelength:', 'Position', [50, 160, 100, 20]); + dropdownWavelength = uidropdown(fig, 'Items', string(uniqueWavelengths), 'Position', [150, 160, 200, 20]); + + lblDBMode = uilabel(fig, 'Text', 'DB Mode:', 'Position', [50, 120, 100, 20]); + dropdownDBMode = uidropdown(fig, 'Items', string(uniqueDBModes), 'Position', [150, 120, 200, 20]); + + % Create a button to query the configuration + btnQuery = uibutton(fig, 'Text', 'Query Configuration', 'Position', [150, 80, 200, 30], ... + 'ButtonPushedFcn', @(btn, event) queryConfiguration(DBHandler, ... + dropdownBitrate.Value, ... + dropdownPAM.Value, ... + dropdownWavelength.Value, ... + dropdownDBMode.Value)); + + % Function to handle querying the configuration + function queryConfiguration(DBHandler, bitrate, pamLevel, wavelength, dbMode) + % Convert dropdown values to numeric if necessary + bitrate = str2double(bitrate); + pamLevel = str2double(pamLevel); + wavelength = str2double(wavelength); + dbMode = str2double(dbMode); + + % Query the DBHandler class with the specified configuration + results = DBHandler.query(bitrate, pamLevel, wavelength, dbMode); + + % Display the results in the command window (or update the GUI) + disp('Query Results:'); + disp(results); + end +end diff --git a/projects/HighSpeedExperiment_2024/auswertung/runDSP.m b/projects/HighSpeedExperiment_2024/auswertung/runDSP.m new file mode 100644 index 0000000..25f8958 --- /dev/null +++ b/projects/HighSpeedExperiment_2024/auswertung/runDSP.m @@ -0,0 +1,85 @@ +basePath = 'C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\'; +db = DBHandler("pathToDB",[basePath,'silas_labor.db']); + +%1) Get path info from DB +filterParams = db.promptFilterParameters(); +filterParams = db.tables; +filterParams.Configurations = struct( ... + 'bitrate', 300e9, ... + 'db_mode', 0, ... + 'fiber_length', 10, ... + 'interference_attenuation', [], ... + 'interference_path_length', [], ... + 'is_mpi', 0, ... + 'pam_level', 4, ... + 'precomp_amp', [], ... + 'rop_attenuation', 0, ... + 'symbolrate', [], ... + 'v_awg', [], ... + 'v_bias', [], ... + 'wavelength', 1310 ... +); +% filterParams.Equalizer.eq_id = 1; + +% selectedFields = db.promptSelectFields(); +selectedFields = {'Runs.run_id','Runs.tx_bits_path', 'Runs.tx_symbols_path', 'Runs.rx_sync_path','Runs.rx_raw_path','Configurations.db_mode'}; +pathTable = db.getPathsWithFlexibleFilter(filterParams, selectedFields); +fprintf('Found %d entries for requested Configuration. IDs are: %s \n',size(pathTable,1),jsonencode(pathTable.run_id)); + +selectedBerFields = {'BERs.ber_id','BERs.run_id','BERs.eq_id'}; +berresult = db.getPathsWithFlexibleFilter(filterParams, selectedBerFields); + +%2) Process + +for i = 1:size(pathTable,1) + + tx_bits = load([basePath, char(pathTable.tx_bits_path(i))]); + tx_bits = tx_bits.Bits; + tx_symbols = load([basePath, char(pathTable.tx_symbols_path(i))]); + tx_symbols = tx_symbols.Symbols; + rx_sync = load([basePath, char(pathTable.rx_sync_path(i))]); + rx_sync = rx_sync.S; + %rx_raw = load([basePath, char(result.rx_raw_path(i))]); + + %2.1) EQ + for o = 1:numel(rx_sync) + rx_sig = rx_sync{o}; + switch pathTable.db_mode(i) + case 0 + + %normal signaling + eq_ = EQ("Ne",[50,7,7],"Nb",[0,0,0],"training_length",4096*2,"training_loops",5,"dd_loops",5,"K",2,"DCmu",0.05,"DDmu",[0.0004 0.0004 0.0004 0.0004 ],"DFEmu",0.005,"FFEmu",0,"plotfinal",0,"ideal_dfe",1); + eq_sig = vnle(eq_,rx_sig,tx_symbols); + + case 1 + %db targeting => less precompensation; pre-coded + + case 2 + %db signaling => db encoded + + end + + rx_bits = PAMmapper(4,0).demap(eq_sig); + [~,~,ber_vnle(o),~] = calc_ber(rx_bits.signal,tx_bits.signal,"skip_front",100,"skip_end",150,"returnErrorLocation",1); + + end + + %2.2) Store BER to DB Table "BERs" + % structure = ""; % Description or Comment of BER technqiue + % settings = EQ; + % + % newBer = struct(... + % 'ber_id', NaN,... + % 'run_id', current_run_id,... + % 'processing_structure', structure,... + % 'processing_settings', settings,... + % 'ber', jsonencode(ber)... + % ); + % + % db.appendToTable('BERs', newBer); +end + +%3) Look at BER that just ran + + + diff --git a/projects/HighSpeedExperiment_2024/master_auswertung_10km.m b/projects/HighSpeedExperiment_2024/master_auswertung_10km.m index 16b5039..b297037 100644 --- a/projects/HighSpeedExperiment_2024/master_auswertung_10km.m +++ b/projects/HighSpeedExperiment_2024/master_auswertung_10km.m @@ -1,5 +1,5 @@ -wh = load('C:\Users\sioe\Documents\High_Speed_Measurement_2024\10km_bitrate_complete\20241030_170224_wh.mat'); +wh = load('C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\highspeed_oct_2024\10km_bitrate_complete\20241030_170224_wh.mat'); wh = wh.obj; M_vals = wh.parameter.M.values; @@ -10,8 +10,8 @@ duobinary_vals = wh.parameter.duobinary.values; rop_atten_vals = wh.parameter.rop_atten.values; -figure(177) - +figure(18) +tiledlayout(3, 3, 'TileSpacing', 'compact', 'Padding', 'compact'); for M_choose = [8] sgtitle(['PAM',num2str(M_choose)]) @@ -36,8 +36,8 @@ for M_choose = [8] end cols = linspecer(4); - subplot(3,3,l) - + %subplot(3,3,l) +nexttile; if M_choose == 4 lst = '-'; mkr = 'o'; @@ -56,24 +56,24 @@ for M_choose = [8] fsym_vals = floor( bitrate_vals*1e-9./log2(M_choose) ); hold on - plot(bitrate_vals*1e-9,ber_db,'Color',cols(1,:),'Marker',mkr,'MarkerFaceColor','auto','DisplayName','DB pre','LineStyle',lst,'HandleVisibility',hv); - plot(bitrate_vals*1e-9,ber_db_enc,'Color',cols(2,:)','Marker',mkr,'MarkerFaceColor','auto','DisplayName','DB enc','LineStyle',lst,'HandleVisibility',hv); - plot(bitrate_vals*1e-9,ber_vnle,'Color',cols(3,:),'Marker',mkr,'MarkerFaceColor','auto','DisplayName','VNLE','LineStyle',lst,'HandleVisibility',hv); - plot(bitrate_vals*1e-9,ber_vnle_mlse,'Color',cols(4,:),'Marker',mkr,'MarkerFaceColor','auto','DisplayName','VNLE+PF+MLSE','LineStyle',lst,'HandleVisibility',hv); + plot(bitrate_vals*1e-9,ber_db,'Color',cols(1,:),'Marker',mkr,'MarkerFaceColor','auto','DisplayName','DB pre','LineStyle',lst,'HandleVisibility',hv,'LineWidth',1); + plot(bitrate_vals*1e-9,ber_db_enc,'Color',cols(2,:)','Marker',mkr,'MarkerFaceColor','auto','DisplayName','DB enc','LineStyle',lst,'HandleVisibility',hv,'LineWidth',1); + plot(bitrate_vals*1e-9,ber_vnle,'Color',cols(3,:),'Marker',mkr,'MarkerFaceColor','auto','DisplayName','VNLE','LineStyle',lst,'HandleVisibility',hv,'LineWidth',1); + plot(bitrate_vals*1e-9,ber_vnle_mlse,'Color',cols(4,:),'Marker',mkr,'MarkerFaceColor','auto','DisplayName','VNLE+PF+MLSE','LineStyle',lst,'HandleVisibility',hv,'LineWidth',1); % Continue with the rest of your plot settings yline(3.8e-3, 'DisplayName', 'HD-FEC', 'LineStyle', '--', 'HandleVisibility', 'off'); yline(2e-2, 'DisplayName', '20%', 'LineStyle', '--','LineWidth',1, 'HandleVisibility', 'off'); - xlabel('Bitrate'); - ylabel('Bit Error Rate (BER)'); + %xlabel('Bitrate'); + ylabel('BER'); title([num2str(lambda_vals(l)),' nm']); set(gca, 'yscale', 'log'); set(gca, 'Box', 'on'); grid on; grid minor; - legend('Interpreter', 'none','Location','southwest'); - ylim([1e-4,1e-1]); + % legend('Interpreter', 'none','Location','southwest','Visible','off','HandleVisibility','off'); + ylim([8e-4,1e-1]); xlim([bitrate_vals(1)*1e-9,bitrate_vals(end)*1e-9]) end diff --git a/projects/HighSpeedExperiment_2024/single_auswertung_10km.m b/projects/HighSpeedExperiment_2024/single_auswertung_10km.m new file mode 100644 index 0000000..1aeadf0 --- /dev/null +++ b/projects/HighSpeedExperiment_2024/single_auswertung_10km.m @@ -0,0 +1,83 @@ + +wh = load('C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\highspeed_oct_2024\10km_bitrate_complete\20241030_170224_wh.mat'); +wh = wh.obj; + +M_vals = wh.parameter.M.values; +M_choose = M_vals(1); +lambda_vals = wh.parameter.lambda.values; +bitrate_vals = wh.parameter.bitrate.values; +duobinary_vals = wh.parameter.duobinary.values; +rop_atten_vals = wh.parameter.rop_atten.values; + + +figure(11) + +l = 6; +for m = 1:numel(M_vals) + sgtitle(['Lambda: ',num2str(lambda_vals(l)),' nm']) + %for l = 1:numel(lambda_vals) + for b = 1:numel(bitrate_vals) + + M_choose = M_vals(m); + + + cel = wh.getStoValue('ber_vnle',M_choose(1),lambda_vals(l),bitrate_vals(b),duobinary_vals(1),rop_atten_vals(1)); + ber_vnle(b)=min(cel{1}); + + cel = wh.getStoValue('ber_vnle_mlse',M_choose(1),lambda_vals(l),bitrate_vals(b),duobinary_vals(1),rop_atten_vals(1)); + ber_vnle_mlse(b)=min(cel{1}); + + cel = wh.getStoValue('ber_db',M_choose(1),lambda_vals(l),bitrate_vals(b),duobinary_vals(2),rop_atten_vals(1)); + ber_db(b)=min(cel{1}); + + cel = wh.getStoValue('ber_db',M_choose(1),lambda_vals(l),bitrate_vals(b),duobinary_vals(3),rop_atten_vals(1)); + ber_db_enc(b)=min(cel{1}); + + dcs_ = wh.getStoValue('dcs',M_choose(1),lambda_vals(l),bitrate_vals(b),duobinary_vals(2),rop_atten_vals(1)); + + + end + + cols = linspecer(4); + subplot(1,3,m) + + if M_choose == 4 + lst = '-'; + mkr = 'o'; + hv = 'on'; + elseif M_choose == 6 + lst = '-'; + mkr = 'x'; + hv = 'on'; + elseif M_choose == 8 + lst = '-'; + mkr = 'diamond'; + hv = 'on'; + end + + + fsym_vals = floor( bitrate_vals*1e-9./log2(M_choose) ); + hold on + + plot(bitrate_vals*1e-9,ber_db,'Color',cols(1,:),'Marker',mkr,'MarkerFaceColor','auto','DisplayName','DB pre','LineStyle',lst,'HandleVisibility',hv,'LineWidth',1); + plot(bitrate_vals*1e-9,ber_db_enc,'Color',cols(2,:)','Marker',mkr,'MarkerFaceColor','auto','DisplayName','DB enc','LineStyle',lst,'HandleVisibility',hv,'LineWidth',1); + plot(bitrate_vals*1e-9,ber_vnle,'Color',cols(3,:),'Marker',mkr,'MarkerFaceColor','auto','DisplayName','VNLE','LineStyle',lst,'HandleVisibility',hv,'LineWidth',1); + plot(bitrate_vals*1e-9,ber_vnle_mlse,'Color',cols(4,:),'Marker',mkr,'MarkerFaceColor','auto','DisplayName','VNLE+PF+MLSE','LineStyle',lst,'HandleVisibility',hv,'LineWidth',1); + + % Continue with the rest of your plot settings + + yline(3.8e-3, 'DisplayName', 'HD-FEC', 'LineStyle', '--', 'HandleVisibility', 'off'); + yline(2e-2, 'DisplayName', '20%', 'LineStyle', '--','LineWidth',1, 'HandleVisibility', 'off'); + xlabel('Bitrate'); + ylabel('Bit Error Rate (BER)'); + title(['PAM ',num2str(M_choose),' ']); + set(gca, 'yscale', 'log'); + set(gca, 'Box', 'on'); + grid on; + grid minor; + legend('Interpreter', 'none','Location','southwest'); + ylim([1e-4,1e-1]); + xlim([bitrate_vals(1)*1e-9,bitrate_vals(end)*1e-9]) + + %end +end