siren_signal — DRIVE decide op

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

• Call: import fullseye as fs; fs.ledger.siren_signal(duration: 'float', fs: 'float', *, f_high: 'float' = 960.0, f_low: 'float' = 770.0, period: 'float' = 1.3, source_start=(-60.0, 10.0), source_velocity=(15.0, 0.0), mics=((0.0, 0.0),), c: 'float' = 343.0, spreading: 'bool' = True, mic_velocity=(0.0, 0.0), mic_track=None) -> 'Dict[str, object]' (implementation को सीधे call करना हो तो import drivedecide; drivedecide.siren_signal(duration: 'float', fs: 'float', *, f_high: 'float' = 960.0, f_low: 'float' = 770.0, period: 'float' = 1.3, source_start=(-60.0, 10.0), source_velocity=(15.0, 0.0), mics=((0.0, 0.0),), c: 'float' = 343.0, spreading: 'bool' = True, mic_velocity=(0.0, 0.0), mic_track=None) -> 'Dict[str, object]', registry से लेना हो तो opsdrive.get("siren_signal"))

उपयोग

चलती ambulance का siren (दो सुरों का बारी-बारी से बजना) एक स्थिर microphone पर जैसा सुनाई देता है, वैसी आवाज़ synthesise करता है।

स्रोत p(τ) = source_start + source_velocity·τ (2D, एकसमान सरल-रेखीय गति); उत्सर्जित ध्वनि sin φ(τ) है, जहाँ φ एक सतत कला है जो ऊँचे स्वर f_high और नीचे स्वर f_low को period/2 के लिए बारी-बारी से बजाती है। माइक्रोफ़ोन m समय t पर जो ध्वनि सुनता है वह उस उत्सर्जन समय τ पर sin φ(τ) है जो

c (t − τ) = |p(τ) − m| ⇔ (c² − |u|²) s² + 2 (q·u) s − |q|² = 0, s = t − τ ≥ 0, q = p(t) − m

को संतुष्ट करता है (spreading होने पर आयाम r_ref / r, r_ref = प्रारंभिक दूरी)। डॉप्लर सूत्र का उपयोग नहीं किया गया (केवल आगमन-समय की ज्यामिति), इसलिए यह doppler_track के गेट के लिए एक स्वतंत्र पथ है।

mic_velocity = माइक्रोफ़ोन (या उसे ले जाने वाले अपने वाहन) का स्थिर वेग (वायु = ज़मीन के सापेक्ष; हवा नहीं)। माइक्रोफ़ोन m(t) = m₀ + u_L t के अनुसार चलता है। ऊपर का समीकरण q = p(t) − m(t) रखने पर उसी रूप में सत्य रहता है (c(t − τ) = |p(τ) − m(t)|, p(τ) = p(t) − u s)। द्विघात समीकरण में केवल प्राप्ति-समय पर माइक्रोफ़ोन की स्थिति आती है (स्रोत एकसमान वेग से चलता है), इसलिए माइक्रोफ़ोन किसी भी पथ पर चल सकता है:

प्रति नमूना mic_track = (स्थिति (k, n, 2), वेग (k, n, 2)) देने पर mics / mic_velocity के बदले उसका उपयोग होता है (धीमा होकर बाईं ओर हटते अपने वाहन पर लगा माइक्रोफ़ोन; वेग केवल dτ/dt के बंद-रूप के लिए प्रयुक्त होता है)।

लौटाया गया मान: t (n,), signals (माइक्रोफ़ोनों की संख्या, n), tau (वही), f_emit (वही, उत्सर्जित आवृत्ति), v_radial (वही, निकट आने की दिशा में दूरी के परिवर्तन की दर −d|p(τ) − m(t)|/dt को "स्रोत की दृष्टि-रेखा गति में बदला गया मान" c(1 − 1/D), D = dτ/dt। माइक्रोफ़ोन स्थिर हो तो उत्सर्जन-समय के −ṙ के समान), range_rate (वही, प्राप्ति-समय पर ज्यामितीय दूरी |p(τ) − m(t)| का समय-अवकलज; ऋणात्मक = निकट आ रहा), f_true (वही, = f_emit · dτ/dt। बंद-रूप dτ/dt = (c + r̂·u_L)/(c + r̂·u_S), r̂ = (p(τ) − m(t))/r इकाई सदिश)।

संदर्भ (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.