From 425daa96580ba5b584b4cc4e9b3504507d63753b Mon Sep 17 00:00:00 2001
From: Riccardo Cadamuro <92547831+RicCada@users.noreply.github.com>
Date: Sun, 24 Sep 2023 14:19:53 +0200
Subject: [PATCH] CA postprocessing - WIP

---
 .../postprocessing/AFD/CA_alpha0.mat          | Bin 0 -> 5335 bytes
 .../postprocessing/AFD/estimationCA.m         | 117 ++++++++++++++++++
 .../postprocessing/AFD/mainPostprocess.m      |  47 +++----
 .../postprocessing/AFD/trajectory.m           |  26 ++++
 4 files changed, 157 insertions(+), 33 deletions(-)
 create mode 100644 RoccarasoFlight/postprocessing/AFD/CA_alpha0.mat
 create mode 100644 RoccarasoFlight/postprocessing/AFD/estimationCA.m
 create mode 100644 RoccarasoFlight/postprocessing/AFD/trajectory.m

diff --git a/RoccarasoFlight/postprocessing/AFD/CA_alpha0.mat b/RoccarasoFlight/postprocessing/AFD/CA_alpha0.mat
new file mode 100644
index 0000000000000000000000000000000000000000..bd42c5d2d01da8316b015d2f7c91a2fb1e4a218d
GIT binary patch
literal 5335
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
V!e@ILS5>ozem^M3kZJ5?1pt85imLzs

literal 0
HcmV?d00001

