process op• 데이터 종류: image2d → table
• 호출: import rangedoppler; rangedoppler.range_doppler_peaks(rdmap, range_bin_m=1.0, velocity_bin_ms=1.0, n_peaks=1, min_fraction=0.1, doppler_shifted=True)(또는 opsrangedoppler.get("range_doppler_peaks"))
거리-도플러 맵으로부터의 검출: 빈 인덱스를 m 와 m/s 로 되돌립니다.
> 아래 상세 설명은 원문입니다 —— 요약과 제목은 번역되어 있습니다.
Finds strict local maxima of the 2-D magnitude map — greater than all eight
neighbours, cyclically along the Doppler axis (velocity really is
periodic in the FFT: the fastest receding bin is adjacent to the fastest
approaching one) and openly along the range axis (a cell in the first or
last range bin competes only against the neighbours that exist, so a target
in the last bin is a detection, not a discard) — keeps those at least
*min_fraction* of the global maximum, and returns the strongest *n_peaks*.
Range bin 0 is reported like any other. In a real receiver it is the
transmitter-leakage / DC bin rather than a target, but suppressing it here
would be a silent policy applied to somebody else's data; threshold it
yourself if you want it gone.
Index -> physical value, closed form and the exact inverse of
:func:fmcw_beat_simulate:
• `range_m = j * range_bin_m, with range_bin_m = c*f_s/(2*S*N_s)`
from :func:fmcw_design;
• `velocity_ms = (i - n_doppler//2) * velocity_bin_ms` when
*doppler_shifted* (the layout :func:range_doppler_map produces), or
`i wrapped into [-N_c/2, N_c/2)` when the map is unshifted.
The bin widths are required parameters with placeholder defaults of 1.0,
which means the default output is in bins, not metres. That is deliberate:
inventing a default waveform here would let a caller read metres off a map
that was never that waveform's.
Returns a `dict with peaks` (a list of per-detection dicts holding
`range_m, velocity_ms, magnitude, range_bin, doppler_bin`),
`n_found, max_magnitude and noise_floor` (the median of the map).
Raises `ValueError`: a non-2-D, complex, negative, or non-finite map; a
map whose maximum is 0 (an all-zero map has no cell to detect and returning
cell (0,0) — which is what `argmax` does — would be a fabricated
detection); a non-positive bin width; *n_peaks* < 1; a *min_fraction*
outside `[0, 1]`.
• 샘플 데이터 카탈로그(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
table 를 입력으로 받는 것)—
process)fmcw_window_apply · range_doppler_map · fmcw_range_profile
*Provenance: rangedoppler.py — RANGEDOPPLER 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.