# venkata-manoj/rf-signal-analysis architecture

> Architecture diagram of the GitHub repository venkata-manoj/rf-signal-analysis, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/venkata-manoj/rf-signal-analysis
- Repository: https://github.com/venkata-manoj/rf-signal-analysis

## Overview

RF Signal Analysis Workbench takes IQ or WAV captures and produces signal measurements, modulation hypotheses, decoded payloads, and confidence/validation results. The main workflow runs through the shared analysis pipeline: load the capture, estimate signal properties, classify and demodulate it, locate framing, then attempt payload and error-correction decoding. Desktop, browser dashboard, CLI, and batch analysis are documented entry points. The README documents plots, GPS, and batch reporting; the supplied excerpts do not expose all their wiring, so uncertain call links are omitted.

Main entry points: [`src/rf_analyzer/pipeline.py`](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/pipeline.py) (Analysis pipeline), [`src/rf_analyzer/dashboard.py`](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/dashboard.py) (Web dashboard), [`src/rf_analyzer/batch.py`](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/batch.py) (Batch analysis), [`src/rf_analyzer/core/report.py`](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/report.py) (Report generation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User interfaces"]
  node_desktop["Desktop app<br/>[main_window.py]"]
  node_dashboard["Web dashboard<br/>[dashboard.py]"]
  node_cli["CLI runner<br/>[run_pipeline.py]"]
  node_batch["Batch analysis<br/>[batch.py]"]
end

subgraph group_analysis["Signal analysis"]
  node_pipeline["Analysis pipeline<br/>[pipeline.py]"]
  node_io["Capture loading<br/>[io.py]"]
  node_dsp["Signal measurements<br/>[dsp.py]"]
  node_rate["Rate estimation<br/>[rate_est.py]"]
  node_channel["Channel analysis<br/>[channel.py]"]
  node_classifier["Modulation classifier<br/>[classifier.py]"]
  node_receiver["Coherent receiver<br/>[receiver.py]"]
  node_demod["Demodulation<br/>[demod.py]"]
end

subgraph group_decoding["Frame and decode"]
  node_correlator["Sync correlation<br/>[correlator.py]"]
  node_payload["Payload extraction<br/>[payload.py]"]
  node_deinterleave["Deinterleaving<br/>[deinterleave.py]"]
  node_fec["FEC decode<br/>[fec.py]"]
end

subgraph group_outputs["Reports and extensions"]
  node_gps["GPS analysis<br/>[gps.py]"]
  node_report["Report generation<br/>[report.py]"]
end

node_desktop_user(("Desktop user"))
node_browser_user(("Browser user"))
node_cli_user(("CLI user"))
node_folder_user(("Batch user"))

node_desktop_user -->|"opens capture"| node_desktop
node_desktop -->|"runs analysis"| node_pipeline
node_browser_user -->|"submits capture"| node_dashboard
node_dashboard -->|"requests analysis"| node_pipeline
node_cli_user -->|"provides capture"| node_cli
node_cli -->|"runs analysis"| node_pipeline
node_folder_user -->|"selects folder"| node_batch
node_batch -->|"analyzes files"| node_pipeline
node_pipeline -->|"loads capture"| node_io
node_pipeline -->|"measures signal"| node_dsp
node_pipeline -->|"estimates rates"| node_rate
node_pipeline -->|"estimates channel"| node_channel
node_pipeline -->|"classifies modulation"| node_classifier
node_pipeline -->|"attempts reception"| node_receiver
node_receiver -->|"falls back to"| node_demod
node_pipeline -->|"demodulates bits"| node_demod
node_pipeline -->|"finds sync"| node_correlator
node_pipeline -->|"extracts payload"| node_payload
node_pipeline -->|"tests interleaving"| node_deinterleave
node_pipeline -->|"tests decoding"| node_fec
node_pipeline -.->|"optionally analyzes"| node_gps
node_pipeline -->|"builds report"| node_report
node_dashboard -->|"renders summary"| node_report
node_batch -->|"summarizes results"| node_report

click node_desktop "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/gui/main_window.py"
click node_dashboard "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/dashboard.py"
click node_cli "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/scripts/run_pipeline.py"
click node_batch "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/batch.py"
click node_pipeline "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/pipeline.py"
click node_io "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/io.py"
click node_dsp "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/dsp.py"
click node_rate "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/rate_est.py"
click node_channel "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/channel.py"
click node_classifier "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/classifier.py"
click node_receiver "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/receiver.py"
click node_demod "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/demod.py"
click node_correlator "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/correlator.py"
click node_payload "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/payload.py"
click node_deinterleave "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/deinterleave.py"
click node_fec "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/fec.py"
click node_gps "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/gps.py"
click node_report "https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/report.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_desktop,node_dashboard,node_cli,node_batch,node_desktop_user,node_browser_user,node_cli_user,node_folder_user toneBlue
class node_pipeline,node_io,node_dsp,node_rate,node_channel,node_classifier,node_receiver,node_demod toneAmber
class node_correlator,node_payload,node_deinterleave,node_fec toneMint
class node_gps,node_report toneRose
```

## Components

### User interfaces

- [Desktop app](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/gui/main_window.py): `src/rf_analyzer/gui/main_window.py`
- [Web dashboard](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/dashboard.py): `src/rf_analyzer/dashboard.py`
- [CLI runner](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/scripts/run_pipeline.py): `scripts/run_pipeline.py`
- [Batch analysis](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/batch.py): `src/rf_analyzer/batch.py`

### Signal analysis

- [Analysis pipeline](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/pipeline.py): `src/rf_analyzer/pipeline.py`
- [Capture loading](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/io.py): `src/rf_analyzer/core/io.py`
- [Signal measurements](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/dsp.py): `src/rf_analyzer/core/dsp.py`
- [Rate estimation](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/rate_est.py): `src/rf_analyzer/core/rate_est.py`
- [Channel analysis](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/channel.py): `src/rf_analyzer/core/channel.py`
- [Modulation classifier](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/classifier.py): `src/rf_analyzer/core/classifier.py`
- [Coherent receiver](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/receiver.py): `src/rf_analyzer/core/receiver.py`
- [Demodulation](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/demod.py): `src/rf_analyzer/core/demod.py`

### Frame and decode

- [Sync correlation](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/correlator.py): `src/rf_analyzer/core/correlator.py`
- [Payload extraction](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/payload.py): `src/rf_analyzer/core/payload.py`
- [Deinterleaving](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/deinterleave.py): `src/rf_analyzer/core/deinterleave.py`
- [FEC decode](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/fec.py): `src/rf_analyzer/core/fec.py`

### Reports and extensions

- [GPS analysis](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/gps.py): `src/rf_analyzer/core/gps.py`
- [Report generation](https://github.com/venkata-manoj/rf-signal-analysis/blob/main/src/rf_analyzer/core/report.py): `src/rf_analyzer/core/report.py`

### Other components

- **Desktop user**
- **Browser user**
- **CLI user**
- **Batch user**

## Connections

- Desktop user → Desktop app: opens capture
- Desktop app → Analysis pipeline: runs analysis
- Browser user → Web dashboard: submits capture
- Web dashboard → Analysis pipeline: requests analysis
- CLI user → CLI runner: provides capture
- CLI runner → Analysis pipeline: runs analysis
- Batch user → Batch analysis: selects folder
- Batch analysis → Analysis pipeline: analyzes files
- Analysis pipeline → Capture loading: loads capture
- Analysis pipeline → Signal measurements: measures signal
- Analysis pipeline → Rate estimation: estimates rates
- Analysis pipeline → Channel analysis: estimates channel
- Analysis pipeline → Modulation classifier: classifies modulation
- Analysis pipeline → Coherent receiver: attempts reception
- Coherent receiver → Demodulation: falls back to
- Analysis pipeline → Demodulation: demodulates bits
- Analysis pipeline → Sync correlation: finds sync
- Analysis pipeline → Payload extraction: extracts payload
- Analysis pipeline → Deinterleaving: tests interleaving
- Analysis pipeline → FEC decode: tests decoding
- Analysis pipeline → GPS analysis: optionally analyzes
- Analysis pipeline → Report generation: builds report
- Web dashboard → Report generation: renders summary
- Batch analysis → Report generation: summarizes results
