quick fixes

This commit is contained in:
2024-02-06 16:28:28 +01:00
parent c65eebb2dc
commit e13192259e
4 changed files with 13 additions and 6 deletions

View File

@@ -211,18 +211,23 @@ class NoiseMeasurement:
freq, amp = self.sample_spectrum(nf, dt, log_mode)
fs = freq[-1] * 2
right = -1 if nf % 2 else None
if nf % 2:
right = -1
phase_n = nf - 2
else:
right = None
phase_n = nf - 1
amp[1:right] *= 0.5
amp = np.sqrt(amp) + 0j
if nseg > 1:
amp = np.tile(amp, (nseg, 1)).T
amp[1:right] *= np.exp(2j * np.pi * self.rng.random((nf - 2, nseg)))
amp[1:right] *= np.exp(2j * np.pi * self.rng.random((phase_n, nseg)))
time, signal = ss.istft(amp, fs, nperseg=(nf - 1) * 2, noverlap=nf - 1, scaling="psd")
signal *= np.sqrt(2)
else:
amp[1:right] *= np.exp(2j * np.pi * self.rng.random(nf - 2))
amp[1:right] *= np.exp(2j * np.pi * self.rng.random(phase_n))
signal = np.fft.irfft(amp) * np.sqrt((amp.size - 1) * 2 * fs)
time = np.arange(len(signal)) / fs
return time, signal

View File

@@ -54,7 +54,7 @@ class Spectrum(np.ndarray):
b"real": np.fft.irfft,
b"scic": sfft.ifft,
b"scir": sfft.irfft,
}
}[buf[:4]]
shape_n = buf[4]
nt, *shape = (
int.from_bytes(buf[5 + i * 8 : 5 + (i + 1) * 8], "big") for i in range(shape_n)

View File

@@ -56,6 +56,8 @@ def test_rk43_soliton(plot=False):
op.constant_quantity(np.zeros(n)),
op.envelope_spm(0),
no_op,
np.fft.fft,
np.fft.ifft,
)
res = sc.integrate(spec0, end, lin, non_lin, targets=targets, atol=1e-10, rtol=1e-9)

View File

@@ -17,14 +17,14 @@ def test_normalisation():
def test_time_and_back():
"""
sampling a time series from a spectrum and transforming
it back should yield the same spectrum
it back yields the same spectrum
"""
rng = np.random.default_rng(57)
t = np.linspace(-10, 10, 512)
signal = np.exp(-((t / 2.568) ** 2)) + rng.random(len(t)) / 15
noise = sc.noise.NoiseMeasurement.from_time_series(signal, 1, "boxcar", detrend=False)
_, new_signal = noise.time_series(len(t))
_, new_signal = noise.time_series(len(noise.freq))
new_noise = sc.noise.NoiseMeasurement.from_time_series(new_signal, 1, "boxcar", detrend=False)
assert new_noise.psd == pytest.approx(noise.psd)