Best P25 software packages in terms of audio performance?

maus92

Member
Premium Subscriber
Joined
Jun 23, 2004
Messages
4,638
Location
Annapolis
How do people rate the various SDR software packages in terms of audio performance on P25 simulcast systems. I'm curious because I was surprised by the excellent performance of SDRTrunk when following a decoding a local P25P2 system.
 

R0am3r

Saltwater Conch
Premium Subscriber
Joined
Apr 13, 2014
Messages
316
Location
Oneida County, NY
I'm a big fan of OP25. I have it running on a Pi 4 with a RTL SDR and it sounds wonderful. I like OP25 because it runs for days and weeks at a time.
 

maus92

Member
Premium Subscriber
Joined
Jun 23, 2004
Messages
4,638
Location
Annapolis
I've run the most common ones: OP25, DSD+FL, Unitrunker 2 (P25P1 only), SDRTrunk. OP25 and SDRTrunk seem to work the best with simulcast. I'm interested if anyone else has run multiple programs and can compare their performance. This is very unscientific, lol - there are many factors that can affect audio quality.
 

GTR8000

NYS Database Guy
Database Admin
Joined
Oct 4, 2007
Messages
9,182
Location
BEE00
SDRTrunk, hands down. The latest 0.5.0 builds yield outstanding P25 audio, including the oft-troublesome simulcasted H-DQPSK/LSM Phase II TDMA systems. I have been super impressed with the resulting audio, it compares favorably with my APX, which is a pretty high bar. Much better than DSD+ Fast Lane, and to my ear better than the vaunted OP25 (and Trunk-Recorder variant that OpenMHz uses). Oh and it runs natively in Java on Windows, so you don't have to muck around with Linux as you would with OP25, if that's not your cup of tea. @DSheirer has done a most excellent job with SDRTrunk, well earned kudos. (y)
 

maus92

Member
Premium Subscriber
Joined
Jun 23, 2004
Messages
4,638
Location
Annapolis
I agree that the P25 audio using SDRTrunk is superior to DSD+FL. I need to find a P25P2 voice solution that runs on Windows since my go-to logging application UT2 does not and probably will not decode Phase 2 audio. I hope to run them concurrently on the same machine. DSD+FL is also a bit clunky with its logging, and the decoded audio is not as pristine as I would like.
 
Last edited:

GTR8000

NYS Database Guy
Database Admin
Joined
Oct 4, 2007
Messages
9,182
Location
BEE00
SDRTrunk is unmatched for P25P2 audio running natively on Windows, and the only alternative to DSD+FL as far as I'm aware (without having to install a clunky VM to run Linux for OP25). Rick has no plans to add P25P2 audio decoding anytime soon, if not for years yet.

I'm running SDRTrunk decoding 4 P25 sites (3 TDMA + 1 FDMA), with Trunking Recorder importing all of the audio for the built-in web interface, with Unitrunker 2.1 signal decoding all 4 of those sites. This is all running on a 2012 era i7 3770S with 16 GB of RAM. Total CPU usage rarely gets above 30% even with 12+ traffic channels concurrently decoding in SDRTrunk. Java is a little RAM hungry, and that can balloon to 3+ GB used, but so far it hasn't been much of an issue. I restart SDRTrunk every couple of days to keep things running smoothly.
 

mwjones

Member
Premium Subscriber
Joined
Apr 9, 2003
Messages
152
Location
Frisco, TX
I have been running DSD+ FL and SDRTrunk 5a3 in parallel the last couple of weeks as a new LSM Multicast P25P2 radio system is approaching its go-live date (DSD+ for better logging, SDRTrunk for handling multiple channels at once). I have both set to record in MP3 format.

I've attached an audio recording of the same call from each (sorry but with the system in test most calls are very short). They are both very comparable between the two, although (as somebody who deals with audio all day) DSD+ occasionally is a bit clearer than SDRTrunk.
 

Attachments

maus92

