diff --git a/commonFunctions/sensors/NoiseAnalysis/Functions/NoiseAnalysis_pink.m b/commonFunctions/sensors/NoiseAnalysis/Functions/NoiseAnalysis_pink.m index 16acacc162ed493b69dfc9f39ca15b586e33901d..755b7fe2336cf73bc4381938a47447c0d12fd0e6 100644 --- a/commonFunctions/sensors/NoiseAnalysis/Functions/NoiseAnalysis_pink.m +++ b/commonFunctions/sensors/NoiseAnalysis/Functions/NoiseAnalysis_pink.m @@ -140,14 +140,23 @@ if ~plot_val sensor_vect(sensor_number).track1.peaks_vect_f = peaks_vect_f; sensor_vect(sensor_number).track1.peaks_vect_val = factor*peaks_vect_val; sensor_vect(sensor_number).track1.variance = white_variance; + sensor_vect(sensor_number).track1.white_variance = white_variance; + sensor_vect(sensor_number).track1.fcut = fcut; + sensor_vect(sensor_number).track1.butterOrder = butterOrder; case 3 sensor_vect(sensor_number).track2.peaks_vect_f = peaks_vect_f; sensor_vect(sensor_number).track2.peaks_vect_val = factor*peaks_vect_val; sensor_vect(sensor_number).track2.variance = white_variance; + sensor_vect(sensor_number).track2.white_variance = white_variance; + sensor_vect(sensor_number).track2.fcut = fcut; + sensor_vect(sensor_number).track2.butterOrder = butterOrder; case 4 sensor_vect(sensor_number).track3.peaks_vect_f = peaks_vect_f; sensor_vect(sensor_number).track3.peaks_vect_val = factor*peaks_vect_val; sensor_vect(sensor_number).track3.variance = white_variance; + sensor_vect(sensor_number).track3.white_variance = white_variance; + sensor_vect(sensor_number).track3.fcut = fcut; + sensor_vect(sensor_number).track3.butterOrder = butterOrder; end end diff --git a/commonFunctions/sensors/Sensor1D.m b/commonFunctions/sensors/Sensor1D.m index dd2fcc5067352b8bb00bcdbc20f27e89b33f1176..1eff68a7aadfe8364997055d791298b2c2c2eee6 100644 --- a/commonFunctions/sensors/Sensor1D.m +++ b/commonFunctions/sensors/Sensor1D.m @@ -154,18 +154,18 @@ classdef Sensor1D < handle inputArg = inputArg + sqrt(obj.noiseVariance).*randn(length(inputArg),1); elseif ~isempty(obj.noiseDataTrack1) if strcmp(obj.noiseType, "white") - inputArg = inputArg + sqrt(obj.noiseDataTrack1*obj.noiseFactor).*randn(length(inputArg),1); + inputArg = inputArg + sqrt(obj.noiseDataTrack1*obj.noiseFactor^2).*randn(length(inputArg),1); elseif strcmp(obj.noiseType, "pink") for ii = 1:length(obj.noiseDataTrack1.peaks_vect_f) inputArg = inputArg + obj.noiseDataTrack1.peaks_vect_val(ii)*obj.noiseFactor*sin(2*pi*obj.noiseDataTrack1.peaks_vect_f(ii)*t + randn(1)); end % Colored noise - white_noise = sqrt(obj.noiseDataTrack1.variance*obj.noiseFactor).*randn(length(inputArg),1); + white_noise = sqrt(obj.noiseDataTrack1.variance*obj.noiseFactor^2).*randn(length(inputArg),1); [b, a] = butter(obj.colored_opts.butterOrder, obj.colored_opts.fcut, 'low'); [colored_noise, obj.colored_opts.filterStatus1] = filter(b, a, white_noise, obj.colored_opts.filterStatus1); inputArg = inputArg + colored_noise; elseif strcmp(obj.noiseType, "colored") - inputArg = inputArg + sqrt(obj.noiseDataTrack1.white_variance*obj.noiseFactor).*randn(length(inputArg),1); + inputArg = inputArg + sqrt(obj.noiseDataTrack1.white_variance*obj.noiseFactor^2).*randn(length(inputArg),1); [b, a] = butter(obj.noiseDataTrack1.butterOrder, obj.noiseDataTrack1.fcut, 'low'); [inputArg, obj.colored_opts.filterStatus1] = filter(b, a, inputArg, obj.colored_opts.filterStatus1); else diff --git a/commonFunctions/sensors/Sensor3D.m b/commonFunctions/sensors/Sensor3D.m index 512645625bd255ea60816bc7345f6559f800fd72..d338de91cd48de2fe0794b96b3969166f3253f72 100644 --- a/commonFunctions/sensors/Sensor3D.m +++ b/commonFunctions/sensors/Sensor3D.m @@ -130,23 +130,23 @@ classdef Sensor3D < Sensor1D inputArg3 = inputArg3 + sqrt(obj.noiseVariance).*randn(length(inputArg3),1); elseif ~isempty(obj.noiseDataTrack1) if strcmp(obj.noiseType, "white") - inputArg1 = inputArg1 + sqrt(obj.noiseDataTrack1*obj.noiseFactor).*randn(length(inputArg1),1); - inputArg2 = inputArg2 + sqrt(obj.noiseDataTrack2*obj.noiseFactor).*randn(length(inputArg2),1); - inputArg3 = inputArg3 + sqrt(obj.noiseDataTrack3*obj.noiseFactor).*randn(length(inputArg3),1); + inputArg1 = inputArg1 + sqrt(obj.noiseDataTrack1*obj.noiseFactor^2).*randn(length(inputArg1),1); + inputArg2 = inputArg2 + sqrt(obj.noiseDataTrack2*obj.noiseFactor^2).*randn(length(inputArg2),1); + inputArg3 = inputArg3 + sqrt(obj.noiseDataTrack3*obj.noiseFactor^2).*randn(length(inputArg3),1); elseif strcmp(obj.noiseType, "pink") for ii = 1:length(obj.noiseDataTrack1.peaks_vect_f) - inputArg1 = inputArg1 + obj.noiseDataTrack1.peaks_vect_val(ii)*sin(2*pi*obj.noiseDataTrack1.peaks_vect_f(ii)*t + randn(1)); - inputArg2 = inputArg2 + obj.noiseDataTrack2.peaks_vect_val(ii)*sin(2*pi*obj.noiseDataTrack2.peaks_vect_f(ii)*t + randn(1)); - inputArg3 = inputArg3 + obj.noiseDataTrack3.peaks_vect_val(ii)*sin(2*pi*obj.noiseDataTrack3.peaks_vect_f(ii)*t + randn(1)); + inputArg1 = inputArg1 + obj.noiseDataTrack1.peaks_vect_val(ii)*obj.noiseFactor*sin(2*pi*obj.noiseDataTrack1.peaks_vect_f(ii)*t + randn(1)); + inputArg2 = inputArg2 + obj.noiseDataTrack2.peaks_vect_val(ii)*obj.noiseFactor*sin(2*pi*obj.noiseDataTrack2.peaks_vect_f(ii)*t + randn(1)); + inputArg3 = inputArg3 + obj.noiseDataTrack3.peaks_vect_val(ii)*obj.noiseFactor*sin(2*pi*obj.noiseDataTrack3.peaks_vect_f(ii)*t + randn(1)); end % Colored noise - white_noise1 = sqrt(obj.noiseDataTrack1.variance*obj.noiseFactor).*randn(1,1); + white_noise1 = sqrt(obj.noiseDataTrack1.variance*obj.noiseFactor^2).*randn(1,1); [b1, a1] = butter(obj.noiseDataTrack1.butterOrder, obj.noiseDataTrack1.fcut, 'low'); [colored_noise1, obj.colored_opts.filterStatus1] = filter(b1, a1, white_noise1, obj.colored_opts.filterStatus1); - white_noise2 = sqrt(obj.noiseDataTrack2.variance*obj.noiseFactor).*randn(1,1); + white_noise2 = sqrt(obj.noiseDataTrack2.variance*obj.noiseFactor^2).*randn(1,1); [b2, a2] = butter(obj.noiseDataTrack2.butterOrder, obj.noiseDataTrack2.fcut, 'low'); [colored_noise2, obj.colored_opts.filterStatus2] = filter(b2, a2, white_noise2, obj.colored_opts.filterStatus2); - white_noise3 = sqrt(obj.noiseDataTrack3.variance*obj.noiseFactor).*randn(1,1); + white_noise3 = sqrt(obj.noiseDataTrack3.variance*obj.noiseFactor^2).*randn(1,1); [b3, a3] = butter(obj.noiseDataTrack3.butterOrder, obj.noiseDataTrack3.fcut, 'low'); [colored_noise3, obj.colored_opts.filterStatus3] = filter(b3, a3, white_noise3, obj.colored_opts.filterStatus3); @@ -154,13 +154,13 @@ classdef Sensor3D < Sensor1D inputArg2 = inputArg2 + colored_noise2; inputArg3 = inputArg3 + colored_noise3; elseif strcmp(obj.noiseType, "colored") - white_noise1 = sqrt(obj.noiseDataTrack1.variance*obj.noiseFactor).*randn(1,1); + white_noise1 = sqrt(obj.noiseDataTrack1.variance*obj.noiseFactor^2).*randn(1,1); [b1, a1] = butter(obj.noiseDataTrack1.butterOrder, obj.noiseDataTrack1.fcut, 'low'); [colored_noise1, obj.colored_opts.filterStatus1] = filter(b1, a1, white_noise1, obj.colored_opts.filterStatus1); - white_noise2 = sqrt(obj.noiseDataTrack2.variance*obj.noiseFactor).*randn(1,1); + white_noise2 = sqrt(obj.noiseDataTrack2.variance*obj.noiseFactor^2).*randn(1,1); [b2, a2] = butter(obj.noiseDataTrack2.butterOrder, obj.noiseDataTrack2.fcut, 'low'); [colored_noise2, obj.colored_opts.filterStatus2] = filter(b2, a2, white_noise2, obj.colored_opts.filterStatus2); - white_noise3 = sqrt(obj.noiseDataTrack3.variance*obj.noiseFactor).*randn(1,1); + white_noise3 = sqrt(obj.noiseDataTrack3.variance*obj.noiseFactor^2).*randn(1,1); [b3, a3] = butter(obj.noiseDataTrack3.butterOrder, obj.noiseDataTrack3.fcut, 'low'); [colored_noise3, obj.colored_opts.filterStatus3] = filter(b3, a3, white_noise3, obj.colored_opts.filterStatus3); 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 0b806e6b498b7f8c1b7a91c4cc43ae2c1a5c0a80..9b632ec81391874f68523f2d5c7e533909e400fd 100644 Binary files a/data/2024_Lyra_Portugal_October/Lyra_Port_sensor_vect_res.mat and b/data/2024_Lyra_Portugal_October/Lyra_Port_sensor_vect_res.mat differ 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 303eb0421c5dd69ba03fbc9f506b4228ecbea70e..76c1f745dedd2ce0cd5c9dcdaff988bc33937a5b 100644 --- a/data/2024_Lyra_Portugal_October/initSensors2024_Lyra_Portugal_October.m +++ b/data/2024_Lyra_Portugal_October/initSensors2024_Lyra_Portugal_October.m @@ -126,7 +126,7 @@ sensorSettings.magnetometer = Sensor3D(); sensorSettings.magnetometer.maxMeasurementRange = 16000; % 4000, 8000, 12000, 16000 in mG sensorSettings.magnetometer.minMeasurementRange = -16000; % -4000, -8000, -12000, -16000 in mG sensorSettings.magnetometer.resolution = 0.58; % 0.14, 0.29, 0.43, 0.58 in mG -sensorSettings.magnetometer.noiseVariance = 4; % guess in mG (original guess 2) +% sensorSettings.magnetometer.noiseVariance = 4; % guess in mG (original guess 2) sensorSettings.magnetometer.offsetX = 0; % +-1000 in mG sensorSettings.magnetometer.offsetY = 0; % +-1000 in mG sensorSettings.magnetometer.offsetZ = 0; % +-1000 in mG @@ -134,7 +134,7 @@ sensorSettings.magnetometer.walkDiffusionCoef = 0; sensorSettings.magnetometer.dt = 0.01; % sampling time sensorSettings.magnetometer.transMatrix = diag([1 1 1]); % axis transformation -sensorSettings.magnetometer.update(); +sensorSettings.magnetometer.update(Lyra_Port_sensor_vect, "main_Boardcore_LIS2MDLData.csv", 1); %% initial GPS sensor from NEO-M9N % NOTE: lon, in degree lat in degree, alt in m