Skip to content

BS YAML Reference

BS reads BS.yaml from its current working directory at startup. Copy a config/BS_*.yaml preset that matches your hardware and scenario, then edit the copy. Configuration is not hot-reloaded; restart the BS after making changes.

The tables follow the top-level YAML structure and use full paths such as uplink.arq_enabled to distinguish similarly named fields. A typical value is guidance, not a guaranteed default for every preset. If an optional section is omitted, the parser supplies its default values.

Keep coupled frame-structure, duplex, frequency, and resource-mapping fields consistent with the UE configuration.

PathType/UnitTypical ValueDescription
radio.radio_backendstringuhdRadio I/O backend. Use uhd for real USRPs or sim for the shared-memory channel simulator.
PathType/UnitTypical ValueDescription
simulation.sessionstringoisac_simShared simulator session namespace used by BS, UE, and ChannelSimulator.
simulation.enable_comm_rxbooltrueSimulator produces the communication RX path for UE.
simulation.enable_sensing_rxbooltrueSimulator produces monostatic sensing RX paths.
simulation.enable_uplinkboolfalseSimulator routes the UE-to-BS uplink stream.
simulation.pacing_enabledbooltruePace simulator output to wall-clock sample time.
simulation.noise_power_dbfsfloat / dBFS-70AWGN power per RX channel; very low values effectively disable noise.
simulation.snr_control_enableboolfalseScale the clean simulated signal before AWGN to maintain target_snr_db.
simulation.target_snr_dbfloat / dB40Initial SNR target when SNR control is enabled.
simulation.control_portint10002ChannelSimulator ZMQ control port for runtime SNR commands.
simulation.cfo_hzfloat / Hz0Initial BS-to-UE CFO before UE RX correction. The initial UE-to-BS CFO has the opposite sign, is carrier-ratio-scaled in FDD, and its residual then follows UE uplink TX retuning.
simulation.sample_rate_offset_ppmfloat / ppm0UE sample-clock offset relative to the BS clock.
simulation.timing_offset_samplesint / samples0Constant integer sample delay injected on RX.
simulation.array_spacing_mfloat / m0.04283Physical ULA element spacing; set <=0 to use array_spacing_lambda.
simulation.array_spacing_lambdafloat / lambda0.5Legacy ULA spacing in wavelengths.
simulation.ring_capacity_samplesint / samples262144Per-stream shared-memory ring capacity.
simulation.steering_override_filestring""Optional array-manifold matrix file. When empty, the simulator generates a ULA manifold from angle_deg. When set, angle_deg no longer affects the array response; encode the angle-dependent amplitude and phase directly in the matrix.
simulation.comm_multipath_taps[]object[]optionalCommunication tapped-delay-line taps with delay_samples, gain_db, and phase_deg.
simulation.targets[]object[]optionalMonostatic point scatterers with range_m, velocity_mps, gain_db, and angle_deg.
simulation.bistatic_targets[]object[]optionalBistatic/communication point scatterers with the same target fields.
PathType/UnitTypical ValueDescription
rf_sampling.sample_ratefloat / Hz50000000Baseband sample rate.
rf_sampling.bandwidthfloat / Hz50000000Analog bandwidth, usually matching sample_rate.
PathType/UnitTypical ValueDescription
usrp_device.device_argsstringaddr=...Shared USRP device args fallback.
PathType/UnitTypical ValueDescription
clock_time.clock_sourcestringexternalGlobal clock source: internal, external, or gpsdo.
clock_time.time_sourcestringinternalGlobal time/PPS source; empty follows clock_source.

Whenever the resolved BS clock_source is non-empty, CPU, CUDA, and HIP startup waits for one observed PPS transition, then arms the TX USRP and every distinct sensing/uplink RX USRP with set_time_next_pps(0). This includes time_source: internal on a single physical USRP; time_source selects the PPS input but does not disable startup alignment. When the resolved target set contains multiple distinct USRPs, every target must use time_source: external or gpsdo so they share a common PPS epoch; otherwise startup rejects the configuration before arming any device. Streaming starts only after every device time counter is observed to reset at the target edge, reports time_last_pps=0, and has a time_now value consistent with the other devices. A missing PPS, unsupported backend, or failed verification aborts startup instead of falling back to an arbitrary set_time_now(0) epoch. For gpsdo, this intentionally replaces any UTC-like device-time epoch with zero. The step removes the software-time-origin offset; it does not remove the X310 PPS capture quantization (5 ns at a 200 MHz master clock).

