sinusoidal method

List<TimeSeriesPoint> sinusoidal({
  1. required DateTime start,
  2. required DateTime end,
  3. required Duration interval,
  4. double amplitude = 10,
  5. double frequency = 1,
  6. double phase = 0,
  7. double offset = 50,
  8. double noise = 0,
})

Generates a sinusoidal pattern.

Implementation

List<TimeSeriesPoint> sinusoidal({
  required DateTime start,
  required DateTime end,
  required Duration interval,
  double amplitude = 10,
  double frequency = 1,
  double phase = 0,
  double offset = 50,
  double noise = 0,
}) {
  final points = <TimeSeriesPoint>[];
  var current = start;
  int step = 0;

  while (!current.isAfter(end)) {
    final t = step * 2 * math.pi * frequency / 100;
    final value =
        offset + amplitude * math.sin(t + phase) + _random.normal(0, noise);
    points.add(TimeSeriesPoint(timestamp: current, value: value));
    current = current.add(interval);
    step++;
  }

  return points;
}