diff options
author | Keith Packard <keithp@keithp.com> | 2017-05-11 17:14:51 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2017-05-19 21:41:40 -0700 |
commit | 258808d296aeadaf150fa9b07e9c99a6bf1ca7c8 (patch) | |
tree | 2127cc9f8a85ffb8365542e709b224bd37bc0c2c /altoslib/AltosTimeSeries.java | |
parent | a9aa2d3558c77eb444223eaa747c75916bc7bac1 (diff) |
altoslib: Create new abstraction underneath AltosState for recording values
Provides a way for the graph API to see raw data values, instead of
those cooked by AltosState.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib/AltosTimeSeries.java')
-rw-r--r-- | altoslib/AltosTimeSeries.java | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/altoslib/AltosTimeSeries.java b/altoslib/AltosTimeSeries.java index 53c0076f..0ea7b356 100644 --- a/altoslib/AltosTimeSeries.java +++ b/altoslib/AltosTimeSeries.java @@ -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; |