SDRTrunk - p25 decoder test release

Status
Not open for further replies.

rjdj2000

Gone Cuckoo
Feed Provider
Joined
Jan 24, 2011
Messages
419
Reaction score
70
Location
Central NY
That sounds great Denny. I have played around with OP25 on a Linux install on my Mac Pro and was able to listen to the Cortland system with only one dongle so will be neat to see this work out using one dongle as well.


Sent from my iPhone using Tapatalk
 

DSheirer

Member
Premium Subscriber
Joined
Feb 15, 2010
Messages
628
Reaction score
175
Location
Fulton, NY
Audio Decoder Progress

A quick update ... I finally have a working version of the imbe audio decoder written in java. The linked file is a partial audio clip from a CNYICC call that was decoded/converted with the library.

https://drive.google.com/open?id=0B7BHsssXUq8eY3RWUmlVbTR2Sjg&authuser=0

I'm currently working on the java AudioSystem components that will allow me to package the imbe decoder separately so that users can download and compile the library and then drop it into their sdrtrunk folder where it will be auto-discovered on startup and allow users to hear decoded p25 audio calls in sdrtrunk without any external programs or audio patching.

Denny
 

hkrharry

Member - RR DB AdminMo/Ks
Database Admin
Joined
Dec 26, 2000
Messages
637
Reaction score
122
Location
In the middle of the USA
HI Danny

This is great news!

HH


A quick update ... I finally have a working version of the imbe audio decoder written in java. The linked file is a partial audio clip from a CNYICC call that was decoded/converted with the library.

https://drive.google.com/open?id=0B7BHsssXUq8eY3RWUmlVbTR2Sjg&authuser=0

I'm currently working on the java AudioSystem components that will allow me to package the imbe decoder separately so that users can download and compile the library and then drop it into their sdrtrunk folder where it will be auto-discovered on startup and allow users to hear decoded p25 audio calls in sdrtrunk without any external programs or audio patching.

Denny
 

mtindor

FMP24 PRO USER
Database Admin
Joined
Dec 5, 2006
Messages
11,994
Reaction score
3,250
Location
Carroll Co OH / EN90LN
A quick update ... I finally have a working version of the imbe audio decoder written in java. The linked file is a partial audio clip from a CNYICC call that was decoded/converted with the library.

https://drive.google.com/open?id=0B7BHsssXUq8eY3RWUmlVbTR2Sjg&authuser=0

I'm currently working on the java AudioSystem components that will allow me to package the imbe decoder separately so that users can download and compile the library and then drop it into their sdrtrunk folder where it will be auto-discovered on startup and allow users to hear decoded p25 audio calls in sdrtrunk without any external programs or audio patching.

Denny

It sounds great, Denny... simulcast to boot :)

Mike
 

vince48

Member
Premium Subscriber
Joined
May 13, 2001
Messages
1,194
Reaction score
172
Location
Central Valley, CA.
Denny
question. How difficult for you to add other SDR's other than HackRF and Airspy? I have a Ettus b200 which has enough bandwidth to handle a large system that both HackRf and Airspy cannot cover.

vincent
 

DSheirer

Member
Premium Subscriber
Joined
Feb 15, 2010
Messages
628
Reaction score
175
Location
Fulton, NY
Denny
question. How difficult for you to add other SDR's other than HackRF and Airspy? I have a Ettus b200 which has enough bandwidth to handle a large system that both HackRf and Airspy cannot cover.

vincent

The coding shouldn't be too difficult ... the hard part is finding time to write and test the drivers. I've got brand new Ettus B100, Airspy, and FC0013 tuners sitting on the shelf waiting for sdrtrunk drivers.

Have you seen Simon's comments about adding UHD (Ettus) drivers to sdr-radio? I haven't looked at the UHD source code yet, but I imagine it will be fun.
 

vince48

Member
Premium Subscriber
Joined
May 13, 2001
Messages
1,194
Reaction score
172
Location
Central Valley, CA.
The coding shouldn't be too difficult ... the hard part is finding time to write and test the drivers. I've got brand new Ettus B100, Airspy, and FC0013 tuners sitting on the shelf waiting for sdrtrunk drivers.

Have you seen Simon's comments about adding UHD (Ettus) drivers to sdr-radio? I haven't looked at the UHD source code yet, but I imagine it will be fun.

Thanks Denny for your quick reply. Yes, I use Simon's SDR Console with my Ettus B200. My hat is off to Simon for his endeavor.
Maybe if you have time you can see what you can do. I'm not sure if the B100 and B200 share the same coding. If not if you want me to send you my B200 to help I will.

Thank you for your consideration. Have a good evening.

Vincent
 

DSheirer

Member
Premium Subscriber
Joined
Feb 15, 2010
Messages
628
Reaction score
175
Location
Fulton, NY
For anyone who is comfortable compiling from source code, I just committed the first version of sdrtrunk with built-in P25 audio decoding using the jmbe library.

