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