altoslib: Create new abstraction underneath AltosState for recording values
[fw/altos] / altoslib / AltosTimeSeries.java
index 53c0076f5ed345d58f79b89ef4b614155f9c20c6..0ea7b3561baa6e9e6390d74d3003235f9918ffae 100644 (file)
@@ -29,6 +29,62 @@ public class AltosTimeSeries implements Iterable<AltosTimeValue> {
                return values.iterator();
        }
 
+       public void integrate(AltosTimeSeries integral) {
+               double  y = 0.0;
+               double  x = 0.0;
+               boolean start = true;
+
+               for (AltosTimeValue v : values) {
+                       if (start) {
+                               y = 0.0;
+                               x = v.x;
+                               start = false;
+                       } else {
+                               y += v.y * (v.x - x);
+                               x = v.x;
+                       }
+                       integral.add(x, y);
+               }
+       }
+
+       public void differentiate(AltosTimeSeries diff) {
+               double y = 0.0;
+               double x = 0.0;
+               boolean start = true;
+
+               for (AltosTimeValue v: values) {
+                       if (start) {
+                               y = 0.0;
+                               x = v.x;
+                               start = false;
+                       } else {
+                               double  dx = v.x - x;
+                               double  dy = v.y - y;
+
+                               x = v.x;
+                               y = v.y;
+                               if (dx != 0)
+                                       diff.add(x, dy);
+                       }
+               }
+       }
+
+       private int find_left(int i, double dt) {
+               int j;
+               double t = values.get(i).x - dt;
+               for (j = i; j > 0; j--) {
+                       if (values.get(j).x < t)
+                               break;
+               }
+               return j;
+
+       }
+
+       public void filter(AltosTimeSeries out, double width) {
+               for (int i = 0; i < values.size(); i++) {
+               }
+       }
+
        public AltosTimeSeries(String label, AltosUnits units) {
                this.label = label;
                this.units = units;