Source code for stream.generator
import numpy as np
[docs]
class RawDataGenerator:
"""
This generator function mimics online data acquisition.
The data are iteratively sampled with settings.sampling_rate_features_hz
"""
def __init__(
self,
data: np.ndarray,
sfreq: float,
sampling_rate_features_hz: float,
segment_length_features_ms: float,
) -> None:
"""
Arguments
---------
data (np array): shape (channels, time)
settings (settings.NMSettings): settings object
sfreq (float): sampling frequency of the data
Returns
-------
np.array: 1D array of time stamps
np.array: new batch for run function of full segment length shape
"""
self.batch_counter: int = 0 # counter for the batches
self.data = data
self.sfreq = sfreq
# Width, in data points, of the moving window used to calculate features
self.segment_length = segment_length_features_ms / 1000 * sfreq
# Ratio of the sampling frequency of the input data to the sampling frequency
self.stride = sfreq / sampling_rate_features_hz
def __iter__(self):
return self
def __next__(self):
start = self.stride * self.batch_counter
end = start + self.segment_length
self.batch_counter += 1
start_idx = int(start)
end_idx = int(end)
if end_idx > self.data.shape[1]:
raise StopIteration
return np.arange(start, end) / self.sfreq, self.data[:, start_idx:end_idx]