fmcw_beat_simulate — RANGEDOPPLER simulate op

• Data kinds: कोई नहीं → beatcube (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)

• Call: import fullseye as fs; fs.ledger.fmcw_beat_simulate(ranges_m=(10.0,), velocities_ms=(0.0,), angles_deg=None, amplitudes=None, n_samples=64, n_chirps=32, n_antennas=1, sample_rate_hz=10000000.0, slope_hz_per_s=20000000000000.0, chirp_period_s=5e-05, wavelength_m=0.0038934, element_spacing_m=None, phase_deg=0.0, noise_sigma=0.0, seed=0) (implementation को सीधे call करना हो तो import rangedoppler; rangedoppler.fmcw_beat_simulate(ranges_m=(10.0,), velocities_ms=(0.0,), angles_deg=None, amplitudes=None, n_samples=64, n_chirps=32, n_antennas=1, sample_rate_hz=10000000.0, slope_hz_per_s=20000000000000.0, chirp_period_s=5e-05, wavelength_m=0.0038934, element_spacing_m=None, phase_deg=0.0, noise_sigma=0.0, seed=0), registry से लेना हो तो opsrangedoppler.get("fmcw_beat_simulate"))

उपयोग

ज्ञात targets के लिए complex (A, C, S) beat cube synthesise करता है।

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

The forward model. Every target t contributes

a_t * exp(1j*(2*pi*f_b_t*n/f_s + 2*pi*f_d_t*m*T_c + 2*pi*d*k*sin(th_t)/lam + phi))

over fast-time sample n, chirp m and antenna k, with f_b = 2*S*R/c and f_d = 2*v/lambda. Contributions add linearly, which is what makes a multi-target cube a valid ground truth: each target's peak stands at its own bin regardless of the others.

Sign conventions (see the module docstring): velocities_ms is dR/dt, so positive is receding and lands in a positive Doppler bin; angles_deg is measured from array boresight and a positive angle advances the phase of the higher-index elements.

*amplitudes* defaults to 1.0 for every target — there is no radar equation here, no 1/R^4, no propagation loss (module docstring, honest limits). *noise_sigma* adds circular complex Gaussian noise with that per-component standard deviation, drawn from numpy.random.default_rng(seed); the default 0.0 returns the exact noiseless cube, which is what the closed-form tests compare against.

Ground truth: a target placed at an exact bin centre — R = j*dR and v = i*dv from fmcw_design — puts the whole of its energy in bin (i, j) of range_doppler_map, whose peak magnitude is then exactly a * N_s * N_c. Measured on the default configuration: the peak magnitude is bit-exactly 2048.0 (N_s*N_c, relative error 0.0), the largest other cell in the map is 2.6e-16 of it, and with three targets at different bins and different amplitudes the recovered ranges and velocities are exact to 0.0 metres and 0.0 m/s with amplitudes within 5.6e-17. See tests/test_rangedoppler.py.

Raises ValueError: a range at or beyond c*f_s/(2S), a speed at or beyond lambda/(4*T_c), an angle at or beyond asin(lambda/(2d)) — the three aliasing limits, refused rather than folded silently; a non-positive range; mismatched target-list lengths; a cube over MAX_CUBE_ELEMENTS (checked *before* allocation); a negative amplitude or noise sigma; a non-integer seed; and the usual string/bool/complex/NaN scalar refusals.

उपयोग की विस्तृत guide

• fmcw_range_doppler family guide

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• fmcw_range_doppler — py -3.11 examples/fmcw_range_doppler.py

वे अगले ops जिनसे type जुड़ता है (beatcube को input के रूप में लेते हैं)

fmcw_window_apply · range_doppler_map · fmcw_range_profile · beamform_delay_sum · beamform_doa

इसी category के (simulate)

—


*Provenance: rangedoppler.py — RANGEDOPPLER operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.