decide op• Datenarten: keine → table (ein Operator, der allein durch seine Argumente bestimmt ist — er nimmt kein Bild und keine Daten entgegen)
• Aufruf: 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]' (die Implementierung direkt: 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]'; aus dem Register: opsdrive.get("siren_signal"))
Synthetisiert den Klang der Sirene eines fahrenden Rettungswagens (zwei abwechselnde Töne), wie ihn ein ruhendes Mikrofon hört.
Quelle p(τ) = source_start + source_velocity·τ (2D, gleichförmige geradlinige Bewegung); der abgestrahlte Ton ist sin φ(τ), wobei φ eine kontinuierliche Phase ist, die einen hohen Ton f_high und einen tiefen Ton f_low jeweils period/2 lang abwechselnd erklingen lässt. Was das Mikrofon m zum Zeitpunkt t hört, ist sin φ(τ) zum Abstrahlzeitpunkt τ, der
c (t − τ) = |p(τ) − m| ⇔ (c² − |u|²) s² + 2 (q·u) s − |q|² = 0, s = t − τ ≥ 0, q = p(t) − m
erfüllt (Amplitude r_ref / r bei spreading, r_ref = Anfangsabstand). Die Doppler-Formel wird nicht verwendet (nur die Geometrie der Ankunftszeiten), daher ist dies ein unabhängiger Pfad für das Gate von doppler_track.
mic_velocity = konstante Geschwindigkeit des Mikrofons (bzw. des Ego-Fahrzeugs, das es trägt) (relativ zur Luft = zum Boden; kein Wind). Das Mikrofon bewegt sich gemäß m(t) = m₀ + u_L t. Die obige Gleichung gilt in unveränderter Form mit q = p(t) − m(t) (c(t − τ) = |p(τ) − m(t)|, p(τ) = p(t) − u s). In die quadratische Gleichung geht nur die Mikrofonposition zum Empfangszeitpunkt ein (die Quelle bewegt sich gleichförmig), daher darf sich das Mikrofon auf beliebigem Weg bewegen:
wird mic_track = (Position (k, n, 2), Geschwindigkeit (k, n, 2)) pro Sample angegeben, wird es statt mics / mic_velocity verwendet (ein Mikrofon auf einem Ego-Fahrzeug, das abbremst und nach links ausweicht; die Geschwindigkeit dient nur der geschlossenen Form von dτ/dt).
Rückgabewert: t (n,), signals (Anzahl Mikrofone, n), tau (dito), f_emit (dito, abgestrahlte Frequenz), v_radial (dito, Änderungsrate des Abstands in Annäherungsrichtung −d|p(τ) − m(t)|/dt, "umgerechnet in die Sichtliniengeschwindigkeit der Quelle" c(1 − 1/D), D = dτ/dt. Steht das Mikrofon still, gleich −ṙ zum Abstrahlzeitpunkt), range_rate (dito, Zeitableitung des geometrischen Abstands |p(τ) − m(t)| beim Empfang; negativ = Annäherung), f_true (dito, = f_emit · dτ/dt. Geschlossene Form dτ/dt = (c + r̂·u_L)/(c + r̂·u_S), r̂ = Einheitsvektor (p(τ) − m(t))/r).
• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).
• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.
• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.
• poc_driving_decisions — py -3.11 examples/poc_driving_decisions.py
table als Eingabe)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
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. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.