From 8820a8687ad2c8b4fc4600dd85756657206735fc Mon Sep 17 00:00:00 2001 From: Thomas Lambert <t.lambert@uliege.be> Date: Fri, 9 Dec 2022 12:03:16 +0100 Subject: [PATCH] feat(static): add support for static results --- processall.m | 52 ++++++++++++++++++++++++++-------------------- utils/loadtunnel.m | 8 +++++-- utils/savecsv.m | 33 ++++++++++++++++++----------- 3 files changed, 56 insertions(+), 37 deletions(-) diff --git a/processall.m b/processall.m index c4180ee..0356a4b 100644 --- a/processall.m +++ b/processall.m @@ -55,40 +55,43 @@ function ExpData = processall(idFile) ExpData(iTest).freq = idTable(iTest, :).freq; fprintf('Processing file: %s\n', ExpData(iTest).tunnelFile); - % Load and clean experimental data - [arduShort, arduFull] = loadardu(ExpData(iTest).arduFile); + + % Load, clean and sync experimental data tunnelData = loadtunnel(ExpData(iTest).tunnelFile, ... CUTOFF_MULTIPLIER * idTable(iTest, :).freq); - % Sync the two data sources - [arduShort, tunnelData, ExpData(iTest).arduStart, ExpData(iTest).tunnelStart] = ... - syncdata(arduShort, tunnelData); - - % Save the cleaned data - savecsv(ExpData(iTest), arduShort, tunnelData); - - % TODO + if ~isempty(ExpData(iTest).arduFile) % Not for static tests (no ardu data) + [arduShort, ~] = loadardu(ExpData(iTest).arduFile); + [arduShort, tunnelData, ExpData(iTest).arduStart, ExpData(iTest).tunnelStart] = ... + syncdata(arduShort, tunnelData); + + % Save stuff for later use + ExpData(iTest).time = arduShort(:, 1); + ExpData(iTest).Front.angles = arduShort(:, 2); + ExpData(iTest).Front.power = arduShort(:, 4); + ExpData(iTest).Aft.power = arduShort(:, 5); + + else + arduShort = []; + arduFull = []; + + % Save stuff for later use + ExpData(iTest).time = 0:1 / 1000:(size(tunnelData, 1) - 1) / 1000; % FIXME: no magic NB + ExpData(iTest).Front.angles = ones(size(ExpData(iTest).time)) * ... + idTable(iTest, :).Angles1; + ExpData(iTest).Aft.angles = ones(size(ExpData(iTest).time)) * ... + idTable(iTest, :).Angles2; + ExpData(iTest).Front.power = []; + ExpData(iTest).Aft.power = []; - % Split datasets between front and aft [FIXME]: Get rid of old deprecated variables - ExpData(iTest).front.arduFull = arduFull(:, [1:3, 6]); - ExpData(iTest).aft.arduFull = arduFull(:, [1, 4:5, 7]); - ExpData(iTest).front.arduShort = arduShort(:, [1:2, 4]); - ExpData(iTest).aft.arduShort = arduShort(:, [1, 3, 5]); - ExpData(iTest).front.tunnelData = tunnelData(:, 1:6); - ExpData(iTest).aft.tunnelData = tunnelData(:, 7:end); + end % Better variables - ExpData(iTest).time = arduShort(:, 1); ExpData(iTest).sampling = 1 / diff(ExpData(iTest).time(1:2)); - ExpData(iTest).Front.angles = arduShort(:, 2); ExpData(iTest).Front.forces = tunnelData(:, 1:3); ExpData(iTest).Front.moments = tunnelData(:, 4:6); - ExpData(iTest).Front.power = arduShort(:, 4); - - ExpData(iTest).Aft.angles = arduShort(:, 3); ExpData(iTest).Aft.forces = tunnelData(:, 6 + (1:3)); ExpData(iTest).Aft.moments = tunnelData(:, 6 + (4:6)); - ExpData(iTest).Aft.power = arduShort(:, 5); ExpData(iTest).Testcase.dx = idTable(iTest, :).dstX; ExpData(iTest).Testcase.airspeed = idTable(iTest, :).v_air; @@ -100,6 +103,9 @@ function ExpData = processall(idFile) plottime(ExpData(iTest), 'arduShort', false); end + % Save the cleaned data + savecsv(ExpData(iTest), arduShort, tunnelData); + end % Save ExpData structure to MAT file diff --git a/utils/loadtunnel.m b/utils/loadtunnel.m index 28e827f..4a8cee4 100644 --- a/utils/loadtunnel.m +++ b/utils/loadtunnel.m @@ -41,8 +41,12 @@ function tunnelData = loadtunnel(tunnelFile, cutoff) % Convert into table raw = table2array(tunnelTable); - % Filter - filtered = filterwt(raw, cutoff, SAMPLING); + % Filter flapping signal, not needed in static + if cutoff ~= 0 + filtered = filterwt(raw, cutoff, SAMPLING); + else + filtered = raw; + end % Calibrate calibrated = calibrate(filtered); diff --git a/utils/savecsv.m b/utils/savecsv.m index 5e27167..544a88e 100644 --- a/utils/savecsv.m +++ b/utils/savecsv.m @@ -11,9 +11,22 @@ function savecsv(ExpData, arduShort, tunnelData) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Constants and defaults - TABLE_HEADER = {'Time', 'Angle1', 'Angle2', 'Power1', 'Power2', ... - 'Fx1', 'Fy1', 'Fz1', 'Mx1', 'My1', 'Mz1', ... - 'Fx2', 'Fy2', 'Fz2', 'Mx2', 'My2', 'Mz2'}; + + FULL_TABLE_HEADER = {'Time', 'Angle1', 'Angle2', 'Power1', 'Power2', ... + 'Fx1', 'Fy1', 'Fz1', 'Mx1', 'My1', 'Mz1', ... + 'Fx2', 'Fy2', 'Fz2', 'Mx2', 'My2', 'Mz2'}; + STATIC_TABLE_HEADER = {'Time', ... + 'Fx1', 'Fy1', 'Fz1', 'Mx1', 'My1', 'Mz1', ... + 'Fx2', 'Fy2', 'Fz2', 'Mx2', 'My2', 'Mz2'}; + SAMPLING = 1000; + + if isempty(arduShort) + tableHeader = STATIC_TABLE_HEADER; + time = (0:1 / SAMPLING:(size(tunnelData, 1) - 1) / SAMPLING)'; + else + tableHeader = FULL_TABLE_HEADER; + time = arduShort(:, 1); + end % Make filename [path, ~] = fileparts(ExpData.tunnelFile); @@ -25,18 +38,14 @@ function savecsv(ExpData, arduShort, tunnelData) if ~exist(string(savefile), 'file') % Merges the two arrays together and put it in table - cleanedArray = formatarrays(arduShort, tunnelData); + size(time); + size(arduShort); + size(tunnelData); + cleanedArray = [time, arduShort, tunnelData]; cleanedTable = array2table(cleanedArray, ... - 'VariableNames', TABLE_HEADER); + 'VariableNames', tableHeader); % Write table to file writetable(cleanedTable, string(savefile)); end end - -function merged = formatarrays(arduShort, tunnelData) - % FORMATTABLE Merges and reformat the two arrays into a single one - - merged = [arduShort, tunnelData]; - -end -- GitLab