# grover-seerat/sih-ps147 architecture

> Architecture diagram of the GitHub repository grover-seerat/sih-ps147, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/grover-seerat/sih-ps147
- Repository: https://github.com/grover-seerat/sih-ps147

## Overview

NTRO SIGINT is a browser-based RF capture analysis suite backed by a FastAPI signal-processing engine. The principal workflow is capture upload, format-aware reading, signal detection, DSP measurement and ML/DSP modulation classification, followed by demodulation and presentation of analysis results. The UI also offers spectral, parameter, bitstream and reporting views; FEC decoding and preamble correlation are explicitly unavailable. Edges reflect cited source references or README documentation; some UI data handoffs and unsampled subsystem details are not shown.

Main entry points: [`frontend/src/App.jsx`](https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/App.jsx) (Application shell), [`backend/src/pipeline/analyzer.py`](https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/pipeline/analyzer.py) (Analysis orchestrator), [`backend/api/main.py`](https://github.com/grover-seerat/sih-ps147/blob/main/backend/api/main.py) (HTTP API), [`backend/src/io/universal_reader.py`](https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/io/universal_reader.py) (Universal reader)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Analysis interface"]
  node_app["Application shell<br/>[App.jsx]"]
  node_ingestion["Capture ingestion"]
  node_spectral["Spectral view<br/>[SpectralModule.jsx]"]
  node_parameters["Parameter view"]
  node_demodview["Demodulation view"]
  node_fec["FEC status<br/>[FECModule.jsx]"]
  node_bitstream["Bitstream view"]
  node_reporting["Report export"]
  node_frontend_api["API client<br/>[api.js]"]
end

subgraph group_api["API and ingestion"]
  node_fastapi["HTTP API<br/>[main.py]"]
  node_reader["Universal reader"]
  node_iqreader["IQ reader<br/>[iq_reader.py]"]
  node_wavreader["WAV reader<br/>[wav_reader.py]"]
end

subgraph group_analysis["Signal analysis"]
  node_analyzer["Analysis orchestrator<br/>[analyzer.py]"]
  node_detector["Signal detector<br/>[detector.py]"]
  node_features["DSP features<br/>[features.py]"]
  node_psd["Power spectrum<br/>[psd.py]"]
  node_predictor["Modulation classifier<br/>[predict.py]"]
  node_fusion["Evidence fusion<br/>[fusion.py]"]
end

subgraph group_support["Modulation and data"]
  node_demod["Demodulation methods"]
  node_generators["Signal generators"]
  node_fec_unavailable["FEC unavailable"]
end

node_analyst(("Analyst"))

node_analyst -->|"uploads capture"| node_ingestion
node_app -->|"renders"| node_ingestion
node_app -->|"renders"| node_spectral
node_app -->|"renders"| node_parameters
node_app -->|"renders"| node_demodview
node_app -->|"renders"| node_fec
node_app -->|"renders"| node_bitstream
node_app -->|"renders"| node_reporting
node_ingestion -->|"calls"| node_frontend_api
node_frontend_api -->|"sends upload and analysis"| node_fastapi
node_fastapi -->|"loads capture"| node_reader
node_fastapi -->|"runs analysis"| node_analyzer
node_fastapi -->|"computes spectrum"| node_psd
node_reader -->|"reads IQ"| node_iqreader
node_reader -->|"reads WAV"| node_wavreader
node_analyzer -->|"loads samples"| node_reader
node_analyzer -->|"detects signals"| node_detector
node_analyzer -->|"extracts measurements"| node_features
node_analyzer -->|"classifies modulation"| node_predictor
node_analyzer -->|"fuses evidence"| node_fusion
node_analyzer -->|"dispatches by modulation"| node_demod
node_features -->|"computes spectrum"| node_psd
node_analyst -.->|"can generate training signals"| node_generators
node_fec -->|"reports unavailable"| node_fec_unavailable

click node_app "https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/App.jsx"
click node_ingestion "https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/components/FileIngestion/FileIngestionModule.jsx"
click node_spectral "https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/components/SpectralPanel/SpectralModule.jsx"
click node_parameters "https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/components/ParameterDashboard/ParameterModule.jsx"
click node_demodview "https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/components/DemodulationPanel/DemodulationModule.jsx"
click node_fec "https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/components/FECDeinterleaving/FECModule.jsx"
click node_bitstream "https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/components/BitstreamPanel/BitstreamModule.jsx"
click node_reporting "https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/components/ExportReporting/ReportingModule.jsx"
click node_frontend_api "https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/api.js"
click node_fastapi "https://github.com/grover-seerat/sih-ps147/blob/main/backend/api/main.py"
click node_reader "https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/io/universal_reader.py"
click node_iqreader "https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/io/iq_reader.py"
click node_wavreader "https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/io/wav_reader.py"
click node_analyzer "https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/pipeline/analyzer.py"
click node_detector "https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/pipeline/detector.py"
click node_features "https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/dsp/features.py"
click node_psd "https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/dsp/psd.py"
click node_predictor "https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/ml/predict.py"
click node_fusion "https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/pipeline/fusion.py"
click node_demod "https://github.com/grover-seerat/sih-ps147/tree/main/backend/src/demod"
click node_generators "https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/dataset/signal_generators.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_app,node_ingestion,node_spectral,node_parameters,node_demodview,node_fec,node_bitstream,node_reporting,node_frontend_api toneBlue
class node_fastapi,node_reader,node_iqreader,node_wavreader toneAmber
class node_analyzer,node_detector,node_features,node_psd,node_predictor,node_fusion toneMint
class node_demod,node_generators,node_fec_unavailable toneRose
class node_analyst toneIndigo
```

## Components

### Analysis interface

- [Application shell](https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Capture ingestion](https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/components/FileIngestion/FileIngestionModule.jsx): `frontend/src/components/FileIngestion/FileIngestionModule.jsx`
- [Spectral view](https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/components/SpectralPanel/SpectralModule.jsx): `frontend/src/components/SpectralPanel/SpectralModule.jsx`
- [Parameter view](https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/components/ParameterDashboard/ParameterModule.jsx): `frontend/src/components/ParameterDashboard/ParameterModule.jsx`
- [Demodulation view](https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/components/DemodulationPanel/DemodulationModule.jsx): `frontend/src/components/DemodulationPanel/DemodulationModule.jsx`
- [FEC status](https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/components/FECDeinterleaving/FECModule.jsx): `frontend/src/components/FECDeinterleaving/FECModule.jsx`
- [Bitstream view](https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/components/BitstreamPanel/BitstreamModule.jsx): `frontend/src/components/BitstreamPanel/BitstreamModule.jsx`
- [Report export](https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/components/ExportReporting/ReportingModule.jsx): `frontend/src/components/ExportReporting/ReportingModule.jsx`
- [API client](https://github.com/grover-seerat/sih-ps147/blob/main/frontend/src/api.js): `frontend/src/api.js`

### API and ingestion

- [HTTP API](https://github.com/grover-seerat/sih-ps147/blob/main/backend/api/main.py): `backend/api/main.py`
- [Universal reader](https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/io/universal_reader.py): `backend/src/io/universal_reader.py`
- [IQ reader](https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/io/iq_reader.py): `backend/src/io/iq_reader.py`
- [WAV reader](https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/io/wav_reader.py): `backend/src/io/wav_reader.py`

### Signal analysis

- [Analysis orchestrator](https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/pipeline/analyzer.py): `backend/src/pipeline/analyzer.py`
- [Signal detector](https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/pipeline/detector.py): `backend/src/pipeline/detector.py`
- [DSP features](https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/dsp/features.py): `backend/src/dsp/features.py`
- [Power spectrum](https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/dsp/psd.py): `backend/src/dsp/psd.py`
- [Modulation classifier](https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/ml/predict.py): `backend/src/ml/predict.py`
- [Evidence fusion](https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/pipeline/fusion.py): `backend/src/pipeline/fusion.py`

### Modulation and data

- [Demodulation methods](https://github.com/grover-seerat/sih-ps147/tree/main/backend/src/demod): `backend/src/demod`
- [Signal generators](https://github.com/grover-seerat/sih-ps147/blob/main/backend/src/dataset/signal_generators.py): `backend/src/dataset/signal_generators.py`
- **FEC unavailable**

### Other components

- **Analyst**

## Connections

- Analyst → Capture ingestion: uploads capture
- Application shell → Capture ingestion: renders (evidence: `frontend/src/App.jsx`)
- Application shell → Spectral view: renders (evidence: `frontend/src/App.jsx`)
- Application shell → Parameter view: renders (evidence: `frontend/src/App.jsx`)
- Application shell → Demodulation view: renders (evidence: `frontend/src/App.jsx`)
- Application shell → FEC status: renders (evidence: `frontend/src/App.jsx`)
- Application shell → Bitstream view: renders (evidence: `frontend/src/App.jsx`)
- Application shell → Report export: renders (evidence: `frontend/src/App.jsx`)
- Capture ingestion → API client: calls (evidence: `frontend/src/components/FileIngestion/FileIngestionModule.jsx`)
- API client → HTTP API: sends upload and analysis
- HTTP API → Universal reader: loads capture (evidence: `backend/api/main.py`)
- HTTP API → Analysis orchestrator: runs analysis (evidence: `backend/api/main.py`)
- HTTP API → Power spectrum: computes spectrum (evidence: `backend/api/main.py`)
- Universal reader → IQ reader: reads IQ (evidence: `backend/src/io/universal_reader.py`)
- Universal reader → WAV reader: reads WAV (evidence: `backend/src/io/universal_reader.py`)
- Analysis orchestrator → Universal reader: loads samples (evidence: `backend/src/pipeline/analyzer.py`)
- Analysis orchestrator → Signal detector: detects signals (evidence: `backend/src/pipeline/analyzer.py`)
- Analysis orchestrator → DSP features: extracts measurements (evidence: `backend/src/pipeline/analyzer.py`)
- Analysis orchestrator → Modulation classifier: classifies modulation (evidence: `backend/src/pipeline/analyzer.py`)
- Analysis orchestrator → Evidence fusion: fuses evidence (evidence: `backend/src/pipeline/analyzer.py`)
- Analysis orchestrator → Demodulation methods: dispatches by modulation (evidence: `backend/src/pipeline/analyzer.py`)
- DSP features → Power spectrum: computes spectrum (evidence: `backend/src/dsp/features.py`)
- Analyst → Signal generators: can generate training signals
- FEC status → FEC unavailable: reports unavailable
