/** * Create a time series based on a {@link Function}. * For Java 7 compatibility this uses Guava's function interface over java.util.Function. * @param function * @param nrPoints * @param start * @param interval * @return */ public final static <N extends Number> List<SampledValue> createFunction(final Function<Long, N> function, final int nrPoints, final long start, final long interval) { Objects.requireNonNull(function); final List<SampledValue> values = new ArrayList<>(); SampledValue sv; long t = start; for (int i=0;i <nrPoints; i++) { sv = new SampledValue(createValue(function.apply(t)), t, Quality.GOOD); values.add(sv); t += interval; } return values; }
/** * Create a time series with random values. * @param nrPoints * @param startTime * @param avInterval * @param randomizeTimeSteps * @param valueRange * either a {@link Float}, {@link Double}, {@link Integer}, {@link Long}, {@link Short} or {@link Byte}. * @param offset * either a {@link Float}, {@link Double}, {@link Integer}, {@link Long}, {@link Short} or {@link Byte}. * @return */ public final static List<SampledValue> createRandomTimeSeries(final int nrPoints, final long startTime, final long avInterval, final boolean randomizeTimeSteps, final Number valueRange, final Number offset) { final List<SampledValue> values = new ArrayList<>(); long t; Number n; for (int i=0;i <nrPoints; i++) { t = startTime + i*avInterval; if (randomizeTimeSteps) t += (Math.random()* 0.9 * avInterval) - avInterval/2; n = addAndRandomize(valueRange, offset, true); values.add(new SampledValue(createValue(n), t, Quality.GOOD)); } return values; }
/** * Create a step function. * @param nrPoints * @param start * @param avInterval * @param randomizeTimeSteps * @param startValue * either a {@link Float}, {@link Double}, {@link Integer}, {@link Long}, {@link Short} or {@link Byte}. * @param valueStep * either a {@link Float}, {@link Double}, {@link Integer}, {@link Long}, {@link Short} or {@link Byte}. * @param randomizeValueSteps * @return */ public final static List<SampledValue> createStepFunction(final int nrPoints, final long start, final long avInterval, final boolean randomizeTimeSteps, final Number startValue, final Number valueStep, final boolean randomizeValueSteps) { final List<SampledValue> values = new ArrayList<>(); Number n = startValue; long t; for (int i=0;i <nrPoints; i++) { t = start + i*avInterval; if (randomizeTimeSteps) t += (Math.random()* 0.9 * avInterval) - avInterval/2; values.add(new SampledValue(createValue(n), t, Quality.GOOD)); n = addAndRandomize(valueStep, n, randomizeValueSteps); } return values; }