55 lines
2.1 KiB
Python
55 lines
2.1 KiB
Python
import numpy as np
|
|
|
|
from rfg_adc_plotter.processing.fourier import (
|
|
compute_ifft_profile_from_sweep,
|
|
reconstruct_complex_spectrum_from_real_trace,
|
|
)
|
|
|
|
|
|
def test_reconstruct_complex_spectrum_arccos_mode_returns_complex128():
|
|
sweep = np.linspace(-3.0, 7.0, 128, dtype=np.float32)
|
|
z = reconstruct_complex_spectrum_from_real_trace(sweep, complex_mode="arccos")
|
|
assert z.dtype == np.complex128
|
|
assert z.shape == sweep.shape
|
|
assert np.all(np.isfinite(np.real(z)))
|
|
assert np.all(np.isfinite(np.imag(z)))
|
|
|
|
|
|
def test_reconstruct_complex_spectrum_diff_mode_returns_complex128():
|
|
sweep = np.linspace(-1.0, 1.0, 128, dtype=np.float32)
|
|
z = reconstruct_complex_spectrum_from_real_trace(sweep, complex_mode="diff")
|
|
assert z.dtype == np.complex128
|
|
assert z.shape == sweep.shape
|
|
assert np.all(np.isfinite(np.real(z)))
|
|
assert np.all(np.isfinite(np.imag(z)))
|
|
|
|
|
|
def test_reconstruct_complex_spectrum_diff_mode_projects_to_unit_circle():
|
|
sweep = np.sin(np.linspace(0.0, 6.0 * np.pi, 256)).astype(np.float32)
|
|
z = reconstruct_complex_spectrum_from_real_trace(sweep, complex_mode="diff")
|
|
mag = np.abs(z)
|
|
assert np.all(np.isfinite(mag))
|
|
assert np.allclose(mag, np.ones_like(mag), atol=1e-5, rtol=0.0)
|
|
|
|
|
|
def test_compute_ifft_profile_from_sweep_accepts_both_modes():
|
|
sweep = np.linspace(-5.0, 5.0, 257, dtype=np.float32)
|
|
d1, y1 = compute_ifft_profile_from_sweep(sweep, complex_mode="arccos")
|
|
d2, y2 = compute_ifft_profile_from_sweep(sweep, complex_mode="diff")
|
|
|
|
assert d1.dtype == np.float32 and y1.dtype == np.float32
|
|
assert d2.dtype == np.float32 and y2.dtype == np.float32
|
|
assert d1.size == y1.size and d2.size == y2.size
|
|
assert d1.size > 0 and d2.size > 0
|
|
assert np.all(np.diff(d1) >= 0.0)
|
|
assert np.all(np.diff(d2) >= 0.0)
|
|
|
|
|
|
def test_invalid_complex_mode_falls_back_deterministically_in_outer_wrapper():
|
|
sweep = np.linspace(-1.0, 1.0, 64, dtype=np.float32)
|
|
depth, y = compute_ifft_profile_from_sweep(sweep, complex_mode="unknown")
|
|
assert depth.dtype == np.float32
|
|
assert y.dtype == np.float32
|
|
assert depth.size == y.size
|
|
assert depth.size > 0
|