Source code for skcomponents.processing.adc

import numpy as np
from skcomponents.processing.processor import SignalProcessor


[docs]class ADC(SignalProcessor): def __init__(self, bits: int, max_value: float = None, min_value: float = None, rescale: bool = True): """ Used to digitize signals. Parameters ---------- bits : int Number of bits in ADC max_value : float maximum possible measurement value. Optional, if None, value will be determined from data. min_value : float minimum possible measurement value. Optional, if None, value will be determined from data. rescale : bool If true data is converted back to original units. If False, data is left as counts. """ self.bits = bits self.max_value = max_value self.min_value = min_value self.rescale = rescale @property def adu(self): """ Analog to Ditigit Units. """ return (self.max_value - self.min_value) / (2 ** self.bits)
[docs] def process_signal(self, values: np.ndarray): if self.min_value is None: min_value = np.min(values) else: min_value = self.min_value if self.max_value is None: max_value = np.max(values) else: max_value = self.max_value values[values > max_value] = max_value values[values < min_value] = min_value bins = np.linspace(min_value, max_value, 2 ** self.bits) bins = bins + (bins[1] - bins[0]) / 2 idx = np.digitize(values, bins, right=True) bins = bins - (bins[1] - bins[0]) / 2 if self.rescale: return bins[idx] else: return idx
[docs] def noise_estimate(self, signal: np.ndarray) -> np.ndarray: return np.ones_like(signal) * self.adu * 0.289 # quantization noise for rounded signal = 0.289LSB