public class AltosFlightSeries extends AltosDataListener {
- public ArrayList<AltosTimeSeries> series;
+ public ArrayList<AltosTimeSeries> series = new ArrayList<AltosTimeSeries>();
+
+ public double speed_filter_width = 4.0;
+ public double accel_filter_width = 4.0;
public int[] indices() {
int[] indices = new int[series.size()];
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))
return false;
}
- AltosTimeSeries state_series;
+ public AltosTimeSeries state_series;
public static final String state_name = "State";
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);
+ if (acceleration == AltosLib.MISSING)
+ return;
+ if (accel_series == null)
accel_series = add_series(accel_name, AltosConvert.accel);
- }
+
accel_series.add(time(), acceleration);
}
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";
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";
public void set_pressure(double pa) {
+ if (pa == AltosLib.MISSING)
+ return;
+
if (pressure_series == null)
pressure_series = add_series(pressure_name, AltosConvert.pressure);
pressure_series.add(time(), pa);
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);
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) {
} 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";
kalman_accel_series.add(time(), acceleration);
}
- AltosTimeSeries thrust_series;
+ public AltosTimeSeries thrust_series;
public static final String thrust_name = "Thrust";
thrust_series.add(time(), N);
}
- AltosTimeSeries temperature_series;
+ public AltosTimeSeries temperature_series;
public static final String temperature_name = "Temperature";
temperature_series.add(time(), deg_c);
}
- AltosTimeSeries battery_voltage_series;
+ public AltosTimeSeries battery_voltage_series;
public static final String battery_voltage_name = "Battery Voltage";
battery_voltage_series.add(time(), volts);
}
- AltosTimeSeries apogee_voltage_series;
+ public AltosTimeSeries apogee_voltage_series;
public static final String apogee_voltage_name = "Apogee Voltage";
apogee_voltage_series.add(time(), volts);
}
- AltosTimeSeries main_voltage_series;
+ public AltosTimeSeries main_voltage_series;
public static final String main_voltage_name = "Main Voltage";
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";
}
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) {
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) {
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)
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)
return igniter_voltage_names[channel];
}
- AltosTimeSeries[] igniter_voltage;
+ public AltosTimeSeries[] igniter_voltage;
public void set_igniter_voltage(double[] voltage) {
int channels = voltage.length;
public static final String pyro_fired_name = "Pyro Channel State";
- AltosTimeSeries pyro_fired_series;
+ public AltosTimeSeries pyro_fired_series;
int last_pyro_mask;
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<AltosTimeSeries>();
+ 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();
}
}