time series assumes a mean of 0

This commit is contained in:
2024-02-13 10:50:26 +01:00
parent 219dfcdb67
commit 8b38c500f9
2 changed files with 13 additions and 5 deletions

View File

@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "scgenerator"
version = "0.4.2"
version = "0.4.3"
description = "Simulate nonlinear pulse propagation in optical fibers"
readme = "README.md"
authors = [{ name = "Benoit Sierro", email = "benoit.sierro@iap.unibe.ch" }]

View File

@@ -143,7 +143,7 @@ class NoiseMeasurement:
return freq[left:], psd[left:]
def sample_spectrum(
self, nf: int, dt: float | None = None, log_mode: bool = False
self, nf: int, dt: float | None = None, log_mode: bool = False, left: float | None = None
) -> tuple[np.ndarray, np.ndarray]:
"""
sample an amplitude spectrum with nt points. The corresponding sample spacing in the time
@@ -156,6 +156,9 @@ class NoiseMeasurement:
dt : float | None, optional
if given, freq will only be sampled up to 0.5/dt. if that value is higher than the
max of freq, an exception is raised.
left : float | None, optional
extend current PSD to the lower frequency range by assuming a constant value of `left`.
if None (default), extends with the last value
log_mode : bool, optional
sample on a log-log scale rather than on a linear scale, by default False
"""
@@ -171,19 +174,24 @@ class NoiseMeasurement:
if log_mode:
interp = np.zeros_like(f)
ind = self.freq > 0
if left is not None and left <= 0:
raise ValueError(f"value {left!r} for `left` in log mode is invalid")
elif left is None:
left = self.psd[ind][0]
interp[1:] = np.exp(
np.interp(
np.log(f[1:]),
np.log(self.freq[ind]),
np.log(self.psd[ind]),
left=np.log(self.psd[ind][0]),
left=np.log(left),
right=np.log(self.psd[ind][-1]),
)
)
if self.freq[0] == 0:
interp[0] = self.psd[0]
else:
interp = np.interp(f, self.freq, self.psd, left=self.psd[0], right=self.psd[-1])
left = left if left is not None else self.psd[0]
interp = np.interp(f, self.freq, self.psd, left=left, right=self.psd[-1])
return f, interp
def resampled(self, nf: int, dt: float | None = None, log_mode: bool = False) -> Self:
@@ -211,7 +219,7 @@ class NoiseMeasurement:
sample on a log-log scale rather than on a linear scale, by default False
"""
freq, amp = self.sample_spectrum(nf, dt, log_mode)
freq, amp = self.sample_spectrum(nf, dt, log_mode, left=0)
fs = freq[-1] * 2
if nf % 2: