Troubleshooting
Preserve the first concrete error instead of copying only the final log line. Record the launch command, working directory, active BS.yaml / UE.yaml, and USRP model; these details usually separate configuration, environment, and link problems quickly.
Four checks to start with
Section titled “Four checks to start with”- Confirm that the process working directory contains the intended
BS.yamlorUE.yaml. - Match
radio.radio_backendto the scenario:uhdfor a real USRP orsimfor simulation. - Compare the BS and UE sample rate, FFT/CP, frame length, pilots, frequencies, duplex mode, and resource mapping.
- Temporarily set the relevant
logging.modulesentry toinfoordebug, reproduce once, and inspect the first Warn/Error.
Build fails
Section titled “Build fails”Reproduce with the standard build first:
cmake -S . -B buildcmake --build build -j$(nproc)- During CMake configuration, inspect the first missing package: UHD, Boost, FFTW3, yaml-cpp, ZeroMQ, OpenMP, or Aff3ct.
- During compilation, keep the first compiler error; later messages are often cascading failures.
- After changing compilers, CUDA, or dependency paths, configure a new empty build directory instead of reusing stale CMake state.
Runtime cannot find YAML
Section titled “Runtime cannot find YAML”BS and UE read fixed filenames from the current working directory; they do not automatically load presets from config/.
cp config/BS_X310.yaml build/BS.yamlcp config/UE_X310.yaml build/UE.yamlcd build./BSThe same working-directory rule applies through sudo and launch helpers. Restart the backend after editing YAML.
USRP is not found or cannot initialize
Section titled “USRP is not found or cannot initialize”- Run
uhd_find_devicesand confirm that UHD discovers the device. - Check
usrp_device.device_argsand any TX/RX-specific device arguments. - For X310, check host NIC addressing, routing, and MTU. For B210, check USB 3, cable quality, and power.
- If an external clock or PPS is configured, verify that the source is physically present; otherwise validate basic connectivity with
internalfirst.
UHD overflow, underflow, or late packets
Section titled “UHD overflow, underflow, or late packets”- X310: inspect link speed, MTU, packet loss, and competing traffic on the NIC.
- B210: use USB 3 directly and avoid hubs or a shared high-throughput controller.
- For either device, check sustained CPU load and YAML CPU assignments. Lower
rf_sampling.sample_ratetemporarily to test whether the failure is throughput-related.
UE cannot decode the downlink
Section titled “UE cannot decode the downlink”Follow the signal chain instead of starting with LDPC tuning:
- Confirm that the UE finds a synchronization peak and remains locked.
- Check whether CFO/SFO converges or repeatedly triggers reacquisition.
- Compare
ofdm_frame.*, pilot locations, mid-frame pilots, and resource blocks on BS and UE. - Inspect channel estimates and constellation quality before LLR and LDPC diagnostics.
- On RF hardware, check center frequency, gains, and antenna ports for weak or saturated input.
Uplink does not work
Section titled “Uplink does not work”Set uplink.enabled: true on both BS and UE, and match uplink.duplex_mode, the TDD symbol window, or the FDD center frequency. With ChannelSimulator, also enable simulation.enable_uplink. If samples arrive but decoding fails, inspect timing windows, channel estimation, equalization, and LDPC in that order.
Sensing output is unstable or incorrect
Section titled “Sensing output is unstable or incorrect”- Establish stable communication/synchronization first; sensing cannot compensate for persistent frame errors or loss of lock.
- Verify
alignment, RF-chain delay, channel calibration, FFT dimensions, and frontend parsing settings. - Check backend warnings for frame-pair queues, sensing-output queues, or ZMQ high-water-mark drops.
- For bistatic sensing, match
sensing.sensing_delay_correction_modeto the active LoS-tracking or eRTM configuration.
Visualization window does not update
Section titled “Visualization window does not update”- Enable the corresponding
network_output.*_enabledswitch. - Match the viewer IP/port to YAML and allow the TCP port through host firewalls.
- Run
ss -ltnpon the backend host and confirm that the expected endpoint is listening. - Check that the backend is producing data and is not continuously dropping frames because of full queues or missing subscribers.
If the problem remains, retain the complete YAML files, launch commands, logs from startup through the first failure, USRP connection details, and host environment information.