Crate frequenz_resampling

Crate frequenz_resampling 

Source
Expand description

§frequenz-resampling-rs

This project is the rust resampler for resampling a stream of samples to a given interval.

§Usage

An instance of the Resampler can be created with the new method. Raw data can be added to the resampler either through the push or extend methods, and the resample method resamples the data that was added to the buffer.

use chrono::{DateTime, TimeDelta, Utc};
use frequenz_resampling::{Resampler, ResamplingFunction, Sample};

#[derive(Debug, Clone, Default, Copy, PartialEq)]
pub(crate) struct TestSample {
    timestamp: DateTime<Utc>,
    value: Option<f64>,
}

impl Sample for TestSample {
    type Value = f64;

    fn new(timestamp: DateTime<Utc>, value: Option<f64>) -> Self {
        Self { timestamp, value }
    }

    fn timestamp(&self) -> DateTime<Utc> {
        self.timestamp
    }

    fn value(&self) -> Option<f64> {
        self.value
    }
}

let start = DateTime::from_timestamp(0, 0).unwrap();
let mut resampler: Resampler<f64, TestSample> =
    Resampler::new(TimeDelta::seconds(5), ResamplingFunction::Average, 1, start, false);

let step = TimeDelta::seconds(1);
let data = vec![
    TestSample::new(start + step, Some(1.0)),
    TestSample::new(start + step * 2, Some(2.0)),
    TestSample::new(start + step * 3, Some(3.0)),
    TestSample::new(start + step * 4, Some(4.0)),
    TestSample::new(start + step * 5, Some(5.0)),
    TestSample::new(start + step * 6, Some(6.0)),
    TestSample::new(start + step * 7, Some(7.0)),
    TestSample::new(start + step * 8, Some(8.0)),
    TestSample::new(start + step * 9, Some(9.0)),
    TestSample::new(start + step * 10, Some(10.0)),
];

resampler.extend(data);

let resampled = resampler.resample(start + step * 10);

let expected = vec![
    TestSample::new(DateTime::from_timestamp(5, 0).unwrap(), Some(3.0)),
    TestSample::new(DateTime::from_timestamp(10, 0).unwrap(), Some(8.0)),
];

assert_eq!(resampled, expected);

Structs§

Resampler
The Resampler struct is used to resample a time series of samples. It stores the samples in a buffer and resamples the samples in the buffer when the resample method is called. A resampler can be configured with a resampling function and a resampling interval.

Enums§

ResamplingFunction
The ResamplingFunction enum represents the different resampling functions that can be used to resample a channel.

Traits§

Sample
The Sample trait represents a single sample in a time series.