Client keeps crashing on observation of PVCC satellite

Hello all,

I received a PlutoSDR+ from a colleague as a gift and I am trying to set it up as an S-band station. I use the autoscheduler to schedule observations in TEST mode, which seem to work fine, and I get a decent amount of green results.

However, the client seems to crash every time after/during an observation of PVCC (NORAD 58025). This is a wide BPSK signal. All subsequent observations fail. No waterfall, nothing. After a reboot, everything works fine again. The log files says: RuntimeError: firdes check failed: 0 < fa <= sampling_freq / 2

I don’t understand why this is happening or how to solve this problem (if it’s even possible). Any help would be very much welcome. Thanks!

Roel - PD7R.

Station: SatNOGS Network - Ground Station StreetDirt S-band test

Example observation: SatNOGS Network - Observation 9546458

Piece of the log from that observation and the subsequent observations:

May 17 10:28:04 satnogs5 satnogs-client[456]: rig_init: rig does not have rx_range!!
May 17 10:28:04 satnogs5 satnogs-client[456]: network_open: hoststr=127.0.0.1, portstr=4532
May 17 10:28:07 satnogs5 satnogs-client[6724]: [INFO] Opening PlutoSDR #0 ip:pluto.local...
May 17 10:28:08 satnogs5 satnogs-client[6724]: [INFO] Using format CF32.
May 17 10:28:08 satnogs5 satnogs-client[6724]: [INFO] Auto setting Buffer Size: 131072
May 17 10:28:08 satnogs5 satnogs-client[6724]: [INFO] Set MTU Size: 131072
May 17 10:28:08 satnogs5 satnogs-client[6724]: Traceback (most recent call last):
May 17 10:28:08 satnogs5 satnogs-client[6724]:   File "/usr/bin/satnogs_bpsk.py", line 583, in <module>
May 17 10:28:08 satnogs5 satnogs-client[6724]:     main()
May 17 10:28:08 satnogs5 satnogs-client[6724]:   File "/usr/bin/satnogs_bpsk.py", line 566, in main
May 17 10:28:08 satnogs5 satnogs-client[6724]:     tb = top_block_cls(antenna=options.antenna, baudrate=options.baudrate, bb_freq=options.bb_freq, bw=options.bw, dc_removal=options.dc_removal, decoded_data_file_path=options.decoded_data_file_path, dev_args=options.dev_args, doppler_correction_per_sec=options.dopple>
May 17 10:28:08 satnogs5 satnogs-client[6724]:   File "/usr/bin/satnogs_bpsk.py", line 144, in __init__
May 17 10:28:08 satnogs5 satnogs-client[6724]:     self.satnogs_doppler_compensation_0 = satnogs.doppler_compensation(samp_rate_rx, rx_freq, lo_offset, baudrate*decimation, 1, 0)
May 17 10:28:08 satnogs5 satnogs-client[6724]:   File "/usr/lib/python3/dist-packages/satnogs/doppler_compensation.py", line 113, in __init__
May 17 10:28:08 satnogs5 satnogs-client[6724]:     firdes.low_pass(1,
May 17 10:28:08 satnogs5 satnogs-client[6724]:   File "/usr/lib/python3/dist-packages/gnuradio/filter/filter_swig.py", line 117, in low_pass
May 17 10:28:08 satnogs5 satnogs-client[6724]:     return _filter_swig.firdes_low_pass(*args, **kwargs)
May 17 10:28:08 satnogs5 satnogs-client[6724]: RuntimeError: firdes check failed: 0 < fa <= sampling_freq / 2
May 17 10:28:11 satnogs5 satnogs-client[456]: netrigctl_close: done status=Command completed successfully
May 17 10:28:13 satnogs5 satnogs-client[456]: apscheduler.executors.default - ERROR - Job "spawn_observer (trigger: date[2024-05-17 10:28:04 UTC], next run at: 2024-05-17 10:28:04 UTC)" raised an exception
May 17 10:28:13 satnogs5 satnogs-client[456]: Traceback (most recent call last):
May 17 10:28:13 satnogs5 satnogs-client[456]:   File "/var/lib/satnogs/lib/python3.9/site-packages/apscheduler/executors/base.py", line 125, in run_job
May 17 10:28:13 satnogs5 satnogs-client[456]:     retval = job.func(*job.args, **job.kwargs)
May 17 10:28:13 satnogs5 satnogs-client[456]:   File "/var/lib/satnogs/lib/python3.9/site-packages/satnogsclient/scheduler/tasks.py", line 64, in spawn_observer
May 17 10:28:13 satnogs5 satnogs-client[456]:     observer.observe()
May 17 10:28:13 satnogs5 satnogs-client[456]:   File "/var/lib/satnogs/lib/python3.9/site-packages/satnogsclient/observer/observer.py", line 266, in observe
May 17 10:28:13 satnogs5 satnogs-client[456]:     waterfall = Waterfall(self.observation_waterfall_file)
May 17 10:28:13 satnogs5 satnogs-client[456]:   File "/var/lib/satnogs/lib/python3.9/site-packages/satnogsclient/waterfall.py", line 99, in __init__
May 17 10:28:13 satnogs5 satnogs-client[456]:     self.data = _get_waterfall(datafile_path)
May 17 10:28:13 satnogs5 satnogs-client[456]:   File "/var/lib/satnogs/lib/python3.9/site-packages/satnogsclient/waterfall.py", line 76, in _get_waterfall
May 17 10:28:13 satnogs5 satnogs-client[456]:     waterfall = _read_waterfall(datafile_path)
May 17 10:28:13 satnogs5 satnogs-client[456]:   File "/var/lib/satnogs/lib/python3.9/site-packages/satnogsclient/waterfall.py", line 34, in _read_waterfall
May 17 10:28:13 satnogs5 satnogs-client[456]:     'timestamp': np.fromfile(datafile, dtype='|S32', count=1)[0],
May 17 10:28:13 satnogs5 satnogs-client[456]: IndexError: index 0 is out of bounds for axis 0 with size 0
May 17 10:36:08 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 10:42:00 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 10:48:55 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 10:53:16 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 10:59:27 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 11:04:51 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 11:11:56 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 11:21:07 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 12:05:44 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 12:20:13 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 12:27:17 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 12:37:39 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 12:49:08 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 12:58:15 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 13:04:11 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 13:12:38 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 13:50:29 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 14:02:03 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 14:11:00 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 14:28:07 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 14:39:28 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 14:44:55 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 14:52:41 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 15:02:15 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 15:13:18 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 15:16:21 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.
May 17 15:21:06 satnogs5 satnogs-client[456]: satnogsclient.scheduler.tasks - ERROR - Observer job lock acquiring timed out.

Hi,
It looks very much as the old issue with sdr sample rate being too low for the selected baudrate.
The job lock thing should have been fixed, but I guess you are running the stable 1.8.1 and not master/experimental.
Regarding the main exception here, it looks like a new one (at least for me) as it is usually caught in here.
The solution should be the same thou, increase the sampling rate to be able to run the high baud observations.
For the pluto this is a problem, as it starts silently dropping samples at some rate which I cannot recall at the moment.
IIRC 6Msps is fine, but 8 is too high, YMMV. Keeping the bandwidth close to the sample rate as well, I see you have set 8MHz wide for 4Msps now.

Many thanks for the explanation and suggestions!
I will try to improve this setup.

I might however end up replacing the Pluto+ with another SDR. I am just not very happy with the Pluto+ in this role, as it is generating a lot of heat, even without a LNA, and the whole setup is built into a waterproof housing. Not ideal.

I have a similar setup I have been using on some experiments, I kind of like the pluto.
Mine is the old variant with USB only, so using a usb-nic to get ethernet directly.

The SDR section absolutely belongs indoors where the temperature is more stable and no water :stuck_out_tongue:
Having a LNA at the antenna and then running the coax indoors, where the bias-tee and SDR lives is a better solution, easier to maintain etc. The client can live anywhere in this setup as it just needs a network connection. Using a usb-SDR needs to have the computer at the same spot as the SDR, but usually not a big issue.

2 Likes

That’s a nice setup :smiley:
And thanks for the picture.It gave me some ideas :slightly_smiling_face:

I will of course mount the LNA on the antenna. But the problem I have is that I need to run about 10 meter of coax to get to somewhere inside where I can place the client. Do you think that is too much for S-band?

The length of coax was the reason to put everything in one box close to the antenna and power it with Power over Ethernet.

This is the 2x RX plus 2x TX Pluto+ version. It has a TCXO but I have to adjust that as the frequency is still off. There is still a lot of duct tape and velcron. But that will change, it is temporary.

Three turn LHCP helix.

Thanks (:

as long as the gain of the LNA is greater than the cable loss (connectors included) you should be fine. aim for some low loss foam dielectric for the long section.
I mostly use the thicker stuff, like 10mm foam dielectric for stretches longer than 5m.
when I need to use shorter thin cables, I go for the teflon/fep, like rg316 or similar.
the cable in your picture looks like rg142 ? pretty low loss in that case.

you can find some build pics in my gallery, there’s a few with LNA hooked up directly at helical’s feedpoint.

2 Likes