Module redvox.api900.sensors.unevenly_sampled_channel
This module contains classes and methods for working with unevenly sampled channels.
Expand source code
"""
This module contains classes and methods for working with unevenly sampled channels.
"""
import typing
import numpy
import redvox.api900.lib.api900_pb2 as api900_pb2
import redvox.api900.reader_utils as reader_utils
import redvox.api900.sensors.interleaved_channel as interleaved_channel
import redvox.api900.stat_utils as stat_utils
class UnevenlySampledChannel(interleaved_channel.InterleavedChannel):
"""
An unevenly sampled channel is an interleaved channel that contains sampled payload which includes a list of
corresponding timestamps for each sample.
This class also adds easy access to statistics for timestamps.
"""
def __init__(self, channel: typing.Optional[api900_pb2.UnevenlySampledChannel] = None):
"""
Initializes this unevenly sampled channel.
:param channel: A protobuf unevenly sampled channel.
"""
if channel is None:
channel = reader_utils.empty_unevenly_sampled_channel()
interleaved_channel.InterleavedChannel.__init__(self, channel)
self.timestamps_microseconds_utc: numpy.ndarray = reader_utils.repeated_to_array(
channel.timestamps_microseconds_utc)
"""Numpy array of timestamps epoch microseconds utc for each sample"""
self.sample_interval_mean: float = channel.sample_interval_mean
"""The mean sample interval"""
self.sample_interval_std: float = channel.sample_interval_std
"""The standard deviation of the sample interval"""
self.sample_interval_median: float = channel.sample_interval_median
"""The median sample interval"""
def set_channel(self, channel: api900_pb2.UnevenlySampledChannel):
"""
sets the channel to an unevenly sampled channel
:param channel: unevenly sampled channel
"""
super().set_channel(channel)
self.timestamps_microseconds_utc = reader_utils.repeated_to_array(channel.timestamps_microseconds_utc)
self.sample_interval_std, self.sample_interval_mean, self.sample_interval_median = \
stat_utils.calc_utils_timeseries(self.timestamps_microseconds_utc)
def set_timestamps_microseconds_utc(self, timestamps: typing.Union[typing.List[int], numpy.ndarray]):
"""
set the timestamps in microseconds from utc
:param timestamps: array of timestamps
"""
timestamps = reader_utils.to_array(timestamps)
self.timestamps_microseconds_utc = timestamps
self.protobuf_channel.timestamps_microseconds_utc[:] = timestamps
if len(timestamps) > 0:
self.sample_interval_std, self.sample_interval_mean, self.sample_interval_median = \
stat_utils.calc_utils_timeseries(timestamps)
else:
self.sample_interval_mean = 0.0
self.sample_interval_median = 0.0
self.sample_interval_std = 0.0
self.protobuf_channel.sample_interval_std = self.sample_interval_std
self.protobuf_channel.sample_interval_mean = self.sample_interval_mean
self.protobuf_channel.sample_interval_median = self.sample_interval_median
def __str__(self) -> str:
"""
Returns a string representation of this unevenly sampled channel.
:return: A string representation of this unevenly sampled channel.
"""
return "{}\nlen(timestamps_microseconds_utc): {}".format(super().__str__(),
len(self.timestamps_microseconds_utc))
Classes
class UnevenlySampledChannel (channel: Optional[api900_pb2.UnevenlySampledChannel] = None)
-
An unevenly sampled channel is an interleaved channel that contains sampled payload which includes a list of corresponding timestamps for each sample.
This class also adds easy access to statistics for timestamps.
Initializes this unevenly sampled channel. :param channel: A protobuf unevenly sampled channel.
Expand source code
class UnevenlySampledChannel(interleaved_channel.InterleavedChannel): """ An unevenly sampled channel is an interleaved channel that contains sampled payload which includes a list of corresponding timestamps for each sample. This class also adds easy access to statistics for timestamps. """ def __init__(self, channel: typing.Optional[api900_pb2.UnevenlySampledChannel] = None): """ Initializes this unevenly sampled channel. :param channel: A protobuf unevenly sampled channel. """ if channel is None: channel = reader_utils.empty_unevenly_sampled_channel() interleaved_channel.InterleavedChannel.__init__(self, channel) self.timestamps_microseconds_utc: numpy.ndarray = reader_utils.repeated_to_array( channel.timestamps_microseconds_utc) """Numpy array of timestamps epoch microseconds utc for each sample""" self.sample_interval_mean: float = channel.sample_interval_mean """The mean sample interval""" self.sample_interval_std: float = channel.sample_interval_std """The standard deviation of the sample interval""" self.sample_interval_median: float = channel.sample_interval_median """The median sample interval""" def set_channel(self, channel: api900_pb2.UnevenlySampledChannel): """ sets the channel to an unevenly sampled channel :param channel: unevenly sampled channel """ super().set_channel(channel) self.timestamps_microseconds_utc = reader_utils.repeated_to_array(channel.timestamps_microseconds_utc) self.sample_interval_std, self.sample_interval_mean, self.sample_interval_median = \ stat_utils.calc_utils_timeseries(self.timestamps_microseconds_utc) def set_timestamps_microseconds_utc(self, timestamps: typing.Union[typing.List[int], numpy.ndarray]): """ set the timestamps in microseconds from utc :param timestamps: array of timestamps """ timestamps = reader_utils.to_array(timestamps) self.timestamps_microseconds_utc = timestamps self.protobuf_channel.timestamps_microseconds_utc[:] = timestamps if len(timestamps) > 0: self.sample_interval_std, self.sample_interval_mean, self.sample_interval_median = \ stat_utils.calc_utils_timeseries(timestamps) else: self.sample_interval_mean = 0.0 self.sample_interval_median = 0.0 self.sample_interval_std = 0.0 self.protobuf_channel.sample_interval_std = self.sample_interval_std self.protobuf_channel.sample_interval_mean = self.sample_interval_mean self.protobuf_channel.sample_interval_median = self.sample_interval_median def __str__(self) -> str: """ Returns a string representation of this unevenly sampled channel. :return: A string representation of this unevenly sampled channel. """ return "{}\nlen(timestamps_microseconds_utc): {}".format(super().__str__(), len(self.timestamps_microseconds_utc))
Ancestors
Instance variables
var sample_interval_mean
-
The mean sample interval
var sample_interval_median
-
The median sample interval
var sample_interval_std
-
The standard deviation of the sample interval
var timestamps_microseconds_utc
-
Numpy array of timestamps epoch microseconds utc for each sample
Methods
def set_channel(self, channel: api900_pb2.UnevenlySampledChannel)
-
sets the channel to an unevenly sampled channel :param channel: unevenly sampled channel
Expand source code
def set_channel(self, channel: api900_pb2.UnevenlySampledChannel): """ sets the channel to an unevenly sampled channel :param channel: unevenly sampled channel """ super().set_channel(channel) self.timestamps_microseconds_utc = reader_utils.repeated_to_array(channel.timestamps_microseconds_utc) self.sample_interval_std, self.sample_interval_mean, self.sample_interval_median = \ stat_utils.calc_utils_timeseries(self.timestamps_microseconds_utc)
def set_timestamps_microseconds_utc(self, timestamps: Union[List[int], numpy.ndarray])
-
set the timestamps in microseconds from utc :param timestamps: array of timestamps
Expand source code
def set_timestamps_microseconds_utc(self, timestamps: typing.Union[typing.List[int], numpy.ndarray]): """ set the timestamps in microseconds from utc :param timestamps: array of timestamps """ timestamps = reader_utils.to_array(timestamps) self.timestamps_microseconds_utc = timestamps self.protobuf_channel.timestamps_microseconds_utc[:] = timestamps if len(timestamps) > 0: self.sample_interval_std, self.sample_interval_mean, self.sample_interval_median = \ stat_utils.calc_utils_timeseries(timestamps) else: self.sample_interval_mean = 0.0 self.sample_interval_median = 0.0 self.sample_interval_std = 0.0 self.protobuf_channel.sample_interval_std = self.sample_interval_std self.protobuf_channel.sample_interval_mean = self.sample_interval_mean self.protobuf_channel.sample_interval_median = self.sample_interval_median
Inherited members