X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosFlightSeries.java;h=09b537758540ecbad4b9e6577bf28b954bc7a879;hb=1b91ba98395a431385c9af5de77b2892fd6ccc43;hp=0eea34b7e72ac996ac5a5d78beb308c35c2774c5;hpb=222158581887b5f9e8b9843d14321c313fa023fa;p=fw%2Faltos diff --git a/altoslib/AltosFlightSeries.java b/altoslib/AltosFlightSeries.java index 0eea34b7..09b53775 100644 --- a/altoslib/AltosFlightSeries.java +++ b/altoslib/AltosFlightSeries.java @@ -18,7 +18,10 @@ import java.util.*; public class AltosFlightSeries extends AltosDataListener { - public ArrayList series; + public ArrayList series = new ArrayList(); + + public double speed_filter_width = 4.0; + public double accel_filter_width = 4.0; public int[] indices() { int[] indices = new int[series.size()]; @@ -86,6 +89,14 @@ public class AltosFlightSeries extends AltosDataListener { return AltosLib.MISSING; } + public double value(String name, double time) { + for (AltosTimeSeries s : series) { + if (s.label.equals(name)) + return s.value(time); + } + return AltosLib.MISSING; + } + public double value_before(String name, double time) { for (AltosTimeSeries s : series) { if (s.label.equals(name)) @@ -127,7 +138,7 @@ public class AltosFlightSeries extends AltosDataListener { return false; } - AltosTimeSeries state_series; + public AltosTimeSeries state_series; public static final String state_name = "State"; @@ -136,18 +147,16 @@ public class AltosFlightSeries extends AltosDataListener { state_series = add_series(state_name, AltosConvert.state_name); else if (this.state == state) return; - System.out.printf("state %s\n", AltosLib.state_name(state)); this.state = state; state_series.add(time(), state); } - AltosTimeSeries accel_series; + public AltosTimeSeries accel_series; public static final String accel_name = "Accel"; public void set_acceleration(double acceleration) { if (accel_series == null) { - System.out.printf("set acceleration %g\n", acceleration); accel_series = add_series(accel_name, AltosConvert.accel); } accel_series.add(time(), acceleration); @@ -158,21 +167,21 @@ public class AltosFlightSeries extends AltosDataListener { return; if (speed_series != null) { - AltosTimeSeries temp_series = make_series(accel_name, AltosConvert.accel); - speed_series.differentiate(temp_series); + AltosTimeSeries temp_series = make_series(speed_name, AltosConvert.speed); + speed_series.filter(temp_series, accel_filter_width); accel_series = add_series(accel_name, AltosConvert.accel); - temp_series.filter(accel_series, 0.25); + temp_series.differentiate(accel_series); } } public void set_received_time(long received_time) { } - AltosTimeSeries rssi_series; + public AltosTimeSeries rssi_series; public static final String rssi_name = "RSSI"; - AltosTimeSeries status_series; + public AltosTimeSeries status_series; public static final String status_name = "Radio Status"; @@ -185,15 +194,15 @@ public class AltosFlightSeries extends AltosDataListener { status_series.add(time(), status); } - AltosTimeSeries pressure_series; + public AltosTimeSeries pressure_series; public static final String pressure_name = "Pressure"; - AltosTimeSeries altitude_series; + public AltosTimeSeries altitude_series; public static final String altitude_name = "Altitude"; - AltosTimeSeries height_series; + public AltosTimeSeries height_series; public static final String height_name = "Height"; @@ -204,39 +213,39 @@ public class AltosFlightSeries extends AltosDataListener { if (altitude_series == null) altitude_series = add_series(altitude_name, AltosConvert.height); + if (cal_data.ground_pressure == AltosLib.MISSING) + cal_data.set_ground_pressure(pa); + double altitude = AltosConvert.pressure_to_altitude(pa); altitude_series.add(time(), altitude); } - private void compute_height(double ground_altitude) { - if (height_series == null) { + 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); } } - AltosTimeSeries speed_series; + public AltosTimeSeries speed_series; public static final String speed_name = "Speed"; private void compute_speed() { - if (speed_series != null) { - System.out.printf("speed series already made\n"); + if (speed_series != null) return; - } AltosTimeSeries alt_speed_series = null; AltosTimeSeries accel_speed_series = null; if (altitude_series != null) { - AltosTimeSeries temp_series = make_series(speed_name, AltosConvert.speed); - altitude_series.differentiate(temp_series); + AltosTimeSeries temp_series = make_series(altitude_name, AltosConvert.height); + altitude_series.filter(temp_series, speed_filter_width); alt_speed_series = make_series(speed_name, AltosConvert.speed); - temp_series.filter(alt_speed_series, 10.0); - } else { - System.out.printf("no altitude series\n"); + temp_series.differentiate(alt_speed_series); } if (accel_series != null) { AltosTimeSeries temp_series = make_series(speed_name, AltosConvert.speed); @@ -244,8 +253,6 @@ public class AltosFlightSeries extends AltosDataListener { accel_speed_series = make_series(speed_name, AltosConvert.speed); temp_series.filter(accel_speed_series, 0.1); - } else { - System.out.printf("no accel series\n"); } if (alt_speed_series != null && accel_speed_series != null) { @@ -277,14 +284,11 @@ public class AltosFlightSeries extends AltosDataListener { } else if (accel_speed_series != null) { speed_series = accel_speed_series; } - if (speed_series != null) { + if (speed_series != null) add_series(speed_series); - System.out.printf("speed series for %s set to %s\n", this.toString(), speed_series.toString()); - } else - System.out.printf("didn't manage to make speed series\n"); } - AltosTimeSeries kalman_height_series, kalman_speed_series, kalman_accel_series; + public AltosTimeSeries kalman_height_series, kalman_speed_series, kalman_accel_series; public static final String kalman_height_name = "Kalman Height"; public static final String kalman_speed_name = "Kalman Speed"; @@ -301,7 +305,7 @@ public class AltosFlightSeries extends AltosDataListener { kalman_accel_series.add(time(), acceleration); } - AltosTimeSeries thrust_series; + public AltosTimeSeries thrust_series; public static final String thrust_name = "Thrust"; @@ -311,7 +315,7 @@ public class AltosFlightSeries extends AltosDataListener { thrust_series.add(time(), N); } - AltosTimeSeries temperature_series; + public AltosTimeSeries temperature_series; public static final String temperature_name = "Temperature"; @@ -321,7 +325,7 @@ public class AltosFlightSeries extends AltosDataListener { temperature_series.add(time(), deg_c); } - AltosTimeSeries battery_voltage_series; + public AltosTimeSeries battery_voltage_series; public static final String battery_voltage_name = "Battery Voltage"; @@ -333,7 +337,7 @@ public class AltosFlightSeries extends AltosDataListener { battery_voltage_series.add(time(), volts); } - AltosTimeSeries apogee_voltage_series; + public AltosTimeSeries apogee_voltage_series; public static final String apogee_voltage_name = "Apogee Voltage"; @@ -345,7 +349,7 @@ public class AltosFlightSeries extends AltosDataListener { apogee_voltage_series.add(time(), volts); } - AltosTimeSeries main_voltage_series; + public AltosTimeSeries main_voltage_series; public static final String main_voltage_name = "Main Voltage"; @@ -369,15 +373,15 @@ public class AltosFlightSeries extends AltosDataListener { return gps; } - AltosTimeSeries sats_in_view; - AltosTimeSeries sats_in_soln; - AltosTimeSeries gps_altitude; - AltosTimeSeries gps_height; - AltosTimeSeries gps_ground_speed; - AltosTimeSeries gps_ascent_rate; - AltosTimeSeries gps_course; - AltosTimeSeries gps_speed; - AltosTimeSeries gps_pdop, gps_vdop, gps_hdop; + public AltosTimeSeries sats_in_view; + public AltosTimeSeries sats_in_soln; + public AltosTimeSeries gps_altitude; + public AltosTimeSeries gps_height; + public AltosTimeSeries gps_ground_speed; + public AltosTimeSeries gps_ascent_rate; + public AltosTimeSeries gps_course; + public AltosTimeSeries gps_speed; + public AltosTimeSeries gps_pdop, gps_vdop, gps_hdop; public static final String sats_in_view_name = "Satellites in view"; public static final String sats_in_soln_name = "Satellites in solution"; @@ -401,13 +405,18 @@ public class AltosFlightSeries extends AltosDataListener { } sats_in_soln.add(time(), gps.nsat); if (gps.pdop != AltosLib.MISSING) { - if (gps_pdop == null) { + if (gps_pdop == null) gps_pdop = add_series(gps_pdop_name, null); - gps_hdop = add_series(gps_hdop_name, null); - gps_vdop = add_series(gps_vdop_name, null); - } gps_pdop.add(time(), gps.pdop); + } + if (gps.hdop != AltosLib.MISSING) { + if (gps_hdop == null) + gps_hdop = add_series(gps_hdop_name, null); gps_hdop.add(time(), gps.hdop); + } + if (gps.vdop != AltosLib.MISSING) { + if (gps_vdop == null) + gps_vdop = add_series(gps_vdop_name, null); gps_vdop.add(time(), gps.vdop); } if (gps.locked) { @@ -445,19 +454,19 @@ public class AltosFlightSeries extends AltosDataListener { public static final String accel_across_name = "Accel Across"; public static final String accel_through_name = "Accel Through"; - AltosTimeSeries accel_along, accel_across, accel_through; + public AltosTimeSeries accel_along, accel_across, accel_through; public static final String gyro_roll_name = "Roll Rate"; public static final String gyro_pitch_name = "Pitch Rate"; public static final String gyro_yaw_name = "Yaw Rate"; - AltosTimeSeries gyro_roll, gyro_pitch, gyro_yaw; + public AltosTimeSeries gyro_roll, gyro_pitch, gyro_yaw; public static final String mag_along_name = "Magnetic Field Along"; public static final String mag_across_name = "Magnetic Field Across"; public static final String mag_through_name = "Magnetic Field Through"; - AltosTimeSeries mag_along, mag_across, mag_through; + public AltosTimeSeries mag_along, mag_across, mag_through; public void set_accel(double along, double across, double through) { if (accel_along == null) { @@ -497,7 +506,7 @@ public class AltosFlightSeries extends AltosDataListener { public static final String orient_name = "Tilt Angle"; - AltosTimeSeries orient_series; + public AltosTimeSeries orient_series; public void set_orient(double orient) { if (orient_series == null) @@ -507,7 +516,7 @@ public class AltosFlightSeries extends AltosDataListener { public static final String pyro_voltage_name = "Pyro Voltage"; - AltosTimeSeries pyro_voltage; + public AltosTimeSeries pyro_voltage; public void set_pyro_voltage(double volts) { if (pyro_voltage == null) @@ -533,7 +542,7 @@ public class AltosFlightSeries extends AltosDataListener { return igniter_voltage_names[channel]; } - AltosTimeSeries[] igniter_voltage; + public AltosTimeSeries[] igniter_voltage; public void set_igniter_voltage(double[] voltage) { int channels = voltage.length; @@ -555,7 +564,7 @@ public class AltosFlightSeries extends AltosDataListener { public static final String pyro_fired_name = "Pyro Channel State"; - AltosTimeSeries pyro_fired_series; + public AltosTimeSeries pyro_fired_series; int last_pyro_mask; @@ -574,27 +583,18 @@ public class AltosFlightSeries extends AltosDataListener { public void set_companion(AltosCompanion companion) { } - public void fill_in() { - System.out.printf("fill in %s\n", this.toString()); + public void finish() { compute_speed(); compute_accel(); - if (cal_data.ground_altitude != AltosLib.MISSING) - compute_height(cal_data.ground_altitude); - } - - public void init() { - time = AltosLib.MISSING; - series = new ArrayList(); + compute_height(); } public AltosTimeSeries[] series() { - fill_in(); + finish(); return series.toArray(new AltosTimeSeries[0]); } public AltosFlightSeries(AltosCalData cal_data) { super(cal_data); - System.out.printf("new flight series %s\n", this.toString()); - init(); } }