return r;
}
-#real g_count = 264.8;
-real g_count = 262;
+real g_count = 264.8;
+#real g_count = 262;
+#real g_count = 400;
int g_base = 15735;
real
telem_record read_telem(file in) {
string[*] r = wordsplit(chomp(fgets(in)), " ");
+ static int line = 0;
- if (dim(r) < 15)
+ line++;
+ if (dim(r) < 15) {
+ printf ("invalid record line %d\n", line);
return read_telem(in);
+ }
return (telem_record) {
.time = string_to_integer(r[10]),
.accel = string_to_integer(r[12]),
setdim(clock, 0);
setdim(pressure_value, 0);
setdim(accelerometer_value, 0);
+ real clock_bias = 0;
telem_record[...] save = {};
while (!File::end(in)) {
telem_record t = read_telem(in);
- if (dim(clock) > 0 &&
- abs(t.time / 100 - clock[dim(clock)-1]) > 500)
- break;
- clock[dim(clock)] = t.time / 100;
+ int n = dim(clock);
+ real sample_time = t.time / 100 + clock_bias;
+ if (n > 0 && sample_time < clock[n-1]) {
+ clock_bias += 65536 / 100;
+ sample_time += 65536 / 100;
+ }
+ clock[n] = sample_time;
pressure_value[dim(pressure_value)] = t.pressure;
accelerometer_value[dim(accelerometer_value)] = t.accel;
}
}
-readsamples_log(stdin);
+readsamples_telem(stdin);
int[...] int_integrate(int[...] d, int base) {
int v = 0;
real[size] accelerometer = { [n] = gravity * (count_to_g(accelerometer_value[n]) - 1.0) };
real[size] barometer = { [n] = pressure_to_altitude(count_to_kPa(pressure_value[n] / 16) * 1000) };
real[size] filtered_accelerometer = kaiser_filter(accelerometer, 8);
- real[size] filtered_barometer = kaiser_filter(barometer, 32);
+ real[size] filtered_barometer = kaiser_filter(barometer, 16);
real[...] integrate(real[...] d) {
real[dim(d)] ret;
return ret;
}
- real[size] accel_speed = integrate(filtered_accelerometer);
+ real[size] accel_speed = integrate(accelerometer);
real[size] accel_pos = integrate(accel_speed);
real[size] baro_speed = differentiate(filtered_barometer);
real[size] baro_accel = differentiate(baro_speed);