more analysis
This commit is contained in:
99
Matlab_post_analysis/final_sequence.m
Normal file
99
Matlab_post_analysis/final_sequence.m
Normal file
@@ -0,0 +1,99 @@
|
||||
close all; clear all;
|
||||
%% Final Static Fire Sequence
|
||||
|
||||
% Time vector
|
||||
dt = 0.0001; % or 0.01, etc.
|
||||
t = -8:dt:14; % colon, not linspace
|
||||
|
||||
|
||||
%% Define sequence for each valve
|
||||
% [ start_time, target_value, ramp_duration ]
|
||||
|
||||
N2_events = [
|
||||
-3 100 0
|
||||
];
|
||||
|
||||
|
||||
Fuel_events = [
|
||||
1.5 25 0.5
|
||||
3.5 100 1.5
|
||||
8 0 0.5
|
||||
];
|
||||
|
||||
LOX_events = [
|
||||
1.8 25 0.2
|
||||
3.5 100 1.5
|
||||
8 0 0.3
|
||||
];
|
||||
|
||||
Pyro_events = [
|
||||
0 100 0.01
|
||||
1.8 0 0.01
|
||||
];
|
||||
|
||||
%% Generate profiles (initial value = 0)
|
||||
N2 = valve_profile(t, N2_events, 0);
|
||||
Fuel = valve_profile(t, Fuel_events, 0);
|
||||
LOX = valve_profile(t, LOX_events, 0);
|
||||
Pyro = valve_profile(t, Pyro_events, 0);
|
||||
|
||||
%% Plot
|
||||
% Existing
|
||||
figure; hold on; grid on; box on;
|
||||
plot(t, N2, '--', 'LineWidth', 1, 'Color', [0 0 1 0.5]);
|
||||
plot(t, Fuel, '-', 'LineWidth', 1.5);
|
||||
plot(t, LOX, '-', 'LineWidth', 1.5);
|
||||
%plot(t, Pyro, '--', 'LineWidth', 1);
|
||||
plot([0,0],[0,100],'-', 'LineWidth', 2,'Color', [1 0 0 0.5]); %Ignition
|
||||
|
||||
|
||||
ax = gca;
|
||||
ax.XTick = -4:1:10;
|
||||
ax.XMinorTick = 'on';
|
||||
ax.XAxis.MinorTickValues = -4:0.1:10;
|
||||
ax.XMinorGrid = 'on';
|
||||
ax.MinorGridAlpha = 0.15; % transparency
|
||||
ax.MinorGridLineStyle = '-'; % solid but faint
|
||||
ax.MinorGridColor = [0.8 0.8 0.8];
|
||||
|
||||
xlabel('Time [s]');
|
||||
ylabel('Opening[%]');
|
||||
legend('Nitrogen','Ethanol','LOX','Ignition','Location','best');
|
||||
ylim([-5 105]);
|
||||
xlim([-4 10]);
|
||||
title('Final Ignition Sequence');
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
%% Helper function
|
||||
function u = valve_profile(t, events, initial_value)
|
||||
% events: [t_start, target_value, ramp_duration]
|
||||
% assumes events are sorted by t_start
|
||||
|
||||
u = initial_value * ones(size(t));
|
||||
prev_value = initial_value;
|
||||
|
||||
for k = 1:size(events,1)
|
||||
t0 = events(k,1);
|
||||
target = events(k,2);
|
||||
dur = events(k,3);
|
||||
|
||||
if dur <= 0
|
||||
% Instant step
|
||||
u(t >= t0) = target;
|
||||
else
|
||||
% Linear ramp from prev_value to target
|
||||
t1 = t0 + dur;
|
||||
idx_ramp = (t >= t0) & (t <= t1);
|
||||
u(idx_ramp) = prev_value + ...
|
||||
(target - prev_value) .* (t(idx_ramp) - t0) / dur;
|
||||
|
||||
% Hold new value after ramp
|
||||
u(t > t1) = target;
|
||||
end
|
||||
|
||||
prev_value = target;
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user