Member
Premium Subscriber
Joined
Jun 23, 2004
Messages
4,638
Location
Annapolis
Interesting - I have exactly the opposite experience: SDRTrunk has clearer / more stable / less warbly audio decoding than DSD+FL monitoring a statewide ASTRO 25 TDMA simulcast system - nearest tower site < 1 mile distant, other sites > 4 miles distant. Perhaps it is because you are monitoring a multicast site? To be clear, the DSD audio is not unacceptable, I just find the SDRTrunk audio to be better in terms of DAQ. As for logging i find Unitrunker 2.1.x to be superior to anything else: the views are logical and easy to use. DSD logs are more like DOS text files and are less organized IMO.
 

air-scan

Member
Premium Subscriber
Joined
Oct 6, 2019
Messages
305
Location
Oklahoma City, OK
I also enjoy SDRTrunk 0.5.0alpha3 for P25 PI&PII TDMA. High quality control channel decodes and JMBE sounds excellent. It is my 'goto' P25 decoder daily. Sorry but DSD+FL just doesn't cut it for me. Unitrunker has become irrelevant for city wide police and fire activity because Oklahoma City has moved away from EDACS Provoice over to P25 PII TDMA.

I also use the system wide B&O Audio 10 band equalizer to further improve voice frequency response. I appreciate HP for including that.
 
Last edited:

boatbod

Member
Joined
Mar 3, 2007
Messages
2,361
Location
Talbot Co, MD
How do people rate the various SDR software packages in terms of audio performance on P25 simulcast systems. I'm curious because I was surprised by the excellent performance of SDRTrunk when following a decoding a local P25P2 system.
SDRTrunk has good audio, is cross platform, and has a nice GUI, but it is a bit of a resource hog so best to run it on a decent spec machine.
OP25 turns in respectable single-dongle performance on low end hardware like the RPi3 and RPi4. If you give it a little more cpu to play with it's near indistinguishable from a subscriber radio or Unication G5 in terms of audio reproduction.
 

maus92

Member
Premium Subscriber
Joined
Jun 23, 2004
Messages
4,638
Location
Annapolis
If OP25 had logging / channel activity display with the sophistication of Unitrunker 2, it would be a no brainer - I would dedicate a Linux box to it. But I need the logging, not just the audio. Audio archiving would be a nice addition, but not necessary for me. I run OP25 on my local Smartzone system (as you know) for LAN audio, which works acceptably, except for SmartNet squelch issue which is still unresolved.

I hope to run a test setup with SDRTrunk and Unitrunker 2 sometime this week with a modern i5-8xxx box. I'll be watching the CPU loading.
 
Last edited:

KA1RBI

Member
Joined
Aug 15, 2008
Messages
533
Location
Portage Escarpment
Two separate vocoders have been contributed to OP25 over time; and to my ear distinct differences between the two can be detected. For example a few users nearby have complained about a certain dispatcher sounding loud and distorted, a problem which cleared up by switching to the alt vocoder.

The ability to switch to the alt one doesn't apply in all cases. It only works for FDMA, not for TDMA (P2). Also it works only in rx.py, not in multi_rx (looks like the code is present but ignored in multi_rx). Arguably it should be (yet another) command line option, but currently to invoke the alt vocoder the following line in rx.py must be commented-out as shown here:

Code:
# os.environ['IMBE'] = 'soft'
Max
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,361
Location
Talbot Co, MD
Two separate vocoders have been contributed to OP25 over time; and to my ear distinct differences between the two can be detected. For example a few users nearby have complained about a certain dispatcher sounding loud and distorted, a problem which cleared up by switching to the alt vocoder.

The ability to switch to the alt one doesn't apply in all cases. It only works for FDMA, not for TDMA (P2). Also it works only in rx.py, not in multi_rx (looks like the code is present but ignored in multi_rx). Arguably it should be (yet another) command line option, but currently to invoke the alt vocoder the following line in rx.py must be commented-out as shown here:

