simulate op• 데이터 종류: 없음 → beatcube(인자만으로 정해지는 연산자 —— 이미지나 데이터 입력을 받지 않습니다)
• 호출: 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)(또는 opsrangedoppler.get("fmcw_beat_simulate"))
알려진 표적에 대한 복소 `(A, C, S)` 비트 큐브를 합성합니다.
> 아래 상세 설명은 원문입니다 —— 요약과 제목은 번역되어 있습니다.
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 :func:fmcw_design` — puts the whole of its energy in bin
`(i, j) of :func: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
:data: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.
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• fmcw_range_doppler — py -3.11 examples/fmcw_range_doppler.py
beatcube 를 입력으로 받는 것)fmcw_window_apply · range_doppler_map · fmcw_range_profile · beamform_delay_sum · beamform_doa
simulate)—
*Provenance: rangedoppler.py — RANGEDOPPLER 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.