Updates HackRF native byte buffers with automatic DC removal. Creates new half-band channel source to replace the cic-based channel source in the heterodyne channelizer. Resolves issue in RTL native buffer processing. Creates a CACHED thread pool and reduces the number of threads for the SCHEDULED thread pool to 2. Changes each of the channel source implementations to use a dedicated thread (Dispatcher class) instead of the scheduled thread pool, to reduce the amount of buffered/retained samples objects in memory. Lots of other small changes and tweaks. Removes last of Reusable buffer code. Updates DFTProcessor to use a single thread scheduled executor. Updates Polyphase channelizer to use threads instead of an executor. Removes a number of unused classes. Commenting out window calibration. Scalar is faster in both implementations. Adds vector and scalar implementations for windows. Repackages window and window type classes. WIP adds vector implementations for Airspy non-interleaved buffer iterator and calibration plugins for both interleaved and non-interleaved buffer iterators. WIP adds vector implementations for Airspy interleaved buffer iterator. Work on developing scalar and vector implementations of airspy sample conversion and airspy native buffer processing. Introduces new INativeBuffer framework where tuner raw samples are retained in their native (compressed) format until when they're needed and they are converted on-demand into smaller complex sample buffers to aid garbage collection. Removes all usage of ReusableComplexBuffers and ReusableChannelREsultsBuffers. Updates polyphase channelizer to be more efficient in output channel processing. Updates ViterbiDecoder to change Map usage to array for memory efficiency. Updates channel processors to used scalar implementation for gain and mixer, until the polyphase channel results can be fixed to be a multiple of the SIMD lane width. Resolves final changes for the conversion from interleaved sample arrays to complexsamples buffers for distributing baseband samples to channels and processing chains. Updates tuner channel sources and all decoders to receive new complex samples buffers, removing the previous reusable complex buffers as the default baseband samples buffer object. Still to resolve is the ComplexMixer implementations. Needs validation and a calibration implementation with an update to the complex mixer factory. Updates the DMR decoder to use optimal (scalar vs vector) implementations of filter and AGC controls. Updates the AM demodulator for separated I&Q float sample processing. Code review and testing changes. updates build script for runtime configuration. Integrates calibration manager with main sdrtrunk application. Updates NBFMDecoder to use new optimized FIR and Decimation filter options. Updates real half-band decimation filters to select the optimal (scalar vs vector) implementation. Adds calibration manager plugins. Adds calibration manager and plugins to determine the optimal (scalar vs vector) implementation type to use for various classes of dsp components. Adds vector squelching FM demodulator and cleans up the IIR filter and power squelch to use all floats. Adds vector implementation of FM demodulator. This introduces a new interface that accepts i/q samples as two separate float arrays, versus an interleaved array, which enables more efficient processing. This new complex sample interface will be used across the codebase eventually. Adds ComplexOscillator and a SIMD version VectorComplexOscillator. Deprecates the LowPhaseNoiseOscillator because the ComplexOscillator is about 35% faster. The vectorized version is about 43% faster when SIMD lane width is 8x. Adds new vector complex filters and new real oscillators. Note: the RealOscillator using straight Java math sin() function is 3x slower than the existing legacy implementation. Will replace this with a complex oscillator that only uses the real part. Updates ComplexFIRFilter to be 50% more efficient. Adds 23 tap filter implementations. Will not add 63-tap implementations because they are slower than the default vector implementation. Adds 15-tap customized vector half band filters. Adds initial custom complex vector half-band decimation filters for 11-tap and 15-tap decimation filters.. Adds vector complex half band filter implementations. Note: performance of the generic 64-bit 2-lane filter is horrible and is not included. Optimizes complex half-band filter to be 27% more efficient. Implements vectorized real half-band filter implementations. Implements a new FIR filter class that processes sample buffers instead of single sample at a time. Refactored all of the calibratons to be time-duration based. Testing on windows i7 gen 3 CPU showed that it took 1000x longer for one of the calibrations to run, versus my AMD 5800x. Changed gradle jvm args so that the windows plaf export is always applied. Updates gradle build script to ensure incubator module is included and to cleanup javafx library management for building runtime images. Testing tweaks and changes. Adds logging limiter to dispatcher for buffer overflows Adds User Preferences editor for performing Vector/SIMD calibrations and new startup dialog prompting the user to perform calibrations. Updates calibration manager and all calibration implementations to add warm-up and test phases and to reduce the overall time it takes to calibrate a system. Co-authored-by: Dennis Sheirer <dsheirer@github.com>
sdrtrunk
A cross-platform java application for decoding, monitoring, recording and streaming trunked mobile and related radio protocols using Software Defined Radios (SDR).
- Getting Started
- User's Manual Version 0.3.0 and 0.4.0
- Playlist Editor User Manual Version 0.5.0
- Download
- Support Group
- Discord Support Channel
Figure 1: sdrtrunk Version 0.3.0 Application Screenshot
End User Instructions:
If you simply want to download and run the program, please follow these instructions.
Download the latest sdrtrunk release for your operating system
All release versions of sdrtrunk are available from the releases tab.
- (alpha) These versions are under development feature previews and likely to contain bugs and unexpected behavior.
- (beta) These versions are currently being tested for bugs and functionality prior to final release.
- (final) These versions have been tested and are the current release version.
Unzip the release
Use 7-zip or any zip utility to unzip the release file
Start the application
Once unzipped, open a command prompt to where you unzipped the release. Change to the /bin directory and use the launch script to start the application:
- Windows sdr-trunk.bat
- Linux/OSX ./sdr-trunk
Optional - P25/DMR Audio
If you're using sdrtrunk with a P25 or DMR radio system, you'll need to compile and include the JMBE digital audio library.
In Version 0.5.0 and higher, the SDRTrunk application has support for building the JMBE library. On the menu, choose View >> User Preferences and then click the Decoder >> JMBE Audio Library tab.
For versions prior to Version 0.5.0, the JMBE wiki page contains instructions for downloading the JMBE audio library source code and compiling the JMBE library. Once you have compiled the library, launch the sdrtrunk application. From the menu bar, choose View >> Preferences. In the JMBE Audio Codec section, update the path to where your compiled JMBE library is located. Any channels that are started after you set the path will be able to produce P25 audio.
Minimum System Requirements
- Operating System: Windows (
32 or64-bit), Linux (32 or64-bit) or Mac/Linux (64-bit, 10.14 or higher) - CPU: 4-core
- RAM: 8GB or more (preferred). Depending on usage, 4GB may be sufficient.
Developer Instructions:
If you're interested in modifying and/or compiling the source code, please follow these instructions to use gradle to compile the code.
Build the project
sdrtrunk uses the gradle build system. This requires OpenJDK 17 or higher installed on your local computer.
OpenJDK
There are many vendors producing OpenJDK distributions. A few that I use are:
- Azul Zulu OpenJDK
- Bellsoft Liberica OpenJDK
- SDKMAN - Linux Only
Use the gradle wrapper to build the source code:
Linux
./gradlew clean build
Windows
gradlew.bat clean build
The /build/distributions folder will contain the zip file of the compiled program. Unzip it and launch the program from the scripts in the /bin directory.
Run the Application (from Gradle)
Linux
./gradlew clean run
Windows
gradlew.bat clean run
Development
All dependencies/versions are controlled from build.gradle. To change the new release version tag of artifact - change property:
version = '0.5.0'