Code:
# os.environ['IMBE'] = 'soft'
Max
I've not given much thought or effort to maintaining the ability to run the 'alternate' vocoder in multi_rx since the regular one works fine for 99.99% of people and it has a much cleaner code-path than the alternate implementation. That said, I would imagine it would be feasible to add tdma support to the alternate by reusing the trans-coding capability of the ambe.c/ambe.h module, much as is done now to get phase 2 codewords into the software decoder using the decode_tap() entry point.
 

maus92

Member
Premium Subscriber
Joined
Jun 23, 2004
Messages
4,638
Location
Annapolis
SDRTrunk is unmatched for P25P2 audio running natively on Windows, and the only alternative to DSD+FL as far as I'm aware (without having to install a clunky VM to run Linux for OP25). Rick has no plans to add P25P2 audio decoding anytime soon, if not for years yet.

I'm running SDRTrunk decoding 4 P25 sites (3 TDMA + 1 FDMA), with Trunking Recorder importing all of the audio for the built-in web interface, with Unitrunker 2.1 signal decoding all 4 of those sites. This is all running on a 2012 era i7 3770S with 16 GB of RAM. Total CPU usage rarely gets above 30% even with 12+ traffic channels concurrently decoding in SDRTrunk. Java is a little RAM hungry, and that can balloon to 3+ GB used, but so far it hasn't been much of an issue. I restart SDRTrunk every couple of days to keep things running smoothly.
Any tips on how to keep UT2 or SDRTrunk from grabbing all SDR dongles? Is there a way to allocate individual SDRs to a specific program?
 

GTR8000

NYS Database Guy
Database Admin
Joined
Oct 4, 2007
Messages
9,182
Location
BEE00
Any tips on how to keep UT2 or SDRTrunk from grabbing all SDR dongles? Is there a way to allocate individual SDRs to a specific program?
Unitrunker does not capture dongles unless they are actively running in the software. The same is not true with SDRTrunk, which will lock up every inactive dongle it finds when you start the software.

There is no way to allocate dongles to a specific program. The only workaround is to start Unitrunker first, run any dongles you want to use with that software, then start SDRTrunk and let it capture the remaining dongles.

Also note that once SDRTrunk is running, there is no way to either release a captured dongle or add additional dongles. Whatever the software found and captured when it first started up is what you get, until you repeat the process.
 

maus92

Member
Premium Subscriber
Joined
Jun 23, 2004
Messages
4,638
Location
Annapolis
Unitrunker does not capture dongles unless they are actively running in the software. The same is not true with SDRTrunk, which will lock up every inactive dongle it finds when you start the software.

There is no way to allocate dongles to a specific program. The only workaround is to start Unitrunker first, run any dongles you want to use with that software, then start SDRTrunk and let it capture the remaining dongles.

Also note that once SDRTrunk is running, there is no way to either release a captured dongle or add additional dongles. Whatever the software found and captured when it first started up is what you get, until you repeat the process.
My installed version of UT2.1 (I think I'm one version behind) will start any SDR it finds in its previous state. I'll try shutting down the SDRs before I quit the program. I don't want to delete the radios if I don't have to.
 

GTR8000

NYS Database Guy
Database Admin
Joined
Oct 4, 2007
Messages
9,182
Location
BEE00
My installed version of UT2.1 (I think I'm one version behind) will start any SDR it finds in its previous state. I'll try shutting down the SDRs before I quit the program. I don't want to delete the radios if I don't have to.
Right, any receivers you leave running before shutting down Unitrunker will start back up again. That is different than the software inherently capturing them upon startup as SDRTrunk does; you are causing the condition, not the software. Either stop the receivers before shutting down Unitrunker, or just stop them once the software is running and before starting SDRTrunk.

The bottom line is that SDRTrunk will grab any and every available dongle it finds when you start it up, so make sure that any receivers you DON'T want SDRTrunk to find are already running in Unitrunker before starting SDRTrunk.
 
Top