Hi everyone,
I've been using the boatbod version of OP25's rx.py to listen to Seattle's PSERN with no major issues for some time but wanted to see if I could improve the performance by adding a second SDR and moving up to multi_rx.py. However, I am not hearing any audio and the decode rate has decreased from ~18 tsbks a second to ~5 tsbks a second. Ideally, I think I'd like to use one dongle to monitor the control channel and the other to handle the audio, but I'd appreciate and help or feedback from the forum. Please let me know if I need to provide any additional logs or information not included below. Thank you in advance!
My Setup:

My JSON file:
{
"channels": [
{
"name": "PSERN",
"device": "SDR1",
"demod_type": "cqpsk",
"cqpsk_tracking": true,
"tracking_threshold": 20,
"trunking_sysname": "PSERN",
"tracking_limit": 1800,
"tracking_feedback": 0.85,
"destination": "udp://0.0.0.0:56120",
"excess_bw": 0.2,
"filter_type": "rc",
"frequency": 854287500,
"if_rate": 24000,
"plot": "",
"symbol_rate": 4800,
"enable_analog": "off",
"whitelist": "",
"blacklist": ""
}
],
"devices": [
{
"args": "rtl=001",
"frequency": 854287500,
"gains": "lna:48",
"gain_mode": true,
"name": "SDR1",
"offset": 0,
"ppm": 0.0,
"rate": 1000000,
"usable_bw_pct": 0.85,
"tunable": false
},
{
"args": "rtl=002",
"frequency": 854287500,
"gains": "lna:48",
"gain_mode": true,
"name": "SDR2",
"offset": 0,
"ppm": 0.0,
"rate": 1000000,
"usable_bw_pct": 0.85,
"tunable": false
}
],
"trunking": {
"module": "tk_p25.py",
"chans": [
{
"nac": "0x3a5",
"sysname": "PSERN",
"control_channel_list": "854.2875",
"whitelist": "",
"tgid_tags_file": "psern_full.tsv",
"rid_tags_file": "psern_full.tsv",
"tdma_cc": false,
"crypt_behavior": 2
}
]
},
"metadata": {
"module": "icemeta.py",
"streams": [
{
"stream_name": "stream_0",
"meta_format_idle": "[idle]",
"meta_format_tgid": "[%TGID%]",
"meta_format_tag": "[%TGID%] %TAG%",
"meta_format_rid": "@ [%RID%]",
"meta_format_rtag": "@ [%RID%] %RTAG%",
"icecastServerAddress": "your_stream_host_and_port",
"icecastMountpoint": "your_mountpoint_name",
"icecastPass": "your_password",
"icecastMountExt": ".xspf",
"delay": 0.0
},
{
"stream_name": "stream_1",
"meta_format_idle": "[idle]",
"meta_format_tgid": "[%TGID%]",
"meta_format_tag": "[%TGID%] %TAG%",
"meta_format_rid": " @ [%RID%]",
"meta_format_rtag": " @ [%RID%] %RTAG%",
"icecastServerAddress": "your_second stream_host_and_port",
"icecastMountpoint": "your_second_mountpoint_name",
"icecastPass": "your_second_password",
"icecastMountExt": ".xspf",
"delay": 0.0
}
]
},
"audio": {
"module": "sockaudio.py",
"instances": [
{
"instance_name": "audio0",
"device_name": "default",
"udp_port": 56120,
"audio_gain": 1.0,
"number_channels": 1
}
]
},
"terminal": {
"module": "terminal.py",
"terminal_type": "http:0.0.0.0:56120",
"terminal_timeout": 5.0,
"default_channel": "PSERN",
"curses_plot_interval": 0.1,
"http_plot_interval": 1.0,
"http_plot_directory": "../www/images",
"tuning_step_large": 1200,
"tuning_step_small": 100
}
}
I've been using the boatbod version of OP25's rx.py to listen to Seattle's PSERN with no major issues for some time but wanted to see if I could improve the performance by adding a second SDR and moving up to multi_rx.py. However, I am not hearing any audio and the decode rate has decreased from ~18 tsbks a second to ~5 tsbks a second. Ideally, I think I'd like to use one dongle to monitor the control channel and the other to handle the audio, but I'd appreciate and help or feedback from the forum. Please let me know if I need to provide any additional logs or information not included below. Thank you in advance!
My Setup:
- Raspberry Pi 4 (8GB)
- Debian 11
- (2) RTL-SDR.com V3 dongles

My JSON file:
{
"channels": [
{
"name": "PSERN",
"device": "SDR1",
"demod_type": "cqpsk",
"cqpsk_tracking": true,
"tracking_threshold": 20,
"trunking_sysname": "PSERN",
"tracking_limit": 1800,
"tracking_feedback": 0.85,
"destination": "udp://0.0.0.0:56120",
"excess_bw": 0.2,
"filter_type": "rc",
"frequency": 854287500,
"if_rate": 24000,
"plot": "",
"symbol_rate": 4800,
"enable_analog": "off",
"whitelist": "",
"blacklist": ""
}
],
"devices": [
{
"args": "rtl=001",
"frequency": 854287500,
"gains": "lna:48",
"gain_mode": true,
"name": "SDR1",
"offset": 0,
"ppm": 0.0,
"rate": 1000000,
"usable_bw_pct": 0.85,
"tunable": false
},
{
"args": "rtl=002",
"frequency": 854287500,
"gains": "lna:48",
"gain_mode": true,
"name": "SDR2",
"offset": 0,
"ppm": 0.0,
"rate": 1000000,
"usable_bw_pct": 0.85,
"tunable": false
}
],
"trunking": {
"module": "tk_p25.py",
"chans": [
{
"nac": "0x3a5",
"sysname": "PSERN",
"control_channel_list": "854.2875",
"whitelist": "",
"tgid_tags_file": "psern_full.tsv",
"rid_tags_file": "psern_full.tsv",
"tdma_cc": false,
"crypt_behavior": 2
}
]
},
"metadata": {
"module": "icemeta.py",
"streams": [
{
"stream_name": "stream_0",
"meta_format_idle": "[idle]",
"meta_format_tgid": "[%TGID%]",
"meta_format_tag": "[%TGID%] %TAG%",
"meta_format_rid": "@ [%RID%]",
"meta_format_rtag": "@ [%RID%] %RTAG%",
"icecastServerAddress": "your_stream_host_and_port",
"icecastMountpoint": "your_mountpoint_name",
"icecastPass": "your_password",
"icecastMountExt": ".xspf",
"delay": 0.0
},
{
"stream_name": "stream_1",
"meta_format_idle": "[idle]",
"meta_format_tgid": "[%TGID%]",
"meta_format_tag": "[%TGID%] %TAG%",
"meta_format_rid": " @ [%RID%]",
"meta_format_rtag": " @ [%RID%] %RTAG%",
"icecastServerAddress": "your_second stream_host_and_port",
"icecastMountpoint": "your_second_mountpoint_name",
"icecastPass": "your_second_password",
"icecastMountExt": ".xspf",
"delay": 0.0
}
]
},
"audio": {
"module": "sockaudio.py",
"instances": [
{
"instance_name": "audio0",
"device_name": "default",
"udp_port": 56120,
"audio_gain": 1.0,
"number_channels": 1
}
]
},
"terminal": {
"module": "terminal.py",
"terminal_type": "http:0.0.0.0:56120",
"terminal_timeout": 5.0,
"default_channel": "PSERN",
"curses_plot_interval": 0.1,
"http_plot_interval": 1.0,
"http_plot_directory": "../www/images",
"tuning_step_large": 1200,
"tuning_step_small": 100
}
}