51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
from numpy.typing import NDArray
|
|
from numpy import arange, float64
|
|
from gettext import install
|
|
|
|
install("science_signal")
|
|
|
|
|
|
def interpolate_abciss(*signals: "Signal") -> NDArray[float64]:
|
|
"""
|
|
Give the smallest common range with the highest rate
|
|
"""
|
|
sampling: float = min([signal.sampling for signal in signals])
|
|
start: float = max([signal.x[0] for signal in signals])
|
|
stop: float = min([signal.x[-1] for signal in signals])
|
|
|
|
return arange(start, stop, sampling)
|
|
|
|
|
|
def interpolate(*signals: "Signal") -> tuple["Signal", ...]:
|
|
"""
|
|
Return each signal with a common frequency/time range (smallest
|
|
range and highest rate)
|
|
"""
|
|
splines = [signal.spline() for signal in signals]
|
|
x_range = interpolate_abciss(*signals)
|
|
|
|
return tuple(
|
|
[
|
|
Signal(x_range, spline(x_range).view(float64))
|
|
for spline in splines
|
|
]
|
|
)
|
|
|
|
|
|
def to_signal(variable: NDArray[float64]):
|
|
"""
|
|
Convert variable to Signal
|
|
"""
|
|
if variable.shape[0] != 2 or len(variable.shape) != 2:
|
|
raise Exception(
|
|
_(
|
|
"cannot convert an array with a shape different than (2, n)"
|
|
)
|
|
)
|
|
return Signal(
|
|
variable[0],
|
|
variable[1],
|
|
)
|
|
|
|
|
|
from science_signal.signal import Signal
|