PathType/UnitTypical ValueDescription
ofdm_frame.fft_sizeint1024OFDM FFT size.
ofdm_frame.cp_lengthint / samples128Cyclic prefix length.
ofdm_frame.sync_posint1Sync symbol index inside each frame.
ofdm_frame.enable_sec_sync_symbolboolfalseReserve sync_pos-1 as a duplicate ZC sync symbol.
ofdm_frame.enable_cfo_training_sequenceboolfalseReserve sync_pos+1 as a repeated CFO training field.
ofdm_frame.cfo_training_period_samplesint / samples16Repetition period of the CFO training field; must divide fft_size.
ofdm_frame.num_symbolsint100Number of OFDM symbols per frame.
ofdm_frame.sensing_symbol_numint100Number of symbols used in sensing processing.
ofdm_frame.zc_rootint29Zadoff-Chu root for sync/preamble.
ofdm_frame.pilot_positionsint[][571,...]Comb-pilot subcarrier indices.
ofdm_frame.midframe_pilot_symbolsint[][]Optional in-frame BPSK pilot symbol indices.
ofdm_frame.midframe_pilot_seedint1296453708Deterministic mid-frame BPSK pilot seed; must match TX/RX.
PathType/UnitTypical ValueDescription
cuda.cuda_precision_profilestringfp32fp32 preserves the existing path. mixed_fp16 uses FP16 for bulk OFDM FFT/IFFT storage and arithmetic while retaining FP32 for sensing, channel estimation, tracking, equalization, and sensitive reductions. Unsupported FP16 FFT shapes fall back to FP32.
cuda.cuda_mod_pipeline_slotsint3CUDA modulation pipeline slots; values below 1 are clamped.
PathType/UnitTypical ValueDescription
ldpc.decoder_iterationsint12Maximum CPU LDPC iterations, at least 1; syndrome early stopping stays enabled.
ldpc.nms_normalization_factorfloat0.75CPU NMS normalization factor, finite and in (0, 1]; Q16 requires multiples of 0.125.
ldpc.fixed_pointboolfalseUse the int16/Q16 layered-NMS CPU decoder instead of float32.
ldpc.fixed_point_scaleint16Power-of-two LLR scale before int16 saturation in fixed-point mode.

These fields configure CPU decoding on the BS uplink, for both float32 and Q16. Omitting them selects 12 iterations and a factor of 0.75. Explicit YAML values remain in effect; update both fields to use these defaults in an existing config. Edit them under LDPC decode in the Web Config Console, save, and restart the backend. Q16 supports 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0; the LLR scale applies only when fixed_point: true. More iterations may improve error correction while increasing computation for weak signals.