diff --git a/RoccarasoFlight/postprocessing/AFD/estimationCA.m b/RoccarasoFlight/postprocessing/AFD/estimationCA.m
new file mode 100644
index 0000000..a7e55b8
--- /dev/null
+++ b/RoccarasoFlight/postprocessing/AFD/estimationCA.m
@@ -0,0 +1,117 @@
+
+%% CA estimation 
+NPOINTS = 1000; 
+MSTRUCT = 25.2885;   % [kg] Gemini structural mass
+AREF    = 0.15^2 * pi * 0.25; 
+PROP_FINAL_MASS = 0.7799 + 0.4445;     % [kg] initial propellant mass
+tIGN = 0.97500;                        % Ignition time in the thrust curve
+tCO = 5.32702;                         % Cutoff time in the thrsut curve
+mDot = 0.9660;                         % [kg/s] Averaged propellant mass flow rate 
+DELTA_TIME = 0.4988; 
+load("CA_alpha0.mat"); 
+
+% acceleration raw
+indexApoIMU = find(main.IMU(:, 1)> main.tApogee, 1, 'first'); 
+accXB_raw = main.IMU(1:indexApoIMU ,2); 
+tAcc = main.IMU(1:indexApoIMU, 1); 
+accXB = movmean(accXB_raw, 30);
+
+% Motor data
+load("../RPS/cleanData/ROC-02/engineFlightData.mat"); 
+timeThrust = flightData.timeThrust;  
+indexTimeThrust = and(timeThrust > tIGN, timeThrust < tCO); 
+timeThrust = timeThrust(indexTimeThrust); 
+timeThrust = timeThrust - timeThrust(1) - DELTA_TIME;
+
+Thrust = flightData.Thrust(indexTimeThrust);  
+
+tNodal = [timeThrust(1), -0.2248, 3.33322, timeThrust(end)]; 
+indexTransIGN = and(timeThrust>=tNodal(1), timeThrust<tNodal(2)); 
+indexTransCO = and(timeThrust>tNodal(3), timeThrust<=tNodal(4)); 
+
+thrustTransIGN = Thrust(indexTransIGN); 
+thrustTransCO  = Thrust(indexTransCO); 
+
+offsetIGN = thrustTransIGN(1); 
+offsetCO = thrustTransCO(end);
+
+thrustTransIGN = thrustTransIGN - offsetIGN; 
+thrustTransCO = thrustTransCO - offsetCO; 
+
+thrustTransIGN = thrustTransIGN * (1 + offsetIGN/thrustTransIGN(end));
+thrustTransCO  = thrustTransCO  * (1 + offsetCO/thrustTransCO(1)); 
+
+Thrust = [thrustTransIGN; Thrust(and(timeThrust>=tNodal(2), timeThrust<=tNodal(3))); thrustTransCO]; 
+mMotor  = linspace(PROP_FINAL_MASS + mDot*(tCO - tIGN), PROP_FINAL_MASS, sum(indexTimeThrust)); 
+timeThrust = timeThrust - timeThrust(1); 
+
+% Velocity
+tNas = main.NASData(1:main.NASApogeeIndex, 1); 
+altNas = -main.NASData(1:main.NASApogeeIndex, 4); 
+velNas = vecnorm(main.NASData(1:main.NASApogeeIndex, 5:7), 2, 2); 
+
+tPitot = main.PITOT(:, 1); 
+vPitot = main.PITOT(:, 3); 
+
+% Air density
+[~, vSon, ~, rho] = atmosisa(altNas + alt0); 
+
+% Mach number
+mach = velNas./vSon; 
+
+% Normalize data
+timeRef = linspace(max([tNas(1), tAcc(1), tPitot(1)]), min([tNas(end), tAcc(end), tPitot(end)]) , NPOINTS); 
+indexEndThrust = find(timeRef > timeThrust(end), 1, 'first');
+
+accXBRef = interp1(tAcc, accXB, timeRef); 
+
+ThrustRef = zeros(1, NPOINTS); 
+ThrustRef(1:indexEndThrust)  = interp1(timeThrust, Thrust, timeRef(1:indexEndThrust)); 
+
+mRocket = (mMotor(end) + MSTRUCT) * ones(1, NPOINTS); 
+mRocket(1:indexEndThrust) = interp1(timeThrust, mMotor, timeRef(1:indexEndThrust)) + MSTRUCT; 
+
+rhoRef = interp1(tNas, rho, timeRef); 
+
+velRef = interp1(tNas, movmean(velNas, 10), timeRef); 
+
+velPitRef = interp1(tPitot, vPitot, timeRef); 
+
+altRef = interp1(tNas, altNas, timeRef); 
+
+% Compute CA
+CA = (ThrustRef - mRocket.*accXBRef) ./ (0.5 .* rhoRef .* velRef.^2 * AREF); 
+
+CA_pitot = (ThrustRef - mRocket.*accXBRef) ./ (0.5 .* rhoRef .* velPitRef.^2 * AREF); 
+
+tCO = tCO -1.8519;  
+indexCO = find(ThrustRef == 0, 1, 'first'); 
+
+mRocketNoPwr = mRocket(indexCO:end); 
+CANoPwr = CA(indexCO:end); 
+CA_100ARB = zeros(1, length(CANoPwr)); 
+CA_0ARB   = zeros(1, length(CANoPwr)); 
+
+for i = 1:length(CANoPwr)
+    [~, indexMach] = nearestValSorted(MachRef, mach(i));
+    [~, indexAlt] = nearestValSorted(AltRef, altRef(i));
+    CA_100ARB(i) = CA_MD(indexMach, indexAlt, 3); 
+    CA_0ARB(i) = CA_MD(indexMach, indexAlt, 1); 
+end
+
+figure
+plot(timeRef(indexCO:end),CANoPwr); 
+hold on
+plot(timeRef(indexCO:end), CA_pitot(indexCO:end)); 
+plot(timeRef(indexCO:end), CA_100ARB); 
+plot(timeRef(indexCO:end), CA_0ARB); 
+xlabel('Time [s]'); 
+ylabel('CA [-]'); 
+title('CA from telemetry'); 
+grid on
+legend('NAS', 'PITOT', '100% ARB', '0% ARB', 'Location','southoutside', 'Orientation', 'horizontal'); 
+
+
+
+
+
diff --git a/RoccarasoFlight/postprocessing/AFD/mainPostprocess.m b/RoccarasoFlight/postprocessing/AFD/mainPostprocess.m
index c3dc585..8ce8319 100644
--- a/RoccarasoFlight/postprocessing/AFD/mainPostprocess.m
+++ b/RoccarasoFlight/postprocessing/AFD/mainPostprocess.m
@@ -2,46 +2,27 @@ clear;
 clc; 
 close all; 
 
