OP25 OP 25 multi_rx.py help

scottabing

Member
Premium Subscriber
Joined
May 15, 2020
Messages
15
Location
cedar rapids, ia
I've been very happy with OP25 and have it setup and running on a couple pi4's and an on old thin client running ubuntu 18.04.
I have Nooelec NESDR SMArt v4 SDR devices but I've never used multi.

My goal is to originate 2 customized streams from one P25 phase II simulcast w/audio & metadata feeding to 2 different icecast mount points in the most efficient way possible.

Right now I'm monitoring a P25 phase II simulcast and originating 2 customized streams by running one instance on each pi4 with different white/blacklists. I followed the README-rpi3-liquidsoap methods and everything has worked great, rock solid.

Is multi now the correct approach for what I'm attempting to do to reduce this to one PC running OP25?

My understanding is that I load a cfg.json with multi_rx.py and that cfg contains arguments similar to how I had everything setup in op25.sh, op25.liq & meta.json

I see the example cfg.json but I'm not completely wrapping my head around it.
Looking at p25_example.json gets me a little closer but Is there anything I can reference as I make changes?

I get that this is really smart and I'm a dumb user.
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,695
Location
Talbot Co, MD
multi_rx.py allows you to run an arbitrary number of receivers configured to an arbitrary number of streams. There's lots of ways to slice and dice depending what hardware you have available, but if you're using low-bandwidth RTL devices you generally need one per stream.

Three-RTL, two-system with three-stream example.
Code:
{
    "channels": [
        {
            "name": "TalbotFire", 
            "device": "sdr0",
            "trunking_sysname": "FiRST Talbot",
            "demod_type": "cqpsk", 
            "destination": "udp://127.0.0.1:23456", 
            "meta_stream_name": "stream0",
            "excess_bw": 0.2, 
            "filter_type": "rc", 
            "frequency": 773843750, 
            "if_rate": 24000, 
            "plot": "",
            "symbol_rate": 4800,
            "enable_analog": "off",
            "blacklist": "",
            "whitelist": "talbot-fire.wlist"
        },
        {
            "name": "TalbotLEO",
            "device": "sdr1",
            "trunking_sysname": "FiRST Talbot",
            "demod_type": "cqpsk", 
            "destination": "udp://127.0.0.1:23466",
            "meta_stream_name": "stream1",
            "excess_bw": 0.2, 
            "filter_type": "rc", 
            "frequency": 773843750,
            "if_rate": 24000,
            "plot": "",
            "symbol_rate": 4800,
            "enable_analog": "off",
            "blacklist": "",
            "whitelist": "talbot-leo.wlist"
        },
        {
            "name": "DorchFire", 
            "device": "sdr2",
            "trunking_sysname": "FiRST Dorchester",
            "demod_type": "cqpsk", 
            "destination": "udp://127.0.0.1:23476", 
            "meta_stream_name": "stream2",
            "excess_bw": 0.2, 
            "filter_type": "rc", 
            "frequency": 774193750, 
            "if_rate": 24000, 
            "plot": "",
            "symbol_rate": 4800,
            "enable_analog": "off",
            "blacklist": "",
            "whitelist": "dorc-fire.wlist"
        }
    ], 
    "devices": [
        {
            "args": "rtl=0", 
            "frequency": 773843750, 
            "gains": "LNA:36", 
            "name": "sdr0", 
            "offset": 0, 
            "ppm": 0.0, 
            "rate": 1000000, 
            "tunable": true
        },
        {
            "args": "rtl=1", 
            "frequency": 773843750, 
            "gains": "LNA:36", 
            "name": "sdr1", 
            "offset": 0, 
            "ppm": 0.0, 
            "rate": 1000000, 
            "tunable": true
        },
        {
            "args": "rtl=2", 
            "frequency": 773843750, 
            "gains": "LNA:47", 
            "name": "sdr2", 
            "offset": 0, 
            "ppm": -1.75, 
            "rate": 1000000, 
            "tunable": true
        }
    ],
    "trunking": {
        "module": "tk_p25.py",
        "chans": [
            {
                "nac": "0x4a6",
                "sysname": "FiRST Talbot",
                "control_channel_list": "773.84375",
                "whitelist": "",
                "tgid_tags_file": "first.tsv",
                "crypt_behavior": 2
            },
            {
                "nac": "0x4a5",
                "sysname": "FiRST Dorchester",
                "control_channel_list": "774.19375",
                "whitelist": "",
                "tgid_tags_file": "first.tsv",
                "crypt_behavior": 2
            }
        ]
    },
    "metadata": {
        "module": "icemeta.py",
        "streams": [
            {
                "stream_name": "stream0",
                "icecastServerAddress": "audio3.broadcastify.com:80",
                "icecastMountpoint": "xxxxxxxx",
                "icecastMountExt": ".xspf",
                "icecastPass": "yyyyyyy",
                "delay": 0.0
            },
            {
                "stream_name": "stream1",
                "icecastServerAddress": "audio9.broadcastify.com:80",
                "icecastMountpoint": "aaaaaaaa",
                "icecastMountExt": ".xspf",
                "icecastPass": "bbbbbb",
                "delay": 0.0
            },
            {
                "stream_name": "stream2",
                "icecastServerAddress": "audio1.broadcastify.com:80",
                "icecastMountpoint": "cccccccccc",
                "icecastMountExt": ".xspf",
                "icecastPass": "dddddddd",
                "delay": 0.0
            }
        ]
    },
    "audio": {
        "module": "sockaudio.py",
        "instances": [
            {
                "instance_name": "",
                "device_name": "pulse",
                "udp_port": 23456,
                "audio_gain": 1.0,
                "number_channels": 1
            }
        ]
    },
    "terminal": {
        "module": "terminal.py",
        "terminal_type": "http:192.168.1.7:8081",
        "curses_plot_interval": 0.1,
        "http_plot_interval": 1.0,
        "http_plot_directory": "../www/images"
    }
}
 