PathType/UnitTypical ValueDescription
downlink.center_freqfloat / Hz2400000000BS downlink RF center frequency.
downlink.tx_gainfloat / dB60BS downlink TX gain.
downlink.tx_channelint0BS downlink TX channel index.
downlink.tx_device_argsstring""TX-specific device args; empty uses usrp_device.device_args.
downlink.tx_clock_sourcestring""TX clock source override.
downlink.tx_time_sourcestring""TX time source override.
downlink.wire_format_txstringsc16TX wire format, typically sc16 or sc8.
downlink.tx_circular_buffer_sizeint32Capacity of the modulated-frame queue feeding TX.
downlink.data_packet_buffer_sizeint256Capacity of the encoded-packet buffer.
downlink.arq_enabledboolfalseEnable downlink ARQ on the BS transmitter.
downlink.arq_window_packetsint256Downlink ARQ outstanding packet window; valid range 1–32767.
downlink.arq_retransmit_timeout_msint / ms100Downlink ARQ retransmission timeout.
downlink.arq_max_retriesint5Max downlink retransmission retries; 0 means unlimited within the window.
PathType/UnitTypical ValueDescription
uplink.enabledboolfalseMaster switch for the UE-to-BS uplink/duplex path.
uplink.duplex_modestringtddtdd uses an uplink symbol window; fdd uses uplink.center_freq and a full-frame uplink.
uplink.center_freqfloat / Hz2500000000FDD-only uplink carrier. TDD uses the downlink center frequency.
uplink.symbol_startint90TDD-only first uplink symbol in the downlink frame.
uplink.symbol_countint10TDD-only uplink window length; 0 disables TDD uplink.
uplink.guard_symbolsint1TDD-only leading guard symbols inside the uplink window.
uplink.bs_dl_ul_timing_diffint / samples50BS-side uplink RX window offset relative to the downlink TX frame anchor.
uplink.debug_self_channelboolfalseEstimate local TX leakage/self channel from uplink RX windows for DUTI debugging.
uplink.ertm_to_enableboolfalseEnable eRTM timing-offset payloads and UE-side TO logs.
uplink.ertm_report_interval_framesint / frames32BS eRTM payload/report cadence in downlink TX frames; each report also refreshes the BS PPS anchor.
uplink.rx_gainfloat / dB0BS uplink RX gain.
uplink.rx_channelint0BS uplink RX channel index.
uplink.rx_wire_formatstringsc16BS uplink RX wire format.
uplink.rx_device_argsstring""Uplink RX device args override.
uplink.rx_clock_sourcestring""Uplink RX clock source override.
uplink.rx_time_sourcestring""Uplink RX time source override.
uplink.rx_agc_enableboolfalseEnable BS uplink hardware RX AGC.
uplink.rx_agc_low_threshold_dbfloat / dB14Increase uplink RX gain below this filtered delay-spectrum peak threshold.
uplink.rx_agc_high_threshold_dbfloat / dB16Decrease uplink RX gain above this threshold.
uplink.rx_agc_max_step_dbfloat / dB1Maximum uplink RX gain step per AGC update.
uplink.rx_agc_update_framesint4Minimum processed-uplink-frame interval between AGC updates.
uplink.equalizer_modestringmmseBS uplink equalizer inverse mode: zf or mmse.
uplink.channel_tracking_modestringpilot_phaseUplink per-symbol comb-pilot tracking mode: disabled or pilot_phase.
uplink.equalizer_mag_floorfloat1e-6Lower bound for `
uplink.channel_tracking_min_pilot_snrfloat1e-4Minimum comb-pilot residual weight before falling back.
uplink.arq_enabledboolfalseEnable uplink ARQ on the BS receiver.
uplink.arq_ordered_deliveryboolfalseBuffer accepted uplink packets for in-order UDP delivery.
uplink.arq_window_packetsint256Uplink ARQ receive/reorder window; valid range 1–32767.
uplink.arq_feedback_interval_msint / ms10Minimum interval between uplink ARQ ACK feedback packets.
PathType/UnitTypical ValueDescription
sensing.rx_wire_formatstringsc16Default sensing RX wire format.
sensing.rx_device_argsstring""Default sensing RX args.
sensing.rx_clock_sourcestring""Default sensing RX clock source override.
sensing.rx_time_sourcestring""Default sensing RX time source override.
sensing.rx_channel_countint1Number of monostatic sensing RX channels; 0 disables sensing RX.
sensing.rx_channels[]object[]see belowPer-channel sensing RX settings.
sensing.range_fft_sizeint1024Range FFT size.
sensing.doppler_fft_sizeint100Doppler FFT size.
sensing.view_range_binsint0Backend RD view width; 0 means full range_fft_size.
sensing.view_doppler_binsint0Backend RD view height; 0 means full doppler_fft_size.
sensing.output_modestringdensedense uses STRD-based full output; compact_mask exports selected RE only.
sensing.on_wire_formatstringcomplex_float32Sensing payload wire format.
sensing.backend_processing_enabledboolfalsePublish backend RD/CFAR/micro-Doppler sidecars when supported.
sensing.symbol_strideint20Default dense-mode STRD applied at startup.
sensing.paired_frame_queue_sizeint64Per-channel RX/TX frame-pairing queue capacity.
sensing.mask_blocksvia resource_preview.mask_blocksoptionalRuntime sensing mask derived from resource preview.
FieldType/UnitTypical ValueDescription
usrp_channelint1USRP RX channel index for this sensing path.
device_argsstring""Per-channel device args override.
clock_sourcestring""Per-channel clock source override.
time_sourcestring""Per-channel time source override.
wire_formatstring""Per-channel wire-format override.
rx_gainfloat / dB30Per-channel RX gain.
alignmentint / samples63Per-channel timing alignment offset.
rx_antennastringRX2RX antenna port, such as RX1, RX2, or TX/RX.
enable_system_delay_estimationboolfalseRun periodic ZC-based system-delay estimation and disable normal sensing for this channel.
enable_sensing_outputboolinherits output switchPer-channel monostatic output switch.
rx_cpu_coreint-1CPU core for the channel RX loop.
processing_cpu_coreint-1CPU core for the channel sensing-processing loop.
PathType/UnitTypical ValueDescription
resource_preview.data_resource_blocks[]object[]optionalPayload / sensing-pilot RE rectangles. Each item has kind, symbol_start, symbol_count, subcarrier_start, and subcarrier_count.
resource_preview.mask_blocks[]object[]optionalCompact sensing RE rectangles with symbol_start, symbol_count, subcarrier_start, and subcarrier_count.
PathType/UnitTypical ValueDescription
measurement.measurement_enableboolfalseEnable internal PRBS measurement traffic.
measurement.measurement_modestringinternal_prbsMeasurement generator/checker mode.
measurement.measurement_run_idstring""Run identifier written into measurement CSV summaries.
measurement.measurement_output_dirstring""Output directory for measurement CSV summaries.
measurement.measurement_payload_bytesint / bytes1024Bytes per generated measurement payload.
measurement.measurement_prbs_seedint0x5ABase seed for deterministic PRBS payload contents.
measurement.measurement_packets_per_pointint1Packets sent for one measurement epoch.
measurement.measurement_max_packets_per_frameint1Max measurement packets pulled per frame; 0 means unlimited.
PathType/UnitTypical ValueDescription
network_output.udp_input_ipstring / IPv40.0.0.0BS downlink payload UDP bind IP.
network_output.udp_input_portint50000BS downlink payload UDP bind port.
network_output.udp_output_ipstring / IPv4127.0.0.1BS decoded uplink UDP destination IP.
network_output.udp_output_portint50003BS decoded uplink UDP destination port.
network_output.udp_egress_pacer_enabledboolfalseEnable queued pacing for decoded UDP egress.
network_output.udp_egress_pacer_target_mbpsfloat / Mbps0Egress pacer target rate; 0 auto-estimates from enqueue rate.
network_output.udp_egress_pacer_queue_packetsint10240Egress pacer queue capacity in datagrams.
network_output.udp_egress_pacer_max_delay_msfloat / ms0Max queued packet age; 0 disables age drops.
network_output.mono_sensing_output_enabledbooltrueEnable monostatic sensing ZMQ output.
network_output.mono_sensing_ipstring / IPv40.0.0.0Monostatic sensing/control ZMQ bind IP.
network_output.mono_sensing_portint8888Monostatic sensing PUB port.
network_output.uplink_channel_ipstring / IPv40.0.0.0BS uplink channel-estimate debug PUB IP.
network_output.uplink_channel_portint12358BS uplink channel-estimate debug PUB port.
network_output.uplink_pdf_ipstring / IPv40.0.0.0BS uplink delay-spectrum debug PUB IP.
network_output.uplink_pdf_portint12359BS uplink delay-spectrum debug PUB port.
network_output.uplink_constellation_ipstring / IPv40.0.0.0BS uplink constellation debug PUB IP.
network_output.uplink_constellation_portint12356BS uplink constellation debug PUB port.
network_output.self_channel_ipstring / IPv40.0.0.0BS self-channel debug PUB IP.
network_output.self_channel_portint12360BS self-channel debug PUB port.
network_output.self_pdf_ipstring / IPv40.0.0.0BS self-delay-spectrum debug PUB IP.
network_output.self_pdf_portint12361BS self-delay-spectrum debug PUB port.
network_output.ertm_debug_ipstring / IPv40.0.0.0eRTM debug PUB IP.
network_output.ertm_debug_portint12362eRTM debug PUB port.
network_output.control_portint9999ZMQ ROUTER port for runtime control.
PathType/UnitTypical ValueDescription
cpu_cores.downlink_cpu_coresint[][1,2,3,-1]BS downlink cores: TX, modulation, LDPC encode, UDP receive.
cpu_cores.uplink_cpu_coresint[][]BS uplink cores: RX ingest, OFDM/LLR processing, LDPC decode + UDP output.
cpu_cores.main_cpu_coreint-1Main-thread CPU core; -1 disables binding.

Profile timing dumps and diagnostic logs are gated by the hierarchical logging filter (not a separate profiling_modules key).

PathType/UnitTypical ValueDescription
logging.default_levelstringwarnGlobal verbosity: off / error / warn / info / debug.
logging.force_errorbooltrueAlways emit unrecoverable Error lines.
logging.timestampsboolfalsePrefix lines with local HH:MM:SS.uuuuuu.
logging.modulesmap{}Per-module overrides. Debug modules inherit parents (e.g. mod, sensing, ertm). Performance modules end with _profiling (e.g. mod_profiling, sensing_profiling) and stay off until set explicitly.