+%% Select options
+opt.flagTraj = false; 
+opt.flagCA = true; 
+alt0 = 1414; 
+
 %% adding path and recall data
 addpath("..\commonFunctions\"); 
+addpath("..\..\..\..\msa-toolkit\commonFunctions\miscellaneous\"); 
 main = importData('main'); 
 
+%% Trajectory
 
-%% 2D TRAJECTORY - GPS
-tGps = main.GPS(:, 1); 
-lat = main.GPS(:, 2); 
-lon = main.GPS(:, 3); 
-altGps = main.GPS(:, 4); 
-
-indApo = find(tGps > main.tApogee, 1, 'first');
-
-figure
-geoplot(lat, lon, 'LineWidth', 2); 
-geobasemap satellite
-hold on
-geoplot(lat(1), lon(1), 'Marker','o', 'MarkerSize', 10, 'LineWidth',2); 
-geoplot(lat(indApo), lon(indApo),  'Marker','square', 'MarkerSize', 10, 'LineWidth',2); 
-geoplot(lat(end), lon(end), 'Marker','x', 'MarkerSize', 10, 'LineWidth',2, 'Color', 'r'); 
-legend('Trajectory', 'Liftoff', 'Apogee', 'Landing'); 
-
-
-%% 3D TRAJECTORY - GPS
-alt = -main.NASData(:, 4); 
-tNas = main.NASData(:, 1); 
-altNasInterp = interp1(tNas, alt, tGps); 
-alt0 = atmospalt(main.RCS_PRESSURE(1, 2)); 
-
-uif = uifigure;
-g = geoglobe(uif);
-geoplot3(g,lat,lon,altNasInterp + alt0,'b','Linewidth',2.5);
-
-%% CA estimation 
-
-
-
-
+if opt.flagTraj 
+    trajectory; 
+end
 
+%% CA Estimation
 
+if opt.flagCA
+    estimationCA; 
+end
 
 
 
diff --git a/RoccarasoFlight/postprocessing/AFD/trajectory.m b/RoccarasoFlight/postprocessing/AFD/trajectory.m
new file mode 100644
index 0000000..2d4a64c
--- /dev/null
+++ b/RoccarasoFlight/postprocessing/AFD/trajectory.m
@@ -0,0 +1,26 @@
+%% 2D TRAJECTORY - GPS
+tGps = main.GPS(:, 1); 
+lat = main.GPS(:, 2); 
+lon = main.GPS(:, 3); 
+altGps = main.GPS(:, 4); 
+
+indApo = find(tGps > main.tApogee, 1, 'first');
+
+figure
+geoplot(lat, lon, 'LineWidth', 2); 
+geobasemap satellite
+hold on
+geoplot(lat(1), lon(1), 'Marker','o', 'MarkerSize', 10, 'LineWidth',2); 
+geoplot(lat(indApo), lon(indApo),  'Marker','square', 'MarkerSize', 10, 'LineWidth',2); 
+geoplot(lat(end), lon(end), 'Marker','x', 'MarkerSize', 10, 'LineWidth',2, 'Color', 'r'); 
+legend('Trajectory', 'Liftoff', 'Apogee', 'Landing'); 
+
+
+%% 3D TRAJECTORY - GPS
+altNas = -main.NASData(:, 4); 
+tNas = main.NASData(:, 1); 
+altNasInterp = interp1(tNas, altNas, tGps); 
+
+uif = uifigure;
+g = geoglobe(uif);
+geoplot3(g,lat,lon,altNasInterp + alt0,'b','Linewidth',2.5);
\ No newline at end of file
-- 
GitLab