X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosFlightSeries.java;h=09b537758540ecbad4b9e6577bf28b954bc7a879;hb=1b91ba98395a431385c9af5de77b2892fd6ccc43;hp=7bedf38903eeadb209cc7616220a02a049795c45;hpb=2e82051a6aaaccf1e8a242f9c8141e4167e652d2;p=fw%2Faltos diff --git a/altoslib/AltosFlightSeries.java b/altoslib/AltosFlightSeries.java index 7bedf389..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"; @@ -140,7 +151,7 @@ public class AltosFlightSeries extends AltosDataListener { state_series.add(time(), state); } - AltosTimeSeries accel_series; + public AltosTimeSeries accel_series; public static final String accel_name = "Accel"; @@ -156,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"; @@ -183,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"; @@ -202,19 +213,23 @@ 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"; @@ -226,11 +241,11 @@ public class AltosFlightSeries extends AltosDataListener { 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); + temp_series.differentiate(alt_speed_series); } if (accel_series != null) { AltosTimeSeries temp_series = make_series(speed_name, AltosConvert.speed); @@ -273,7 +288,7 @@ public class AltosFlightSeries extends AltosDataListener { add_series(speed_series); } - 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"; @@ -290,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"; @@ -300,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"; @@ -310,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"; @@ -322,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"; @@ -334,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"; @@ -358,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"; @@ -390,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) { @@ -434,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) { @@ -486,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) @@ -496,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) @@ -522,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; @@ -544,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; @@ -563,25 +583,18 @@ public class AltosFlightSeries extends AltosDataListener { public void set_companion(AltosCompanion companion) { } - public void fill_in() { + 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); - init(); } }