nick0909

Antenna flicker
Feed Provider
Joined
Jan 4, 2003
Messages
110
If I understand OPs question correctly (and I'm hoping to do the same thing), it can run a single system, single RTL dongle, and output multiple audio streams? For instance, one city system, output a Fire Dept stream and Police stream using only one SDR?
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,695
Location
Talbot Co, MD
If I understand OPs question correctly (and I'm hoping to do the same thing), it can run a single system, single RTL dongle, and output multiple audio streams? For instance, one city system, output a Fire Dept stream and Police stream using only one SDR?
Maybe, but in all likelihood not.
Let me attempt to explain...

In order to run multiple streams op25 multi_rx.py expects you need to define one voice channel per stream.
While it is perfectly possible to define multiple voice channels to utilize a single hardware sdr device, there is a limitation that the device has to be parked on a specific center specific frequency and the configuration parameter "tunable" is set to false. (If multiple channels attempted to retune the sdr hardware things would get messy). This sort of usage is primarily intended for tracking systems which fit within the maximum bandwidth of the sdr device. e.g. An Airspy Mini with either 3Mhz or 6Mhz coverage.
For inexpensive RTL hardware with limited bandwidth (e.g. <=2.4Mhz), a better option is to dedicate an individual sdr device to each voice channel and set the "tunable" parameter to true.

Hope that helps :)
 

marklt1

Member
Feed Provider
Joined
Mar 5, 2005
Messages
49
Location
Streetsboro, OH
Is there anything special needed in the configuration to listen to P25 Phase II audio with multi_rx.py? I have a good signal and the constellations are tight. I was able to with rx_py with any issues. Phase I stations come in perfect.

1604761860276.png
1604761902694.png
1604761952588.png
1604761994999.png

I get a lot of these errors in the debug log highlighted in RED:

11/07/20 10:16:10.929148 [trunking_0] added talkgroup 283 from p25whitelist.tsv
Enabled trunking module: tk_p25.py
device: {u'gains': u'LNA:37', u'args': u'rtl=0', u'tunable': True, u'rate': 2560000, u'frequency': 850000000, u'ppm': -0.194, u'offset': 0, u'name': u'device_0'}
[R82XX] PLL not locked!
channel (dev device_0): {u'plot': u'', u'nbfm_deviation': 4000, u'nbfm_squelch': -60, u'demod_type': u'cqpsk', u'symbol_rate': 4800, u'destination': u'udp://10.1.1.3:23192', u'excess_bw': 0.2, u'trunking_sysname': u'trunking_0', u'filter_type': u'rc', u'meta_stream_name': u'metastream_0', u'frequency': 850000000, u'device': u'', u'raw_seek': 0, u'raw_output': u'', u'if_rate': 24000, u'raw_input': u'', u'enable_analog': u'off', u'name': u'Parma PD Parma Tower - Parma Simulcast (Parma / Medina County / Ottawa County)'}
Using two-stage decimator for speed=2560000, decim=20/4 if1=128000 if2=32000
op25_audio::eek:pen_socket(): enabled udp host(10.1.1.3), wireshark(23192), audio(23192)
11/07/20 10:16:11.148669 [0] rx_sync::sync_reset:
11/07/20 10:16:11.148810 [0] mute channel(1)
11/07/20 10:16:11.149238 [0] Initializing P25 receiver: Parma PD Parma Tower - Parma Simulcast (Parma / Medina County / Ottawa County)
11/07/20 10:16:11.149401 [0] metadata updates not enabled
11/07/20 10:16:11.149482 [0] tuning to control channel
11/07/20 10:16:11.199070 [0] Tuning to frequency 851.462500
11/07/20 10:16:11.199211 [0] rx_sync::sync_reset:
Allocating 15 zero-copy buffers
11/07/20 10:16:11.842140 [0] rx_sync::sync_established: protocol P25P1
11/07/20 10:16:11.891559 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/07/20 10:16:11.891612 [0] rx_sync::sync_reset:
11/07/20 10:16:11.939077 [0] rx_sync::sync_established: protocol P25P1
11/07/20 10:16:11.948866 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/07/20 10:16:11.948918 [0] rx_sync::sync_reset:
11/07/20 10:16:11.994592 [0] rx_sync::sync_established: protocol P25P1
11/07/20 10:16:12.042667 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/07/20 10:16:12.042774 [0] rx_sync::sync_reset:



Below is my json file:

{
"channels": [
{
"device": "",
"meta_stream_name": "metastream_0",
"trunking_sysname": "trunking_0",
"demod_type": "cqpsk",
"destination": "udp://10.1.1.3:23192",
"excess_bw": 0.2,
"filter_type": "rc",
"frequency": 850000000,
"if_rate": 24000,
"name": "Parma PD Parma Tower - Parma Simulcast (Parma / Medina County / Ottawa County)",
"plot": "",
"symbol_rate": 4800,
"raw_output": "",
"raw_input": "",
"raw_seek": 0,
"enable_analog": "off",
"nbfm_deviation": 4000,
"nbfm_squelch": -60
}
],
"devices": [
{
"args": "rtl=0",
"frequency": 850000000,
"gains": "LNA:25",
"name": "device_0",
"offset": 0,
"ppm": -0.194,
"rate": 2560000,
"tunable": true
}
],
"trunking": {
"module": "tk_p25.py",
"chans": [
{
"nac": "0x018",
"sysname": "trunking_0",
"control_channel_list": "851.4625,852.4,853.875,853.9375",
"whitelist": "p25whitelist.tsv",
"blacklist": "trs_5133_encrypted_bl.tsv",
"tgid_tags_file": "trs_5133.tsv",
"crypt_behavior": 1
}
]
},
"audio": {
"module": "sockaudio.py",
"instances": [
{
"instance_name": "audio0",
"device_name": "default",
"udp_port": 23192,
"audio_gain": 4.0,
"number_channels": 1
}
]
},
"terminal": {
"module": "terminal.py",
"terminal_type": "http:0.0.0.0:8080",
"curses_plot_interval": 0.2,
"http_plot_interval": 1.0,
"http_plot_directory": "../www/images"
}
}
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,695
Location
Talbot Co, MD
There's nothing specifically required to enable TDMA decode in multi_rx.py, unlike the "-2" command line parameter needed in rx.py. That said, your signal is a little off-tune based on the datascope plot being displaced downward. You might try tweaking the ppm setting interactively in the terminal until you have the datascope converging at levels +3, +1, -1, -3. Right now it's close to +2.5, +0.5, -1.5, -3.5

The "resync" warnings can largely be ignored if the audio is clean. They are a symptom frame check sequence either failing validation or simply slipping due to timing recovery disturbance. See if it improves when you've tweaked the ppm to fix the datascope plot position.
 

marklt1

Member
Feed Provider
Joined
Mar 5, 2005
Messages
49
Location
Streetsboro, OH
I've tweaked the ppm setting like you suggested although I am still just getting repeated rows of this on my log file which is set to level 15.
11/07/20 22:58:07.818340 [0] rx_sync::sync_established: protocol P25P1
11/07/20 22:58:07.867210 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/07/20 22:58:07.867501 [0] rx_sync::sync_reset:
11/07/20 22:58:07.916485 [0] rx_sync::sync_established: protocol P25P1
11/07/20 22:58:07.922052 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/07/20 22:58:07.922112 [0] rx_sync::sync_reset:

I never see any tsbks.
Since this is a Phase II site, I do not see anything referring to P25P2 in the logs, just P25P1.
I used to listen cleanly to these sites with rx.py


1604808165554.png
 

maus92

Member
Premium Subscriber
Joined
Jun 23, 2004
Messages
5,399
Location
Annapolis
Rate seems high for an RTL device; adjust the ppm until you start seeing the tsbks. What shows in your mixer plot?
 

KA1RBI

Member
Joined
Aug 15, 2008
Messages
590
Location
Portage Escarpment
They are a symptom frame check sequence either failing validation or simply slipping due to timing recovery disturbance.
This explanation doesn't explain the symptom satisfactorily. The OP reported getting a lot of the resync messages - the thing that I find right suspicious is that all of the resync messages have the same count (147). This suggests that whatever it is is fully deterministic. Further their frequent occurrence would tend to rule out the "timing recovery slipping" theory.

If this were me I'd be looking for a symbol capture to find out what is so problematic near symbol 147 of each frame.

The "resync" warnings can largely be ignored if the audio is clean.
True enough, but simply a platitude, and not applicable here. The error messages ought to be sufficient to warrant further investigation...

Max
 

KA1RBI

Member
Joined
Aug 15, 2008
Messages
590
Location
Portage Escarpment
11/07/20 10:16:11.842140 [0] rx_sync::sync_established: protocol P25P1
11/07/20 10:16:11.891559 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/07/20 10:16:11.891612 [0] rx_sync::sync_reset:
could I have you examine a one-second section of the error log file and note how many of the "resync at" message occur in that 1-second span; then do the same for a different one-second period. I'd just like to get a feeling for the number of errors per second, and how consistent that number is through time...

Max
 

marklt1

Member
Feed Provider
Joined
Mar 5, 2005
Messages
49
Location
Streetsboro, OH
I can adjust the ppm all the way across the scale, and I will not see even one tsbk show up.
I suspect that is cannot properly decode the control channel properly for Phase II.
If I revert back to rx.py, it works fine.

This is with graph running multi_rx.px
1604841663963.png



Below is the level 15 log running with rx.py, which works fine.
I just cannot seem to successfully duplicate the Phase II environment with multi_rx.py. Phase I works fine with multi_rx.py as I have a dozen units running it with Raspberry Pi3B and RTL_SDR dongles (NooElec).

I did read where the original multi_rx.py in 2017 didn't support P25 Phase II, although I wouldn't think that still stands true today.


11/08/20 08:35:01.846489 set control channel=851.462500
11/08/20 08:35:01.847090 set_frequency(851462500)
metadata update not enabled
Allocating 15 zero-copy buffers
11/08/20 08:35:02.898153 [0] p25p1_fdma::check_timeout: expired
11/08/20 08:35:02.898852 process_data_unit timeout
11/08/20 08:35:02.899152 control channel timeout
11/08/20 08:35:02.899725 do_metadata state=1: [None] None
11/08/20 08:35:02.900134 set_frequency(851462500)
11/08/20 08:35:03.191584 [0] NAC 0x018 TSBK: op=38 : b8 00 04 0c 0c 00 0c 0c 00 01 80 8c
11/08/20 08:35:03.191893 nac 18 type 7 state 1 len 10
11/08/20 08:35:03.192267 TSBK: 0x38 0xb800040c0c000c0c00010000
11/08/20 08:35:03.239570 [0] NAC 0x018 TSBK: op=39 : b9 00 01 01 00 df 04 01 cb 04 49 1c
11/08/20 08:35:03.239818 nac 18 type 7 state 1 len 10
11/08/20 08:35:03.240160 TSBK: 0x39 0xb900010100df0401cb040000
11/08/20 08:35:03.240329 tsbk39 secondary cc: rfid 1 stid 1 ch1 df(ID-0xdf) ch2 1cb(ID-0x1cb)
11/08/20 08:35:03.553998 [0] NAC 0x018 TSBK: op=38 : b8 00 04 0c 0c 00 0c 0c 00 01 80 8c
11/08/20 08:35:03.554275 nac 18 type 7 state 1 len 10
11/08/20 08:35:03.554644 TSBK: 0x38 0xb800040c0c000c0c00010000
11/08/20 08:35:03.602611 [0] NAC 0x018 TSBK: op=39 : b9 00 01 01 01 cb 04 01 d5 04 a1 9c
11/08/20 08:35:03.602864 nac 18 type 7 state 1 len 10
 

marklt1

Member
Feed Provider
Joined
Mar 5, 2005
Messages
49
Location
Streetsboro, OH
could I have you examine a one-second section of the error log file and note how many of the "resync at" message occur in that 1-second span; then do the same for a different one-second period. I'd just like to get a feeling for the number of errors per second, and how consistent that number is through time...

Max
It's the same pattern going on indefinitely. No other entries other than this repeating pattern at logging level 15.

11/08/20 10:35:30.020007 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/08/20 10:35:30.020092 [0] rx_sync::sync_reset:
11/08/20 10:35:30.065202 [0] rx_sync::sync_established: protocol P25P1
11/08/20 10:35:30.078352 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/08/20 10:35:30.078436 [0] rx_sync::sync_reset:
11/08/20 10:35:30.124762 [0] rx_sync::sync_established: protocol P25P1
11/08/20 10:35:30.170538 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/08/20 10:35:30.170620 [0] rx_sync::sync_reset:
11/08/20 10:35:30.215998 [0] rx_sync::sync_established: protocol P25P1
11/08/20 10:35:30.225273 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/08/20 10:35:30.225360 [0] rx_sync::sync_reset:
11/08/20 10:35:30.272581 [0] rx_sync::sync_established: protocol P25P1
11/08/20 10:35:30.321366 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/08/20 10:35:30.321460 [0] rx_sync::sync_reset:
11/08/20 10:35:30.371450 [0] rx_sync::sync_established: protocol P25P1
11/08/20 10:35:30.389828 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/08/20 10:35:30.389922 [0] rx_sync::sync_reset:
11/08/20 10:35:30.426860 [0] rx_sync::sync_established: protocol P25P1
11/08/20 10:35:30.472421 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/08/20 10:35:30.472489 [0] rx_sync::sync_reset:
11/08/20 10:35:30.519786 [0] rx_sync::sync_established: protocol P25P1
11/08/20 10:35:30.527392 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/08/20 10:35:30.527469 [0] rx_sync::sync_reset:
11/08/20 10:35:30.577406 [0] rx_sync::sync_established: protocol P25P1
11/08/20 10:35:30.624585 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/08/20 10:35:30.624647 [0] rx_sync::sync_reset:
11/08/20 10:35:30.632017 [0] rx_sync::sync_established: protocol P25P1
11/08/20 10:35:30.680413 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/08/20 10:35:30.680483 [0] rx_sync::sync_reset:
11/08/20 10:35:30.728835 [0] rx_sync::sync_established: protocol P25P1
11/08/20 10:35:30.777148 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/08/20 10:35:30.777221 [0] rx_sync::sync_reset:
11/08/20 10:35:30.784579 [0] rx_sync::sync_established: protocol P25P1
11/08/20 10:35:30.833128 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/08/20 10:35:30.833199 [0] rx_sync::sync_reset:
11/08/20 10:35:30.882244 [0] rx_sync::sync_established: protocol P25P1
11/08/20 10:35:30.929764 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/08/20 10:35:30.929841 [0] rx_sync::sync_reset:
11/08/20 10:35:30.936870 [0] rx_sync::sync_established: protocol P25P1
11/08/20 10:35:30.986488 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/08/20 10:35:30.986558 [0] rx_sync::sync_reset:
 

maus92

Member
Premium Subscriber
Joined
Jun 23, 2004
Messages
5,399
Location
Annapolis
IDK, I'm running a single device on a Phase 2 system this morning; decodes look good. I haven't configured the audio yet however.Screenshot_2020-11-08_12-32-41.png
 

maus92

Member
Premium Subscriber
Joined
Jun 23, 2004
Messages
5,399
Location
Annapolis
Code:
{
    "channels": [
        {
            "name": "FiRST - AACo Simulcast",          
            "device": "sdr0",
            "meta_stream_name": "metastream_0",
            "trunking_sysname": "FiRST Anne Arundel",
            "demod_type": "cqpsk",
            "destination": "udp://127.0.0.1:56120",
            "excess_bw": 0.2,
            "filter_type": "rc",
            "frequency": 773831250,
            "if_rate": 24000,
            "plot": "",
            "symbol_rate": 4800,
            "raw_output": "",
            "raw_input": "",
            "raw_seek": 0,
            "enable_analog": "off",
            "nbfm_deviation": 4000,
            "nbfm_squelch": -60
        }  
    ],
    "devices": [
        {
            "args": "rtl=0",
            "frequency": 773831250,
            "gains": "lna:39",
            "gain_mode": false,
            "name": "sdr0",
            "offset": 0,
            "ppm": -0.125,
            "rate": 1000000,
            "tunable": true
        }
    ],
    "trunking": {
        "module": "tk_p25.py",
        "chans": [
            {
                "nac": "0x4a2",
                "sysname": "FiRST Anne Arundel",
                "control_channel_list": "773.83125",
                "tgid_tags_file": "first.tsv",
                "crypt_behavior": 2
            }
        ]
    },
    "audio": {
        "module": "sockaudio.py",
        "instances": [
            {
                "instance_name": "audio0",
                "device_name": "default",
                "udp_port": 23456,
                "audio_gain": 1.0,
                "number_channels": 1
            }
        ]
    },
    "terminal": {
        "module": "terminal.py",
        "terminal_type": "http:127.0.0.1:8080",
        "curses_plot_interval": 0.2,
        "http_plot_interval": 1.0,
        "http_plot_directory": "../www/images"
    }
}
 

maus92

Member
Premium Subscriber
Joined
Jun 23, 2004
Messages
5,399
Location
Annapolis
Re: the above post - I have not configured the voice channel / audio yet, just the control channel. The SDR is a Nooelec.

I'm curious about the accuracy of the site NAC for the Parma site.


A little bit of the stderr:

Enabled trunking module: tk_p25.py
device: {u'gain_mode': False, u'gains': u'lna:39', u'args': u'rtl=0', u'ppm': -0.125, u'rate': 1000000, u'frequency': 773831250, u'tunable': True, u'offset': 0, u'name': u'sdr0'}
gr-osmosdr 0.1.4 (0.1.4) gnuradio 3.7.11
built-in source types: file osmosdr fcd rtl rtl_tcp uhd miri hackrf bladerf rfspace airspy airspyhf soapy redpitaya freesrp
Using device #0 Realtek RTL2838UHIDIR SN: 00000009
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
gr-osmosdr driver gain_mode: False
Exact sample rate is: 1000000.026491 Hz
[R82XX] PLL not locked!
channel (dev sdr0): {u'plot': u'', u'nbfm_deviation': 4000, u'nbfm_squelch': -60, u'demod_type': u'cqpsk', u'symbol_rate': 4800, u'destination': u'udp://127.0.0.1:56120', u'excess_bw': 0.2, u'trunking_sysname': u'FiRST Anne Arundel', u'filter_type': u'rc', u'meta_stream_name': u'stream_0', u'frequency': 773831250, u'device': u'sdr0', u'raw_seek': 0, u'raw_output': u'', u'if_rate': 24000, u'raw_input': u'', u'enable_analog': u'off', u'name': u'FiRST - AACo Simulcast'}
Using two-stage decimator for speed=1000000, decim=10/4 if1=100000 if2=25000
op25_audio::eek:pen_socket(): enabled udp host(127.0.0.1), wireshark(56120), audio(56120)
11/08/20 13:11:36.735063 [0] rx_sync::sync_reset:
11/08/20 13:11:36.735144 [0] mute channel(0)
11/08/20 13:11:36.735206 [0] mute channel(1)
11/08/20 13:11:36.735422 [0] Initializing P25 receiver: FiRST - AACo Simulcast
11/08/20 13:11:36.735510 [0] metadata stream: stream_0
11/08/20 13:11:36.735562 [0] tuning to control channel
11/08/20 13:11:37.285530 [0] rx_sync::sync_established: protocol P25P1
11/08/20 13:11:37.414295 [0] NAC 0x4a2 TSBK: op=02 : 02 00 36 84 1f 3f 36 85 37 7c c3 0e
11/08/20 13:11:37.414519 [0] NAC 0x4a2 TSBK: op=16 : 16 00 00 40 ff ff ff ff 00 01 5f cb
11/08/20 13:11:37.414564 [0] NAC 0x4a2 TSBK: op=05 : 85 90 40 80 c0 00 00 00 00 00 d6 ee
 
Last edited:

boatbod

Member
Joined
Mar 3, 2007
Messages
2,695
Location
Talbot Co, MD
OK thanks. Looks like Graham may have some debugging to do ;-)

