How pavsa/hackrf-spectrum-analyzer works
This is a Java desktop spectrum analyzer for HackRF. The main workflow is to configure a frequency range and capture settings, start native HackRF sweeps, receive FFT-bin callbacks, and render spectrum, peak/persistence, and waterfall views. Frequency-allocation bands, spur filtering, and screen capture are additional capabilities. The graph uses the README and source-index references plus shown excerpts; unsampled implementation details and some internal call paths are not asserted.
Main entry points: HackRFSweepSpectrumAnalyzer.java Analyzer application · HackRFSweepSettingsUI.java Settings UI · DatasetSpectrum.java Spectrum dataset · FrequencyAllocations.java Allocation bands
Components 24
Application
- Analyzer application
src/hackrf-sweep/src/main/java/jspectrumanalyzer/HackRFSweepSpectrumAnalyzer.java - Screen capture
src/hackrf-sweep/src/main/java/jspectrumanalyzer/capture/ScreenCapture.java
Settings and display
- Settings UI
src/hackrf-sweep/src/main/java/jspectrumanalyzer/ui/HackRFSweepSettingsUI.java - Frequency selector
src/hackrf-sweep/src/main/java/jspectrumanalyzer/ui/FrequencySelectorPanel.java - Range binder
src/hackrf-sweep/src/main/java/jspectrumanalyzer/ui/FrequencySelectorRangeBinder.java - MVC controller
src/hackrf-sweep/src/main/java/shared/mvc/MVCController.java - HackRF settings
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/HackRFSettings.java - Observable values
src/hackrf-sweep/src/main/java/shared/mvc/ModelValue.java
Spectrum processing
- FFT bins
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/FFTBins.java - Spectrum dataset
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/DatasetSpectrum.java - Immutable chart series
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/jfc/XYSeriesImmutable.java - Peak display data
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/DatasetSpectrumPeak.java - Spur filter
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/SpurFilter.java - Persistent display
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/PersistentDisplay.java - Waterfall plot
src/hackrf-sweep/src/main/java/jspectrumanalyzer/ui/WaterfallPlot.java - Allocation bands
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/FrequencyAllocations.java - Allocation table
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/FrequencyAllocationTable.java - Frequency bands
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/FrequencyBand.java - Frequency range
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/FrequencyRange.java
Device integration
- Native bridge
src/hackrf-sweep/src/main/java/jspectrumanalyzer/nativebridge/HackRFSweepNativeBridge.java - Sweep library binding
src/hackrf-sweep/src/main/java/hackrfsweep/HackrfSweepLibrary.java - Sweep callback
src/hackrf-sweep/src/main/java/jspectrumanalyzer/nativebridge/HackRFSweepDataCallback.java
Other components
- Operator
- HackRF device
Connections 28
- Operator → Settings UI: sets parameters
Readme.md - Operator → Analyzer application: views results
Readme.md - Settings UI → MVC controller: binds controls
src/hackrf-sweep/src/main/java/jspectrumanalyzer/ui/HackRFSweepSettingsUI.java - MVC controller → Observable values: synchronizes values
src/hackrf-sweep/src/main/java/shared/mvc/MVCController.java - Settings UI → HackRF settings: configures
src/hackrf-sweep/src/main/java/jspectrumanalyzer/ui/HackRFSweepSettingsUI.java - Settings UI → Frequency selector: uses selector
src/hackrf-sweep/src/main/java/jspectrumanalyzer/ui/HackRFSweepSettingsUI.java - Settings UI → Range binder: binds range
src/hackrf-sweep/src/main/java/jspectrumanalyzer/ui/HackRFSweepSettingsUI.java - Range binder → Frequency range: updates range
src/hackrf-sweep/src/main/java/jspectrumanalyzer/ui/FrequencySelectorRangeBinder.java - Analyzer application → Native bridge: starts sweeps
src/hackrf-sweep/src/main/java/jspectrumanalyzer/HackRFSweepSpectrumAnalyzer.java - Native bridge → Sweep library binding: invokes binding
src/hackrf-sweep/src/main/java/jspectrumanalyzer/nativebridge/HackRFSweepNativeBridge.java - Sweep library binding → HackRF device: captures radio data
Readme.md - Native bridge → Sweep callback: delivers bins
src/hackrf-sweep/src/main/java/jspectrumanalyzer/nativebridge/HackRFSweepNativeBridge.java - Sweep callback → Analyzer application: reports spectrum
src/hackrf-sweep/src/main/java/jspectrumanalyzer/HackRFSweepSpectrumAnalyzer.java - Analyzer application → FFT bins: queues sweep bins
src/hackrf-sweep/src/main/java/jspectrumanalyzer/HackRFSweepSpectrumAnalyzer.java - Analyzer application → Spectrum dataset: updates spectrum
src/hackrf-sweep/src/main/java/jspectrumanalyzer/HackRFSweepSpectrumAnalyzer.java - Spectrum dataset → FFT bins: consumes bins
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/DatasetSpectrum.java - Spectrum dataset → Immutable chart series: creates series
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/DatasetSpectrum.java - Analyzer application → Spur filter: filters spectrum
src/hackrf-sweep/src/main/java/jspectrumanalyzer/HackRFSweepSpectrumAnalyzer.java - Analyzer application → Peak display data: uses peak data
src/hackrf-sweep/src/main/java/jspectrumanalyzer/HackRFSweepSpectrumAnalyzer.java - Analyzer application → Persistent display: updates persistence
src/hackrf-sweep/src/main/java/jspectrumanalyzer/HackRFSweepSpectrumAnalyzer.java - Persistent display → Spectrum dataset: accumulates spectrum
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/PersistentDisplay.java - Analyzer application → Waterfall plot: renders waterfall
src/hackrf-sweep/src/main/java/jspectrumanalyzer/HackRFSweepSpectrumAnalyzer.java - Waterfall plot → Spectrum dataset: plots spectrum
src/hackrf-sweep/src/main/java/jspectrumanalyzer/ui/WaterfallPlot.java - Analyzer application → Allocation bands: selects bands
src/hackrf-sweep/src/main/java/jspectrumanalyzer/HackRFSweepSpectrumAnalyzer.java - Allocation bands → Allocation table: loads tables
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/FrequencyAllocations.java - Allocation bands → Frequency bands: uses bands
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/FrequencyAllocations.java - Allocation table → Frequency bands: renders bands
src/hackrf-sweep/src/main/java/jspectrumanalyzer/core/FrequencyAllocationTable.java - Analyzer application → Screen capture: captures screen
src/hackrf-sweep/src/main/java/jspectrumanalyzer/HackRFSweepSpectrumAnalyzer.java