improved from_time_series constructor

This commit is contained in:
Benoît Sierro
2023-10-19 10:44:53 +02:00
parent c153ef3af9
commit 26e81c4b85

View File

@@ -42,7 +42,12 @@ class NoiseMeasurement:
@classmethod
def from_time_series(
cls, signal: Sequence[float], dt: float, window: str = "Hann", num_segments: int = 1
cls,
signal: Sequence[float],
dt: float,
window: str = "Hann",
num_segments: int = 1,
force_no_dc: bool = True,
) -> NoiseMeasurement:
"""
compute a PSD from a time-series measurement.
@@ -61,11 +66,21 @@ class NoiseMeasurement:
num_segments : int, optional
number of segments to cut the signal into. This will trade lower frequency information
for better variance of the estimated PSD. The default 1 means no cutting.
force_no_dc : bool, optional
take out the DC component (0-frequency) of each segement after segmentation
"""
signal = np.asanyarray(signal)
signal_segments = segments(signal, num_segments)
if force_no_dc:
signal_segments = (signal_segments.T - signal_segments.mean(axis=1)).T
n = signal_segments.shape[-1]
window_arr = cls._window_functions[window](n)
try:
window_arr = cls._window_functions[window](n)
except KeyError:
raise ValueError(
f"window function {window!r} not found. "
f"Possible values are {set(cls._window_functions)}"
) from None
window_correction = np.sum(window_arr**2) / n
signal_segments = signal_segments * window_arr