X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosFlightSeries.java;h=09b537758540ecbad4b9e6577bf28b954bc7a879;hb=1b91ba98395a431385c9af5de77b2892fd6ccc43;hp=6f4f7bb1e89c5960a5744df84ca1ba49cc7c273e;hpb=fd738d47bbc46d36698350d5450abe1125d990a3;p=fw%2Faltos diff --git a/altoslib/AltosFlightSeries.java b/altoslib/AltosFlightSeries.java index 6f4f7bb1..09b53775 100644 --- a/altoslib/AltosFlightSeries.java +++ b/altoslib/AltosFlightSeries.java @@ -20,6 +20,9 @@ public class AltosFlightSeries extends AltosDataListener { 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()]; for (int i = 0; i < indices.length; i++) @@ -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,20 +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 = cal_data.ground_altitude; - if (height_series == null && ground_altitude != AltosLib.MISSING) { + 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"; @@ -227,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); @@ -274,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"; @@ -291,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"; @@ -301,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"; @@ -311,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"; @@ -323,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"; @@ -335,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"; @@ -359,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"; @@ -391,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) { @@ -435,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) { @@ -487,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) @@ -497,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) @@ -523,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; @@ -545,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;