The Spectral Analyzer is a JavaFX application to load and analyze SigMF datasets. The main view shows the spectrogram of the input signal along with the annotations list. Custom color mappings can be applied to highlight various signals of interest.
This project is implemented in Java 21. Make sure to install a Java Runtime to run the application, or the JDK to work with the source code.
# install JDK 21 (on Ubuntu)
sudo apt install openjdk-21-jdk -y
# verify that it is installed
javac --version # ===============================================================
# Test the build
# ===============================================================
# build the application and run test
./gradlew build check
# ===============================================================
# Run in Development
# ===============================================================
# run from gradle (for development purposes)
# NOTE: uses incremental build
./gradlew run
# ===============================================================
# Build (bootJar)
# ===============================================================
# build a Spring Boot JAR
# NOTE: on linux, may append "-boot" to the name.
./gradlew bootJar
Before running, make sure the Java Runtime is installed (Install Java)
After building the bootJar or pulling the Jar from the release, you can run the program with the following:
# ===============================================================
# Run Deployment (from the bootJar)
# ===============================================================
# NOTE: make sure the correct OS version is selected (Windows vs Linux)
java -jar .\build\libs\spectral_analyzer-$VERSION.jarThe Spectral Analyzer starts with the spectrogram view and allows the user to select time/frequency blocks and manually add new annotations. It supports launching an analysis dialog to operate on a downconverted signal to refine the time/frequency boundaries and get user-aided estimates (passband power, noise floor and SNR measurements).
- Apply a JSON color config file to specify the color scheme to apply to unique annotation labels.
- Select an annotation for user analysis
- Click annotation to select
- Click the 'Analyze Selection` button to go into Annotation Analysis
- Apply REST Capability
- Run
Capabilities > Connect to a REST servermenu item- The default address is set to a local FastAPI deployment (http://localhost:8000/openapi.json)
- Apply the capability to the selected annotation.
- This applies the capability asynchronously. The results will then be displayed in a pop-up dialog. The contents can be copied and used to update the annotation.
- Some REST services go to sleep when idle. This is one way to wake the service.
- Since the capability may take a while, this approach allows testing capabilities. It does not try to save results automatically to the annotation (as the user may have removed the annotation before the result comes back.)
- Run
- Enter Table View
- This is a table to review the annotations in the file.
- Supports modifying annotations.
- Supports running batches of annotations through the capabilities. The capabilities are run synchronously and will update the information in the table view. User selection of
OKis needed to save update from the table back to the annotations. And then saving the modifified annotations through theFile > Save Signalmenu item.
- The PSD tab of the
Analysis Dialogis shown below. This takes user input:- I used the analysis to get the power measurements. The
commentpart of the annotation is displayed as a tool tip or on the right when I select the annotation. - User selects Passband with a standard mouse
Click. - User selects Noise Floor with
Ctrl + Click. - User selects low and high frequency with
Shift + Click. Update Freqsbutton will apply user selected bandwidth if the frequencies are selected.Update Timebutton will apply user selected time (selected in magnitude or frequency plots)- If user selected passband and noise floor, the
Update Measurementswill append the measurements to the comment text area (the annotation itself has not been updated yet. HitUpdate Label and Commentto apply modifications to those fields back to the annotation at hand.)
- I used the analysis to get the power measurements. The
The table view can be entered from View > Table View. This supports reviewing the annotations and modifying it.
- Sort by time start, duration, bandwidth or center frequency.
- Review neighboring annotations (sort by time).
- Support modifying Label or Description to improve consistency.
- Support calling REST capabilities on a batch of selected annotations.
- This differs from the usage from the Spectrogram View. It runs the capability synchronously and maintains the modality of the dialog box to avoid the user removing an annotation that is being analyzed. With this, the responding text is updated into the table. This is not saved to the SigMF unless the
OKbutton is clicked.Cancelwill drop modifications made in the table. - Modifications to the annotations still require a save from the Spectrogram View to save updates into the SigMF meta file.
- This differs from the usage from the Spectrogram View. It runs the capability synchronously and maintains the modality of the dialog box to avoid the user removing an annotation that is being analyzed. With this, the responding text is updated into the table. This is not saved to the SigMF unless the
| Library | License | Description |
|---|---|---|
| Apache Common Math 3 v3.6.1 | Apache License 2.0 | Provides FFT and complex number math |
| EJML | Apache License 2.0 | A dependency of JDSP |
| Jackson Databind | Apache License 2.0 | JSON mapping to support read/write SigMF meta files |
| JDSP v1.2 | MIT | DSP library support resampling, frequency shift, and filtering |
| JFreeChart | LGPL-2.1 | The core charting engine for generating high performance 2D plots |
| JFreeChart-FX | LGPL-2.1 | Bridge library that enables JFreeChart to render within the JavaFX Scene Graph |
| Spring Boot | Apache License 2.0 | Provides application framework, dependency injection, and automated configuration management |
| Spring Framework | Apache License 2.0 | The foundational framework providing core inversion of control (IoC) and event-handling capabilities |
Open Source & LGPL Compliance
This project is open source and is intended to be fully compliant with the GNU Lesser General Public License (LGPL).
- Relinking & Modification:
- Because the source code for this entire project is publicly available, users may freely modify the build.gradle file to use different versions of the LGPL libraries (such as JFreeChart) and recompile the application using Gradle.
- Combined Work
- This application is a "combined work" under the terms of the LGPL. It links to the libraries listed in the table above but does not include modified source code from those libraries within its own packages.
- No Restrictions
- We do not use any technical measures (such as hardware locking or code obfuscation) to prevent users from running modified versions of the LGPL libraries with this software.


