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