From 3c1f1c84bca96afcb5830f3f94015067049df2c2 Mon Sep 17 00:00:00 2001 From: Stefano Belletti <stefano.belletti@skywarder.eu> Date: Fri, 17 Jan 2025 16:34:23 +0100 Subject: [PATCH] New noise color, to be finished --- .../Functions/NoiseAnalysis_colored.m | 106 ++++++++++ .../Functions/NoiseAnalysis_pink.m | 9 +- .../NoiseAnalysis/main_noiseAnalysis.m | 15 +- .../sensors/NoiseAnalysis/mat_creator.m | 182 ++++++++++++------ commonFunctions/sensors/Sensor1D.m | 12 ++ commonFunctions/sensors/Sensor3D.m | 2 + .../Lyra_Port_sensor_vect_res.mat | Bin 2538 -> 4452 bytes .../initSensors2024_Lyra_Portugal_October.m | 4 +- 8 files changed, 266 insertions(+), 64 deletions(-) create mode 100644 commonFunctions/sensors/NoiseAnalysis/Functions/NoiseAnalysis_colored.m diff --git a/commonFunctions/sensors/NoiseAnalysis/Functions/NoiseAnalysis_colored.m b/commonFunctions/sensors/NoiseAnalysis/Functions/NoiseAnalysis_colored.m new file mode 100644 index 0000000..d525ae5 --- /dev/null +++ b/commonFunctions/sensors/NoiseAnalysis/Functions/NoiseAnalysis_colored.m @@ -0,0 +1,106 @@ +function [sensor_vect] = NoiseAnalysis_colored(sensor_vect, sensor_number, track, plot_val) + +fprintf("Sensor analyzed: %s, track: %d and noise type: %s\n\n", sensor_vect(sensor_number).name, track, sensor_vect(sensor_number).noise_type); + +name = sensor_vect(sensor_number).name; +fs = sensor_vect(sensor_number).fs; + +b_left = sensor_vect(sensor_number).bounds(1); +b_right = sensor_vect(sensor_number).bounds(2); + +white_variance = sensor_vect(sensor_number).colored_data.white_variance; +fcut = sensor_vect(sensor_number).colored_data.fcut; +butterOrder = sensor_vect(sensor_number).colored_data.butterOrder; + + +%% Noise extraction +A = importdata(name).data; +signal = A(:,track); + +cut_left = ceil(length(signal)*b_left); +cut_right = ceil(length(signal)*b_right); +signal = signal(cut_left:cut_right); + +filtered_signal = movmean(signal, fs); + +% Plots +bound = 15; +y_min = min(min(signal), min(filtered_signal)); +y_max = max(max(signal), max(filtered_signal)); +if plot_val + figure(2) + subplot(1,2,1), hold on, grid on, title("Unfiltered signal"), xlabel("Samples [-]"), ylabel("Value"), ylim([y_min y_max]) + plot(signal) + subplot(1,2,2), hold on, grid on, title("Filtered signal"), xlabel("Samples [-]"), ylabel("Value"), ylim([y_min y_max]) + plot(filtered_signal(bound:end-bound)) % removed boundaries +end + +% Noise extraction +noise = signal(bound:end-bound) - filtered_signal(bound:end-bound); + +% fft of noise +tf = length(noise)/fs; +t = 0:1/fs:tf; +[G_n,f] = dft(noise,t); + +if plot_val + figure(3) + subplot(1,2,1), hold on, hold on, grid on, title("Real noise"), xlabel("f [Hz]"), ylabel("|fft(X)|") + plot(f,abs(G_n)) +end + + +%% Colored noise creator +white_noise = sqrt(white_variance)*randn(size(t)); + +[b, a] = butter(butterOrder, fcut, 'low'); +pink_noise = filter(b, a, white_noise); +noise_modeled = pink_noise; + + +%% Final plots +[G_test,f] = dft(noise_modeled,t); +if plot_val + figure(3) + subplot(1,2,2), hold on, hold on, grid on, title("Modeled noise"), xlabel("f [Hz]"), ylabel("|fft(X)|") + plot(f,abs(G_test)) +end + +y_min = min(min(noise), min(noise)); +y_max = max(max(noise_modeled), max(noise_modeled)); + +if plot_val + figure(4) + subplot(1,2,1), hold on, grid on, title("Real noise"), xlabel("Samples [-]"), ylabel("Value"), ylim([y_min y_max]) + plot(noise) + subplot(1,2,2), hold on, grid on, title("Modeled noise"), xlabel("Samples [-]"), ylabel("Value"), ylim([y_min y_max]) + plot(noise_modeled) +end + + +%% Data + +if ~plot_val + tracks = sensor_vect(sensor_number).tracks; + if tracks(1) >= 6 + track = track - (tracks(1) - 2); + end + switch track + case 2 + sensor_vect(sensor_number).track1.white_variance = white_variance*sensor_vect(sensor_number).factor; + sensor_vect(sensor_number).track1.fcut = fcut; + sensor_vect(sensor_number).track1.butterOrder = butterOrder; + case 3 + sensor_vect(sensor_number).track2.white_variance = white_variance*sensor_vect(sensor_number).factor; + sensor_vect(sensor_number).track2.fcut = fcut; + sensor_vect(sensor_number).track2.butterOrder = butterOrder; + case 4 + sensor_vect(sensor_number).track3.white_variance = white_variance*sensor_vect(sensor_number).factor; + sensor_vect(sensor_number).track3.fcut = fcut; + sensor_vect(sensor_number).track3.butterOrder = butterOrder; + end +end + + +end + diff --git a/commonFunctions/sensors/NoiseAnalysis/Functions/NoiseAnalysis_pink.m b/commonFunctions/sensors/NoiseAnalysis/Functions/NoiseAnalysis_pink.m index a1fd16d..9daf7a7 100644 --- a/commonFunctions/sensors/NoiseAnalysis/Functions/NoiseAnalysis_pink.m +++ b/commonFunctions/sensors/NoiseAnalysis/Functions/NoiseAnalysis_pink.m @@ -8,12 +8,13 @@ fs = sensor_vect(sensor_number).fs; b_left = sensor_vect(sensor_number).bounds(1); b_right = sensor_vect(sensor_number).bounds(2); +white_variance = sensor_vect(sensor_number).colored_data.white_variance; +fcut = sensor_vect(sensor_number).colored_data.fcut; +butterOrder = sensor_vect(sensor_number).colored_data.butterOrder; -%% Magic values + +%% Magic value temp_val = 0.1; -butterOrder = 1; -fcut = 0.3; -white_variance = 15; %% Noise extraction diff --git a/commonFunctions/sensors/NoiseAnalysis/main_noiseAnalysis.m b/commonFunctions/sensors/NoiseAnalysis/main_noiseAnalysis.m index 833acbe..87c4405 100644 --- a/commonFunctions/sensors/NoiseAnalysis/main_noiseAnalysis.m +++ b/commonFunctions/sensors/NoiseAnalysis/main_noiseAnalysis.m @@ -16,7 +16,12 @@ clear, clc close all sensor_single.name = "motor_Motor_CCPressureData.csv"; -sensor_single.noise_type = "white"; +sensor_single.noise_type = "colored"; +if strcmp(sensor_single.noise_type, "pink") || strcmp(sensor_single.noise_type, "colored") + sensor_single.colored_data.white_variance = 0.000025; + sensor_single.colored_data.fcut = 0.15; + sensor_single.colored_data.butterOrder = 1; +end sensor_single.track = 2; sensor_single.fs = 100; sensor_single.bound_left = 0.35; @@ -39,6 +44,8 @@ if sensor_single.noise_type == "white" sensor_vect = NoiseAnalysis_white(sensor_single, 1, sensor_single.track, 1); elseif sensor_single.noise_type == "pink" sensor_vect = NoiseAnalysis_pink(sensor_single, 1, sensor_single.track, 1); +elseif sensor_single.noise_type == "colored" + sensor_vect = NoiseAnalysis_colored(sensor_single, 1, sensor_single.track, 1); else error("Noise type is neither 'white' nor 'pink'") end @@ -64,8 +71,10 @@ for sensor_num = 1:length(Lyra_Port_sensor_vect) Lyra_Port_sensor_vect = NoiseAnalysis_white(Lyra_Port_sensor_vect, sensor_num, track, 0); elseif Lyra_Port_sensor_vect(sensor_num).noise_type == "pink" Lyra_Port_sensor_vect = NoiseAnalysis_pink(Lyra_Port_sensor_vect, sensor_num, track, 0); + elseif Lyra_Port_sensor_vect(sensor_num).noise_type == "colored" + Lyra_Port_sensor_vect = NoiseAnalysis_colored(Lyra_Port_sensor_vect, sensor_num, track, 0); else - error("Noise type is neither 'white' nor 'pink'") + error("Noise type is not 'white', 'pink' or 'colored'") end end end @@ -75,7 +84,7 @@ save(save_name, name) %% 3 - fs -name = "payload_Payload_StaticPressureData.csv"; +name = sensor_single.name; track = 1; % timestamp track timestamp = importdata(name).data; diff --git a/commonFunctions/sensors/NoiseAnalysis/mat_creator.m b/commonFunctions/sensors/NoiseAnalysis/mat_creator.m index c24e4ed..502d5e1 100644 --- a/commonFunctions/sensors/NoiseAnalysis/mat_creator.m +++ b/commonFunctions/sensors/NoiseAnalysis/mat_creator.m @@ -3,61 +3,133 @@ clear, clc close all -Lyra_Port_sensor_vect(1).name = "main_Main_StaticPressureData1.csv"; -Lyra_Port_sensor_vect(1).info = "barometer1"; -Lyra_Port_sensor_vect(1).fs = 100; -Lyra_Port_sensor_vect(1).noise_type = "pink"; -Lyra_Port_sensor_vect(1).bounds = [0.5 0.6]; -Lyra_Port_sensor_vect(1).tracks = 2; -Lyra_Port_sensor_vect(1).factor = 0.01; - -Lyra_Port_sensor_vect(2).name = "main_Main_StaticPressureData2.csv"; -Lyra_Port_sensor_vect(2).info = "barometer2"; -Lyra_Port_sensor_vect(2).fs = 100; -Lyra_Port_sensor_vect(2).noise_type = "pink"; -Lyra_Port_sensor_vect(2).bounds = [0.6 0.7]; -Lyra_Port_sensor_vect(2).tracks = 2; -Lyra_Port_sensor_vect(2).factor = 0.01; - -Lyra_Port_sensor_vect(3).name = "main_Boardcore_LPS28DFWData.csv"; -Lyra_Port_sensor_vect(3).info = "barometer3"; -Lyra_Port_sensor_vect(3).fs = 50; -Lyra_Port_sensor_vect(3).noise_type = "white"; -Lyra_Port_sensor_vect(3).bounds = [0.13 0.23]; -Lyra_Port_sensor_vect(3).tracks = 2; -Lyra_Port_sensor_vect(3).factor = 0.01; - -Lyra_Port_sensor_vect(4).name = "main_Boardcore_LSM6DSRXData.csv"; -Lyra_Port_sensor_vect(4).info = "accelerometer"; -Lyra_Port_sensor_vect(4).fs = 440; -Lyra_Port_sensor_vect(4).noise_type = "white"; -Lyra_Port_sensor_vect(4).bounds = [0.35 0.5]; -Lyra_Port_sensor_vect(4).tracks = [2 3 4]; -Lyra_Port_sensor_vect(4).factor = 1000/9.81; - -Lyra_Port_sensor_vect(5).name = "main_Boardcore_LSM6DSRXData.csv"; -Lyra_Port_sensor_vect(5).info = "initial gyroscope"; -Lyra_Port_sensor_vect(5).fs = 440; -Lyra_Port_sensor_vect(5).noise_type = "white"; -Lyra_Port_sensor_vect(5).bounds = [0.35 0.5]; -Lyra_Port_sensor_vect(5).tracks = [6 7 8]; -Lyra_Port_sensor_vect(5).factor = 1000; - -Lyra_Port_sensor_vect(6).name = "motor_Motor_CCPressureData.csv"; -Lyra_Port_sensor_vect(6).info = "initial chamber pressure"; -Lyra_Port_sensor_vect(6).fs = 100; -Lyra_Port_sensor_vect(6).noise_type = "white"; -Lyra_Port_sensor_vect(6).bounds = [0.35 0.5]; -Lyra_Port_sensor_vect(6).tracks = 2; -Lyra_Port_sensor_vect(6).factor = 0.01; - -Lyra_Port_sensor_vect(7).name = "payload_Payload_StaticPressureData.csv"; -Lyra_Port_sensor_vect(7).info = "pitot (static + total)"; -Lyra_Port_sensor_vect(7).fs = 100; -Lyra_Port_sensor_vect(7).noise_type = "pink"; -Lyra_Port_sensor_vect(7).bounds = [0.3 0.47]; -Lyra_Port_sensor_vect(7).tracks = 2; -Lyra_Port_sensor_vect(7).factor = 0.01; +% .colored_data.white_variance = 15 +% .colored_data.fcut = 0.3 +% .colored_data.butterOrder = 1 + +ii = 1; + +% Ok, check factor +Lyra_Port_sensor_vect(ii).name = "main_Boardcore_LIS2MDLData.csv"; +Lyra_Port_sensor_vect(ii).info = "Mag"; +Lyra_Port_sensor_vect(ii).fs = 100; +Lyra_Port_sensor_vect(ii).noise_type = "pink"; +Lyra_Port_sensor_vect(ii).colored_data.white_variance = 0.00003; +Lyra_Port_sensor_vect(ii).colored_data.fcut = 0.3; +Lyra_Port_sensor_vect(ii).colored_data.butterOrder = 1; +Lyra_Port_sensor_vect(ii).bounds = [0.5 0.7]; +Lyra_Port_sensor_vect(ii).tracks = [2 3 4]; +Lyra_Port_sensor_vect(ii).factor = 1000; + +ii = ii + 1; + +Lyra_Port_sensor_vect(ii).name = "main_Main_StaticPressureData1.csv"; +Lyra_Port_sensor_vect(ii).info = "barometer1"; +Lyra_Port_sensor_vect(ii).fs = 100; +Lyra_Port_sensor_vect(ii).noise_type = "pink"; +Lyra_Port_sensor_vect(ii).colored_data.white_variance = 15; +Lyra_Port_sensor_vect(ii).colored_data.fcut = 0.3; +Lyra_Port_sensor_vect(ii).colored_data.butterOrder = 1; +Lyra_Port_sensor_vect(ii).bounds = [0.5 0.6]; +Lyra_Port_sensor_vect(ii).tracks = 2; +Lyra_Port_sensor_vect(ii).factor = 0.01; + +ii = ii + 1; + +Lyra_Port_sensor_vect(ii).name = "main_Main_StaticPressureData2.csv"; +Lyra_Port_sensor_vect(ii).info = "barometer2"; +Lyra_Port_sensor_vect(ii).fs = 100; +Lyra_Port_sensor_vect(ii).noise_type = "pink"; +Lyra_Port_sensor_vect(ii).colored_data.white_variance = 15; +Lyra_Port_sensor_vect(ii).colored_data.fcut = 0.3; +Lyra_Port_sensor_vect(ii).colored_data.butterOrder = 1; +Lyra_Port_sensor_vect(ii).bounds = [0.6 0.7]; +Lyra_Port_sensor_vect(ii).tracks = 2; +Lyra_Port_sensor_vect(ii).factor = 0.01; + +ii = ii + 1; + +% Ok, check factor +Lyra_Port_sensor_vect(ii).name = "payload_Payload_StaticPressureData.csv"; +Lyra_Port_sensor_vect(ii).info = "StaticPressure"; +Lyra_Port_sensor_vect(ii).fs = 100; +Lyra_Port_sensor_vect(ii).noise_type = "pink"; +Lyra_Port_sensor_vect(ii).colored_data.white_variance = 30; +Lyra_Port_sensor_vect(ii).colored_data.fcut = 0.3; +Lyra_Port_sensor_vect(ii).colored_data.butterOrder = 1; +Lyra_Port_sensor_vect(ii).bounds = [0.3 0.4]; +Lyra_Port_sensor_vect(ii).tracks = 2; +Lyra_Port_sensor_vect(ii).factor = 0.01; + +ii = ii + 1; + +Lyra_Port_sensor_vect(ii).name = "payload_Payload_DynamicPressureData.csv"; +Lyra_Port_sensor_vect(ii).info = "DynamicPressure"; +Lyra_Port_sensor_vect(ii).fs = 100; +Lyra_Port_sensor_vect(ii).noise_type = "colored"; +Lyra_Port_sensor_vect(ii).colored_data.white_variance = 12; +Lyra_Port_sensor_vect(ii).colored_data.fcut = 0.05; +Lyra_Port_sensor_vect(ii).colored_data.butterOrder = 1; +Lyra_Port_sensor_vect(ii).bounds = [0.06 0.14]; +Lyra_Port_sensor_vect(ii).tracks = 2; +Lyra_Port_sensor_vect(ii).factor = 0.01; + +ii = ii + 1; + +Lyra_Port_sensor_vect(ii).name = "main_Boardcore_LPS28DFWData.csv"; +Lyra_Port_sensor_vect(ii).info = "barometer3"; +Lyra_Port_sensor_vect(ii).fs = 50; +Lyra_Port_sensor_vect(ii).noise_type = "white"; +Lyra_Port_sensor_vect(ii).bounds = [0.13 0.23]; +Lyra_Port_sensor_vect(ii).tracks = 2; +Lyra_Port_sensor_vect(ii).factor = 0.01; + +ii = ii + 1; + +Lyra_Port_sensor_vect(ii).name = "main_Boardcore_LSM6DSRXData.csv"; +Lyra_Port_sensor_vect(ii).info = "accelerometer"; +Lyra_Port_sensor_vect(ii).fs = 440; +Lyra_Port_sensor_vect(ii).noise_type = "white"; +Lyra_Port_sensor_vect(ii).bounds = [0.35 0.5]; +Lyra_Port_sensor_vect(ii).tracks = [2 3 4]; +Lyra_Port_sensor_vect(ii).factor = 1000/9.81; + +ii = ii + 1; + +Lyra_Port_sensor_vect(ii).name = "main_Boardcore_LSM6DSRXData.csv"; +Lyra_Port_sensor_vect(ii).info = "initial gyroscope"; +Lyra_Port_sensor_vect(ii).fs = 440; +Lyra_Port_sensor_vect(ii).noise_type = "white"; +Lyra_Port_sensor_vect(ii).bounds = [0.35 0.5]; +Lyra_Port_sensor_vect(ii).tracks = [6 7 8]; +Lyra_Port_sensor_vect(ii).factor = 1000; + +ii = ii + 1; + +% Ok, check factor +Lyra_Port_sensor_vect(ii).name = "motor_Motor_CCPressureData.csv"; +Lyra_Port_sensor_vect(ii).info = "initial chamber pressure"; +Lyra_Port_sensor_vect(ii).fs = 100; +Lyra_Port_sensor_vect(ii).noise_type = "colored"; +Lyra_Port_sensor_vect(ii).colored_data.white_variance = 0.000025; +Lyra_Port_sensor_vect(ii).colored_data.fcut = 0.15; +Lyra_Port_sensor_vect(ii).colored_data.butterOrder = 1; +Lyra_Port_sensor_vect(ii).bounds = [0.35 0.5]; +Lyra_Port_sensor_vect(ii).tracks = 2; +Lyra_Port_sensor_vect(ii).factor = 0.01; + +ii = ii + 1; + +Lyra_Port_sensor_vect(ii).name = "payload_Payload_StaticPressureData.csv"; +Lyra_Port_sensor_vect(ii).info = "pitot (static + total)"; +Lyra_Port_sensor_vect(ii).fs = 100; +Lyra_Port_sensor_vect(ii).noise_type = "pink"; +Lyra_Port_sensor_vect(ii).colored_data.white_variance = 15; +Lyra_Port_sensor_vect(ii).colored_data.fcut = 0.3; +Lyra_Port_sensor_vect(ii).colored_data.butterOrder = 1; +Lyra_Port_sensor_vect(ii).bounds = [0.3 0.47]; +Lyra_Port_sensor_vect(ii).tracks = 2; +Lyra_Port_sensor_vect(ii).factor = 0.01; save("Lyra_Port_sensor_vect") diff --git a/commonFunctions/sensors/Sensor1D.m b/commonFunctions/sensors/Sensor1D.m index 8470de0..8c7f226 100644 --- a/commonFunctions/sensors/Sensor1D.m +++ b/commonFunctions/sensors/Sensor1D.m @@ -20,6 +20,7 @@ classdef Sensor1D < handle noiseType; % White (default) or Pink noiseDataTrack1; noiseFactor; + colored_opts; noiseVariance; % Defining gaussian white noise % offset @@ -98,6 +99,13 @@ classdef Sensor1D < handle else error("Sensor not defined") end + + if strcmp(obj.noiseType, "colored") + obj.colored_opts.white_variance = vect(ii).colored_data.white_variance; + obj.colored_opts.fcut = vect(ii).colored_data.fcut; + obj.colored_opts.butterOrder = vect(ii).colored_data.butterOrder; + obj.colored_opts.filterStatus = 0; + end else if strcmp("Sensor1D", class(obj)) || strcmp("SensorFault", class(obj)) obj.noiseDataTrack1 = []; @@ -149,6 +157,10 @@ classdef Sensor1D < handle inputArg = inputArg + obj.noiseDataTrack1.peaks_vect_val(ii)*obj.noiseFactor*sin(2*pi*obj.noiseDataTrack1.peaks_vect_f(ii)*t + randn(1)); end inputArg = inputArg + sqrt(obj.noiseDataTrack1.variance*obj.noiseFactor).*randn(length(inputArg),1); + elseif strcmp(obj.noiseType, "colored") + inputArg = inputArg + sqrt(obj.colored_opts.white_variance*obj.noiseFactor).*randn(length(inputArg),1); + [b, a] = butter(obj.colored_opts.butterOrder, obj.colored_opts.fcut, 'low'); + [inputArg, obj.colored_opts.filterStatus] = filter(b, a, inputArg, obj.colored_opts.filterStatus); else error("This noise is not defined") end diff --git a/commonFunctions/sensors/Sensor3D.m b/commonFunctions/sensors/Sensor3D.m index 14955ff..bada245 100644 --- a/commonFunctions/sensors/Sensor3D.m +++ b/commonFunctions/sensors/Sensor3D.m @@ -142,6 +142,8 @@ classdef Sensor3D < Sensor1D inputArg1 = inputArg1 + sqrt(obj.noiseDataTrack1.variance*obj.noiseFactor).*randn(length(inputArg1),1); inputArg2 = inputArg2 + sqrt(obj.noiseDataTrack2.variance*obj.noiseFactor).*randn(length(inputArg2),1); inputArg3 = inputArg3 + sqrt(obj.noiseDataTrack3.variance*obj.noiseFactor).*randn(length(inputArg3),1); + elseif strcmp(obj.noiseType, "colored") + error("Yet to be implemented") else error("This noise is not defined") end diff --git a/data/2024_Lyra_Portugal_October/Lyra_Port_sensor_vect_res.mat b/data/2024_Lyra_Portugal_October/Lyra_Port_sensor_vect_res.mat index c315505e15c35d9721647dc0d0bbb9264d6f17f5..2c3b98ad9def8becb8ced991dfe7f38b560308d0 100644 GIT binary patch delta 4408 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 YFZ=IL=l%7o;^Y1IN58ShaPg`F0J6}?cmMzZ delta 2479 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 Pa^BB%`N{hw<-{KVk^toO diff --git a/data/2024_Lyra_Portugal_October/initSensors2024_Lyra_Portugal_October.m b/data/2024_Lyra_Portugal_October/initSensors2024_Lyra_Portugal_October.m index b36ed6b..303eb04 100644 --- a/data/2024_Lyra_Portugal_October/initSensors2024_Lyra_Portugal_October.m +++ b/data/2024_Lyra_Portugal_October/initSensors2024_Lyra_Portugal_October.m @@ -155,7 +155,7 @@ sensorSettings.comb_chamber.minMeasurementRange = 0; sensorSettings.comb_chamber.resolution = 1; % random value stolen from baro sensorSettings.comb_chamber.offset = 0; -sensorSettings.comb_chamber.update(Lyra_Port_sensor_vect, "motor_Motor_TopTankPressureData.csv", 1); +sensorSettings.comb_chamber.update(Lyra_Port_sensor_vect, "motor_Motor_CCPressureData.csv", 1); %% pitot @@ -171,7 +171,7 @@ sensorSettings.pitot_total = Sensor1D(); sensorSettings.pitot_total.maxMeasurementRange = 2*1034.21; % mbar (30 psi) sensorSettings.pitot_total.minMeasurementRange = 0; sensorSettings.pitot_total.bit = 12; -sensorSettings.pitot_total.update(Lyra_Port_sensor_vect, "payload_Payload_StaticPressureData.csv", 1); +sensorSettings.pitot_total.update(Lyra_Port_sensor_vect, "payload_Payload_DynamicPressureData.csv", 1); %% total sensor initialization % -- GitLab