fmcw_window_apply — RANGEDOPPLER process op

데이터 종류: beatcubebeatcube

호출: import rangedoppler; rangedoppler.fmcw_window_apply(cube, window='hann', axis='range')(또는 opsrangedoppler.get("fmcw_window_apply"))

사용법

비트 큐브의 거리축·도플러축을 따라 주기 창을 적용합니다.

> 아래 상세 설명은 원문입니다 —— 요약과 제목은 번역되어 있습니다.

The sidelobes of a rectangular (unwindowed) transform are -13.3 dB, so a

strong target buries a weak one 20 dB down at a completely different range.

Windowing trades main-lobe width for sidelobe level; the published figures

(Harris 1978, Table 1) and the levels measured in this repository on a

single bin-centred target are:

========== ============== ============== ==================

window published PSL measured PSL measured -3 dB lobe

========== ============== ============== ==================

rect -13.3 dB -13.25 dB 0.885 bin

hann -31.5 dB -31.47 dB 1.438 bin

hamming -42.7 dB -42.45 dB 1.301 bin

blackman -58.1 dB -58.11 dB 1.641 bin

========== ============== ============== ==================

Measured by transforming each window on its own with 2^18-point zero padding

and taking the highest lobe past the first null — that *is* the definition of

peak sidelobe level, so these are the module's own numbers, not copied ones.

Hamming lands 0.25 dB off the published figure because the published one is

for the optimal 0.53836/0.46164 pair; the 0.54/0.46 coefficients written here

are the textbook ones and this is what they actually give.

What it buys, measured end to end: a target 45 dB below a strong one, seven

range bins away, is undetectable unwindowed (its cell sits 24.6 dB down

in the leakage skirt and is not even a local maximum) and becomes a clean

local maximum at -43.6 dB with `hann`. That comparison is step 4 of

`examples/fmcw_range_doppler.py`.

*axis* is named by role — `"range"` (fast time, the last axis),

`"doppler" (slow time, the middle axis) or "both"` — never by number,

because a transposed cube is the mistake this naming is defending against.

The window is *not* folded into :func:range_doppler_map: keeping it a

separate op is what lets the sidelobe table above be measured as a

difference, and keeps the transform op a pure 2-D FFT.

Returns a new complex cube of the same shape. Raises `ValueError` on a

real-valued or malformed cube, or an unknown *window* / *axis*.

자세한 사용 가이드

fmcw_range_doppler 패밀리 가이드

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.

• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.

• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.

실행 가능한 예제(이 연산자를 실제로 호출하는 검증된 샘플)

fmcw_range_dopplerpy -3.11 examples/fmcw_range_doppler.py

타입이 이어지는 다음 연산자(beatcube 를 입력으로 받는 것)

range_doppler_map · fmcw_range_profile · beamform_delay_sum · beamform_doa

같은 카테고리(process)

range_doppler_map · range_doppler_peaks · fmcw_range_profile


*Provenance: rangedoppler.py — RANGEDOPPLER 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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