| @@ -96,6 +96,9 @@ Neue Konfig-Teile einführen: | |||||
| - `resources.*` | - `resources.*` | ||||
| - optionale `profiles.*` | - optionale `profiles.*` | ||||
| Zusatz: | |||||
| - `refinement.detail_fft_size` für einen eigenständigen Detailpfad (Refinement-FFT) neben der Surveillance-FFT | |||||
| Wichtig: | Wichtig: | ||||
| - Abwärtskompatibilität zur bisherigen Config möglichst erhalten | - Abwärtskompatibilität zur bisherigen Config möglichst erhalten | ||||
| - bisherige Felder weiterhin nutzbar | - bisherige Felder weiterhin nutzbar | ||||
| @@ -110,6 +113,7 @@ Wichtig: | |||||
| - zunächst mit CPU-/bestehendem GPU-Extraction-Pfad implementieren | - zunächst mit CPU-/bestehendem GPU-Extraction-Pfad implementieren | ||||
| - Detector bleibt vorerst Kern der Candidate-Erzeugung | - Detector bleibt vorerst Kern der Candidate-Erzeugung | ||||
| - Refiner sitzt danach explizit als eigener Schritt in der Pipeline | - Refiner sitzt danach explizit als eigener Schritt in der Pipeline | ||||
| - Refinement-Workitems mit expliziten Ausführungsparametern (FFT/Span/Stage) | |||||
| ### E. Pipeline-Orchestrierung modularisieren | ### E. Pipeline-Orchestrierung modularisieren | ||||
| - `runDSP()` entflechten | - `runDSP()` entflechten | ||||
| @@ -122,6 +126,7 @@ Wichtig: | |||||
| - track | - track | ||||
| - present | - present | ||||
| - record | - record | ||||
| - Gemeinsame Arbitration-/Budget-Sicht für refinement/record/decode vorbereiten | |||||
| ### F. Dokumentierte Betriebsprofile | ### F. Dokumentierte Betriebsprofile | ||||
| - initiale Profile definieren, z. B.: | - initiale Profile definieren, z. B.: | ||||
| @@ -70,15 +70,16 @@ Edit `config.yaml` (autosave goes to `config.autosave.yaml`). | |||||
| - `surveillance.display_fps` — preferred presentation cadence for clients/UI | - `surveillance.display_fps` — preferred presentation cadence for clients/UI | ||||
| - `refinement.enabled` — enables explicit candidate refinement stage | - `refinement.enabled` — enables explicit candidate refinement stage | ||||
| - `refinement.max_concurrent` — refinement budget hint | - `refinement.max_concurrent` — refinement budget hint | ||||
| - `refinement.detail_fft_size` — FFT size for refinement/detail path (defaults to surveillance analysis FFT) | |||||
| - `refinement.min_candidate_snr_db` — floor for future scheduling decisions | - `refinement.min_candidate_snr_db` — floor for future scheduling decisions | ||||
| - `refinement.min_span_hz` / `refinement.max_span_hz` — clamp refinement window span (0 = no clamp) | - `refinement.min_span_hz` / `refinement.max_span_hz` — clamp refinement window span (0 = no clamp) | ||||
| - `refinement.auto_span` — use mod-type heuristics when candidate bandwidth is missing/odd | - `refinement.auto_span` — use mod-type heuristics when candidate bandwidth is missing/odd | ||||
| - `resources.prefer_gpu` — GPU preference hint | - `resources.prefer_gpu` — GPU preference hint | ||||
| **Operating profiles (wideband)** | **Operating profiles (wideband)** | ||||
| - `wideband-balanced`: multi-resolution, 4096 FFT, refinement span 4000-200000 Hz | |||||
| - `wideband-aggressive`: multi-resolution, 8192 FFT, refinement span 6000-250000 Hz | |||||
| - `archive`: record-forward bias, higher record/decode budgets | |||||
| - `wideband-balanced`: multi-resolution, 4096 surveillance/detail FFT, refinement span 4000-200000 Hz | |||||
| - `wideband-aggressive`: multi-resolution, 8192 surveillance/detail FFT, refinement span 6000-250000 Hz | |||||
| - `archive`: record-forward bias, higher record/decode budgets, 4096 detail FFT | |||||
| - `digital-hunting`: digital-first priorities and decode bias | - `digital-hunting`: digital-first priorities and decode bias | ||||
| - `resources.max_refinement_jobs` — processing budget hint | - `resources.max_refinement_jobs` — processing budget hint | ||||
| - `resources.max_recording_streams` — recording/streaming budget hint | - `resources.max_recording_streams` — recording/streaming budget hint | ||||
| @@ -158,7 +159,7 @@ go build -tags sdrplay ./cmd/sdrd | |||||
| - `GET /api/gpu` | - `GET /api/gpu` | ||||
| - `GET /api/pipeline/policy` | - `GET /api/pipeline/policy` | ||||
| - `GET /api/pipeline/recommendations` | - `GET /api/pipeline/recommendations` | ||||
| - `GET /api/refinement` → latest refinement plan/windows snapshot (includes `window_stats`, `queue_stats`, `decision_summary`, `decision_items`, levels, request/context/budgets/work_items) | |||||
| - `GET /api/refinement` → latest refinement plan/windows snapshot (includes `window_stats`, `queue_stats`, `decision_summary`, `decision_items`, `arbitration`, levels, request/context/budgets/work_items) | |||||
| ### Signals / Events | ### Signals / Events | ||||
| - `GET /api/signals` → current live signals | - `GET /api/signals` → current live signals | ||||
| @@ -30,6 +30,7 @@ surveillance: | |||||
| refinement: | refinement: | ||||
| enabled: true | enabled: true | ||||
| max_concurrent: 8 | max_concurrent: 8 | ||||
| detail_fft_size: 2048 | |||||
| min_candidate_snr_db: 0 | min_candidate_snr_db: 0 | ||||
| min_span_hz: 0 | min_span_hz: 0 | ||||
| max_span_hz: 0 | max_span_hz: 0 | ||||
| @@ -37,13 +38,34 @@ refinement: | |||||
| profiles: | profiles: | ||||
| - name: legacy | - name: legacy | ||||
| description: Current single-band pipeline behavior | description: Current single-band pipeline behavior | ||||
| surveillance: | |||||
| analysis_fft_size: 2048 | |||||
| strategy: single-resolution | |||||
| resources: | |||||
| max_refinement_jobs: 8 | |||||
| max_recording_streams: 16 | |||||
| max_decode_jobs: 16 | |||||
| decision_hold_ms: 2000 | |||||
| refinement: | |||||
| max_concurrent: 8 | |||||
| detail_fft_size: 2048 | |||||
| pipeline: | pipeline: | ||||
| mode: legacy | mode: legacy | ||||
| goals: | goals: | ||||
| intent: general-monitoring | intent: general-monitoring | ||||
| - name: wideband-balanced | - name: wideband-balanced | ||||
| description: Prepared baseline for scalable wideband surveillance | description: Prepared baseline for scalable wideband surveillance | ||||
| surveillance: | |||||
| analysis_fft_size: 4096 | |||||
| strategy: multi-resolution | |||||
| resources: | |||||
| max_refinement_jobs: 16 | |||||
| max_recording_streams: 16 | |||||
| max_decode_jobs: 12 | |||||
| decision_hold_ms: 2000 | |||||
| refinement: | refinement: | ||||
| max_concurrent: 16 | |||||
| detail_fft_size: 4096 | |||||
| min_span_hz: 4000 | min_span_hz: 4000 | ||||
| max_span_hz: 200000 | max_span_hz: 200000 | ||||
| pipeline: | pipeline: | ||||
| @@ -52,7 +74,17 @@ profiles: | |||||
| intent: wideband-surveillance | intent: wideband-surveillance | ||||
| - name: wideband-aggressive | - name: wideband-aggressive | ||||
| description: Higher surveillance/refinement budgets for future broad-span monitoring | description: Higher surveillance/refinement budgets for future broad-span monitoring | ||||
| surveillance: | |||||
| analysis_fft_size: 8192 | |||||
| strategy: multi-resolution | |||||
| resources: | |||||
| max_refinement_jobs: 32 | |||||
| max_recording_streams: 24 | |||||
| max_decode_jobs: 16 | |||||
| decision_hold_ms: 2000 | |||||
| refinement: | refinement: | ||||
| max_concurrent: 32 | |||||
| detail_fft_size: 8192 | |||||
| min_span_hz: 6000 | min_span_hz: 6000 | ||||
| max_span_hz: 250000 | max_span_hz: 250000 | ||||
| pipeline: | pipeline: | ||||
| @@ -61,6 +93,19 @@ profiles: | |||||
| intent: high-density-wideband-surveillance | intent: high-density-wideband-surveillance | ||||
| - name: archive | - name: archive | ||||
| description: Record-first monitoring profile | description: Record-first monitoring profile | ||||
| surveillance: | |||||
| analysis_fft_size: 4096 | |||||
| strategy: single-resolution | |||||
| resources: | |||||
| max_refinement_jobs: 12 | |||||
| max_recording_streams: 24 | |||||
| max_decode_jobs: 12 | |||||
| decision_hold_ms: 2500 | |||||
| refinement: | |||||
| max_concurrent: 12 | |||||
| detail_fft_size: 4096 | |||||
| min_span_hz: 4000 | |||||
| max_span_hz: 200000 | |||||
| pipeline: | pipeline: | ||||
| mode: archive | mode: archive | ||||
| goals: | goals: | ||||