Max
Lol, you're funny Max ;)
Certainly something is causing the OP's system not to work and I'm happy to look into it, but there is that inescapable little detail that multi_rx,py works just fine on many different phase 2 system. Whatever the problem is, it's something specific to this particular setup.
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,695
Location
Talbot Co, MD
I've tweaked the ppm setting like you suggested although I am still just getting repeated rows of this on my log file which is set to level 15.
11/07/20 22:58:07.818340 [0] rx_sync::sync_established: protocol P25P1
11/07/20 22:58:07.867210 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/07/20 22:58:07.867501 [0] rx_sync::sync_reset:
11/07/20 22:58:07.916485 [0] rx_sync::sync_established: protocol P25P1
11/07/20 22:58:07.922052 [0] resync at count 147 for protocol P25P1 (expected count 24)
11/07/20 22:58:07.922112 [0] rx_sync::sync_reset:

I never see any tsbks.
Since this is a Phase II site, I do not see anything referring to P25P2 in the logs, just P25P1.
I used to listen cleanly to these sites with rx.py


View attachment 93798
markit1, please can you PM me the complete stderr.2 log and cfg.json file. Thanks!
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,695
Location
Talbot Co, MD
How about the parma site not being cqpsk?
OP says he can receive the same site fine with rx.py, so unless his rx.py is running "-D fsk4" on the command line, I tend to think it should work ok on multi_rx.py. The sample rate is rather high though, as you rightly pointed out. Will know more once I see the full log.
 
Top