You'll have to download and compile the jmbe library and place it on the the java classpath, or place the jmbe library in the same folder as the sdrtrunk program .jar file

https://github.com/DSheirer/jmbe

I haven't done any extensive testing yet, so it will be a little while until I release an updated test build of sdrtrunk for users to try.

Denny
 

jmjumps

Member
Joined
Feb 22, 2015
Messages
4
Reaction score
0
I was able to compile both fine (ant makes that easy). Note (on Windows at least) I had to put the jmbe library in the libs subdirectory in order for it to be loaded. For others' reference, to know if it is loaded look for a line:
12:29:19.877 DEBUG d.p.audio.P25AudioOutput - IMBE audio converter library loaded successfully

I was able to hear little bits of audio, but it was very broken (more silence than audio). I'm not sure what to expect to see in the log file during the call; I see some references to encryption but the audio bits I hear certainly aren't. Also I'm not sure how to decipher the "Error Check" column. I first thought it might be CPU related, but still occurs after setting the fft settings way down.

Screenshot: http://i.imgur.com/tEyOlwU.png
Let me know if there is something else I can provide.
 

jmjumps

Member
Joined
Feb 22, 2015
Messages
4
Reaction score
0
FWIW, I tried the same antenna setup on the same frequency in DSD+ and it works fine (after getting the volume right). Now to figure out if it is the RTL-SDR settings or something with the P25 decoding. It would be interesting to me to try piping audio into sdtrunk, in order to eliminate the differences in RTL-SDR tuner settings.
 

DSheirer

Member
Premium Subscriber
Joined
Feb 15, 2010
Messages
628
Reaction score
175
Location
Fulton, NY
FWIW, I tried the same antenna setup on the same frequency in DSD+ and it works fine (after getting the volume right). Now to figure out if it is the RTL-SDR settings or something with the P25 decoding. It would be interesting to me to try piping audio into sdtrunk, in order to eliminate the differences in RTL-SDR tuner settings.

I've got some more work to do to get the decode rates a bit higher. The decoder is occasionally dropping voice messages causing 9 frames of audio to be lost, making for choppy audio.
 

tylerwatt12

Member
Premium Subscriber
Joined
Feb 24, 2013
Messages
192
Reaction score
5
Location
Cleveland
Thanks for your progress so far. This looks really great. I had a couple questions though

Does this software track multiple channels per dongle, or 1 channel per dongle(multi VFO). I tried using 1 dongle and added multiple channels in a site on a system and only 1 channel lit up saying it had a device to use.

Also, will this decode P25 messages, the ones that say 'Dat' as a service type in unitrunker? I've always wondered what's in those.
 

DSheirer

Member
Premium Subscriber
Joined
Feb 15, 2010
Messages
628
Reaction score
175
Location
Fulton, NY
Does this software track multiple channels per dongle, or 1 channel per dongle(multi VFO). I tried using 1 dongle and added multiple channels in a site on a system and only 1 channel lit up saying it had a device to use.

Yes, sdrtrunk allows you to run multiple channels per dongle, as long as all of the channels fit within the bandwidth (sample rate) of the tuner.

Also, will this decode P25 messages, the ones that say 'Dat' as a service type in unitrunker? I've always wondered what's in those.

It will decode most message types, including confirmed and unconfirmed data messages. For UDP/IP packets, it will show the to/from IP addresses and UDP ports and the hex message payload.
 

slicerwizard

Member
Joined
Sep 19, 2002
Messages
7,799
Reaction score
2,185
Location
Toronto, Ontario
For anyone who is comfortable compiling from source code, I just committed the first version of sdrtrunk with built-in P25 audio decoding using the jmbe library.

You'll have to download and compile the jmbe library and place it on the the java classpath, or place the jmbe library in the same folder as the sdrtrunk program .jar file

https://github.com/DSheirer/jmbe

I haven't done any extensive testing yet, so it will be a little while until I release an updated test build of sdrtrunk for users to try.

Denny
FYI,

Implements Golay(23,11,7) error detection and correction. Returns the
number of detected errors. If the error count is less than or equal to
the max correctable errors (3), then the error bits are corrected.
Otherwise the message is left intact and an error count greater than 3
is returned.


For all possible 23 bit inputs, total possible syndrome patterns: 2^11 (2048)

0 bit error syndrome patterns: 1
1 bit error syndrome patterns: 23
2 bit error syndrome patterns: 253
3 bit error syndrome patterns: 1771
Total: 2048

There are no syndromes for >3

If you run all 8,388,608 input patterns through your Golay23 checkAndCorrect() function, does it ever return values greater than 3? If so, I'd say it's broken and could degrade MBE processing.
 

DSheirer

Member
Premium Subscriber
Joined
Feb 15, 2010
Messages
628
Reaction score
175
Location
Fulton, NY
FYI,

