doppler_track — DRIVE decide op

• Data kinds: signal → table

• Call: import fullseye as fs; fs.ledger.doppler_track(signal, fs, *, f_high: 'float' = 960.0, f_low: 'float' = 770.0, c: 'float' = 343.0, smooth: 'float' = 0.005, guard: 'float' = 0.01, edge: 'float' = 0.05, v_tol: 'float' = 1.0, verdict_window: 'float' = 0.5) -> 'Dict[str, object]' (implementation को सीधे call करना हो तो import drivedecide; drivedecide.doppler_track(signal, fs, *, f_high: 'float' = 960.0, f_low: 'float' = 770.0, c: 'float' = 343.0, smooth: 'float' = 0.005, guard: 'float' = 0.01, edge: 'float' = 0.05, v_tol: 'float' = 1.0, verdict_window: 'float' = 0.5) -> 'Dict[str, object]', registry से लेना हो तो opsdrive.get("doppler_track"))

उपयोग

siren की आवाज़ से instantaneous frequency का अनुमान लगाता है और तय करता है कि वह पास आ रहा है या दूर जा रहा है।

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

1. 解析信号(FFT の Hilbert 変換)の位相差 → 瞬時周波数 f(t) = arg(z[n+1] z̄[n]) fs / 2π。

2. 幅 smooth 秒の移動中央値。

3. 各時刻で公称の 2 音(f_high / f_low)のうち比が近い方を「発した音」とみなし、ドップラー係数 D = f / f_nom、視線速度 v_r = c (1 − 1/D)(doppler_shift を v_r について解いたもの)。

4. 音が切り替わる所(中央値の跳び > 20 Hz)の前後 guard 秒と、両端 edge 秒は無効(valid = False)。

5. 判定: 最後の verdict_window 秒の有効な v_r の中央値が +v_tol より大 → "approaching"、−v_tol より小 → "receding"、間 → "abeam"。state は各時刻の同じ判定(無効な所は "unknown")。

公称音の取り違えの限界: 振り分けの境目は幾何平均 √(f_h f_l)。低い音が近づいて境目を越えるのは v_r = c (1 − √(f_l/f_h))、高い音が遠ざかって越えるのは v_r = −c (√(f_h/f_l) − 1)。960/770 Hz では +35.8 m/s(129 km/h)と −40.0 m/s。これより速い視線速度は取り違える(テストで固定)。

संदर्भ (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 करते हैं)

• poc_driving_decisions — py -3.11 examples/poc_driving_decisions.py

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

course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same

इसी category के (decide)

mirror_reflection_matrix · mirror_virtual_camera · mirror_aim_normal · convex_mirror_fov · mirror_blind_zone · check_sequence_score · signal_phase_plan · signal_state


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

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