+ private void compute_height() {
+ double ground_altitude = cal_data.ground_altitude;
+ if (height_series == null && ground_altitude != AltosLib.MISSING && altitude_series != null) {
+ height_series = add_series(height_name, AltosConvert.height);
+ for (AltosTimeValue alt : altitude_series)
+ height_series.add(alt.time, alt.value - ground_altitude);
+ }
+ }
+
+ public AltosTimeSeries speed_series;
+
+ public static final String speed_name = "Speed";
+
+ private void compute_speed() {
+ if (speed_series != null)
+ return;
+
+ AltosTimeSeries alt_speed_series = null;
+ AltosTimeSeries accel_speed_series = null;
+
+ if (altitude_series != null) {
+ AltosTimeSeries temp_series = make_series(altitude_name, AltosConvert.height);
+ altitude_series.filter(temp_series, 1.0);
+
+ alt_speed_series = make_series(speed_name, AltosConvert.speed);
+ temp_series.differentiate(alt_speed_series);
+ }
+ if (accel_series != null) {
+ AltosTimeSeries temp_series = make_series(speed_name, AltosConvert.speed);
+ accel_series.integrate(temp_series);
+
+ accel_speed_series = make_series(speed_name, AltosConvert.speed);
+ temp_series.filter(accel_speed_series, 0.1);
+ }
+
+ if (alt_speed_series != null && accel_speed_series != null) {
+ double apogee_time = AltosLib.MISSING;
+ if (state_series != null) {
+ for (AltosTimeValue d : state_series) {
+ if (d.value >= AltosLib.ao_flight_drogue){
+ apogee_time = d.time;
+ break;
+ }
+ }
+ }
+ if (apogee_time == AltosLib.MISSING) {
+ speed_series = alt_speed_series;
+ } else {
+ speed_series = make_series(speed_name, AltosConvert.speed);
+ for (AltosTimeValue d : accel_speed_series) {
+ if (d.time <= apogee_time)
+ speed_series.add(d);
+ }
+ for (AltosTimeValue d : alt_speed_series) {
+ if (d.time > apogee_time)
+ speed_series.add(d);
+ }
+
+ }
+ } else if (alt_speed_series != null) {
+ speed_series = alt_speed_series;
+ } else if (accel_speed_series != null) {
+ speed_series = accel_speed_series;
+ }
+ if (speed_series != null)
+ add_series(speed_series);