Implements Golay(23,11,7) error detection and correction. Returns the
number of detected errors. If the error count is less than or equal to
the max correctable errors (3), then the error bits are corrected.
Otherwise the message is left intact and an error count greater than 3
is returned.


For all possible 23 bit inputs, total possible syndrome patterns: 2^11 (2048)

0 bit error syndrome patterns: 1
1 bit error syndrome patterns: 23
2 bit error syndrome patterns: 253
3 bit error syndrome patterns: 1771
Total: 2048

There are no syndromes for >3

If you run all 8,388,608 input patterns through your Golay23 checkAndCorrect() function, does it ever return values greater than 3? If so, I'd say it's broken and could degrade MBE processing.

Hi Andy, thanks for the feedback. The method should return a 4 to indicate that greater than the max correctable (3) bit errors were detected ... if you exceed 3 left/right shifts when trying to find the bit error positions, then you've crossed over the middle of the hamming distance (7) boundary and you're into the next code's space, if I understand correctly.

Tonight I added a soft-match mode to the sync pattern matcher that allows up to 2? bit mismatches in the sync pattern when a call is in progress ... that seems to be helping with the missed LDU messages. I was comparing the jmbe synthesizer code against OP25's codec and I found a difference in the way OP25's soft decoder calculates the DCT for the amplitude residuals. I'm going to experiment tomorrow night modifying my DCT code to the way that OP25 is doing it to see if that helps with the audio quality.

Denny
 

slicerwizard

Member
Joined
Sep 19, 2002
Messages
7,799
Reaction score
2,185
Location
Toronto, Ontario
Hi Andy, thanks for the feedback. The method should return a 4 to indicate that greater than the max correctable (3) bit errors were detected ... if you exceed 3 left/right shifts when trying to find the bit error positions, then you've crossed over the middle of the hamming distance (7) boundary and you're into the next code's space, if I understand correctly.
I'm no FEC expert, but I have my doubts about this technique. Can you post a 23 bit codeword that is determined to have more than three bit errors? I assume you can code up a quick test along these lines:

for int=0 to 7FFFFF

convert int to string

errors = checkAndCorrect(string, 0)

if errors > 3, print string, errors


(I don't install Java on my machines, so I can't try it myself)


Tonight I added a soft-match mode to the sync pattern matcher that allows up to 2? bit mismatches in the sync pattern when a call is in progress ... that seems to be helping with the missed LDU messages.
During a voice call, it's pretty much guaranteed that after the last symbol in each LDU1/LDU2 frame, another P25 sync pattern will immediately follow, whether you actually detect it or not. IIRC, the DSD code has some sort of hack in the frame sync code that assumes that the 24 symbols (any pattern) following a frame are sync, and processes the following symbols as NAC/DUID, and so on. So I guess the DSD method could be describes as a soft-match mode in the sync pattern matcher that allows up to 24 bit mismatches in the sync pattern when a call is in progress. :)
 

KD0TAZ

Member
Joined
Dec 26, 2010
Messages
334
Reaction score
16
Location
Kansas
For anyone who is comfortable compiling from source code, I just committed the first version of sdrtrunk with built-in P25 audio decoding using the jmbe library.

You'll have to download and compile the jmbe library and place it on the the java classpath, or place the jmbe library in the same folder as the sdrtrunk program .jar file

https://github.com/DSheirer/jmbe

I haven't done any extensive testing yet, so it will be a little while until I release an updated test build of sdrtrunk for users to try.

Denny

I don't know how to compile so I can't try it yet, but this is f'n AWESOME news! You have officially achieved god status. :D

Can't wait to play with it! Is it coming together with the ability to assign specific dongles to decode only specific TGs on the P25 system and route their audio to separate VAC's for streaming?
 

DSheirer

Member
Premium Subscriber
Joined
Feb 15, 2010
Messages
628
Reaction score
175
Location
Fulton, NY
Is it coming together with the ability to assign specific dongles to decode only specific TGs on the P25 system and route their audio to separate VAC's for streaming?

I'm working on the redesign of the audio output framework this weekend after I fix the audio quality issue with the p25 audio codec. The new audio output system will give you lots of options.
 

DSheirer

Member
Premium Subscriber
Joined
Feb 15, 2010
Messages
628
Reaction score
175
Location
Fulton, NY
I posted the first test build of SDRTrunk with integrated P25 audio decoding to the downloads folder:

https://code.google.com/p/sdrtrunk/

You'll need to download and compile the JMBE library and place the library in the same folder where you unzip your sdrtrunk application. There is an updated description of the APCO25 decoder and how to use the JMBE library at:

https://code.google.com/p/sdrtrunk/wiki/APCO25

If you've previously downloaded and compiled the jmbe library, you'll need to update and build version 0.1.1.

If you have any issues or need any help, please PM me, post a reply here, or post a new message in the sdrtrunk yahoo group.

Denny
 
Status
Not open for further replies.
Top