nearlink_sdr.sim.link_sim¶
TXS-10002-2025 链路仿真: GFSK/PSK 无编码 + Polar编码端到端仿真。
Module Contents¶
Functions¶
Phase 1 综合仿真: GFSK + BPSK + QPSK BER曲线。 |
|
Phase 2 综合仿真: Polar编码 BPSK/QPSK BER/FER 曲线。 |
|
Phase 3 帧级仿真: 不同帧类型、导频配置的 BER/FER。 |
|
Phase 4: 不同信道模型 + 均衡器的 BER/FER 比较。 |
|
Phase 5: 跳频链路仿真 — 比较不同跳频配置的 BER/FER。 |
|
Phase 6: 全链路 Pipeline BER/FER 仿真 — 不同 MCS + 帧类型。 |
|
Phase 7: 多径信道 + 频率偏移 Pipeline BER/FER 仿真。 |
|
Phase 8: 多帧类型在不同信道条件下的 BER/FER 综合对比。 |
|
Phase 9: MAC 帧级端到端仿真 — 信令、数据、复用帧 (含信道损伤)。 |
|
Phase 10: 多链路调度仿真入口。 |
|
Phase 11: 安全通信端到端仿真可视化。 |
|
Phase 12: AMC 吞吐量 + HARQ 重传 + 跳频多径仿真可视化。 |
|
Phase 13: QoS 驱动的 ARQ + AMC 自适应 + 流控仿真可视化。 |
|
Phase 14: 双节点端到端仿真可视化。 |
|
Phase 15: SleNode 集成仿真可视化。 |
|
Phase 16: 多用户干扰 + Doppler 时变信道仿真可视化。 |
|
接入流程 + 调度器驱动的数据传输仿真。 |
|
各 MCS 级别的吞吐量与误帧率扫描, 含 AMC 包络线。 |
|
多径信道 + 均衡器 + Polar编码 BPSK 链路仿真。 |
|
Doppler 时变信道仿真: 扫描不同多普勒频移下的 FER。 |
|
Doppler + 多径信道联合仿真。 |
|
双 SleNode 实体数据交换仿真。 |
|
双节点 MCS 自适应仿真。 |
|
双 SleNode 安全通信仿真 (配对 + 加密)。 |
|
对比加密与明文传输的误帧率。 |
|
事件组时序计算仿真。 |
|
完整帧级仿真: 帧组装 → Polar编码 → PSK调制(含导频) → AWGN → 解调 → 解码 → BER。 |
|
帧类型1 GFSK无编码链路仿真。 |
|
HARQ 重传链路仿真 (Chase combining 简化模型)。 |
|
跳频链路仿真: 数据帧在多个跳频信道间传输, 每跳独立衰落。 |
|
跳频 + 多径信道链路仿真。 |
|
MAC 异步数据帧端到端仿真: 数据编码 → IQ → 信道 → IQ → 数据解码。 |
|
MAC 复用帧端到端仿真: 控制帧+数据帧复用 → IQ → 信道 → IQ → 解码。 |
|
MAC 信令帧端到端仿真: 信令编码 → IQ → 信道 → IQ → 信令解码。 |
|
多链路调度仿真: 多条链路在超帧内按时间片分时传输。 |
|
多用户干扰仿真: 扫描不同干扰用户数下的 FER 和 SINR。 |
|
SleNode 完整接入流程仿真。 |
|
SleNode 内置信道模型扫频仿真。 |
|
SleNode 跳频数据链路仿真。 |
|
SleNode 测量信号生成仿真。 |
|
SleNode 功率自适应仿真。 |
|
配对信令经 PHY 管道传输的成功率仿真。 |
|
全链路 Pipeline 仿真 — 支持多径信道、频率偏移和均衡器。 |
|
使用 tx_chain / rx_chain 的全链路端到端仿真。 |
|
Polar编码PSK链路仿真。 |
|
帧类型2/3/4 PSK无编码链路仿真。 |
|
QoS 链路质量跟踪驱动的 AMC 自适应仿真。 |
|
QoS 管理器驱动的 ARQ 重传链路仿真。 |
|
QoS 流控机制仿真。 |
|
接入 → 配对 → 加密数据传输端到端仿真。 |
|
SIR 扫描仿真: 固定干扰用户数, 扫描 SIR 下的 FER。 |
|
超帧容量分析: 逐步增加链路直到出现时间片冲突。 |
API¶
- nearlink_sdr.sim.link_sim.run_phase6_simulation()[源代码]¶
Phase 6: 全链路 Pipeline BER/FER 仿真 — 不同 MCS + 帧类型。
- nearlink_sdr.sim.link_sim.run_phase12_simulation() None[源代码]¶
Phase 12: AMC 吞吐量 + HARQ 重传 + 跳频多径仿真可视化。
- nearlink_sdr.sim.link_sim.run_phase13_simulation() None[源代码]¶
Phase 13: QoS 驱动的 ARQ + AMC 自适应 + 流控仿真可视化。
- nearlink_sdr.sim.link_sim.run_phase16_simulation(n_frames: int = 50) None[源代码]¶
Phase 16: 多用户干扰 + Doppler 时变信道仿真可视化。
- nearlink_sdr.sim.link_sim.sim_access_scheduled_link(snr_range_db: numpy.ndarray | None = None, n_frames: int = 50, mcs_index: int = 7, payload_size: int = 10, channel_type: str = 'awgn', cfo_hz: float = 0.0, eq_method: str = 'none', rician_k_db: float = 6.0, seed: int = 42) dict[源代码]¶
接入流程 + 调度器驱动的数据传输仿真。
模拟完整的接入建链过程, 然后使用接入参数配置调度器, 在事件组时间窗口内进行数据帧收发。
- 参数:
snr_range_db -- 信噪比范围 (dB)。
n_frames -- 每个 SNR 点仿真帧数。
mcs_index -- MCS 索引。
payload_size -- 载荷字节数。
channel_type -- 信道类型。
cfo_hz -- 载波频率偏移。
eq_method -- 均衡方法。
rician_k_db -- Rician K 因子。
seed -- 随机种子。
- 返回:
{"snr_db": [...], "fer": [...], "access_ok": bool, "link_params": dict}
- nearlink_sdr.sim.link_sim.sim_amc_throughput(snr_range_db: numpy.ndarray | None = None, n_frames: int = 50, payload_size: int = 10, channel_type: str = 'awgn', cfo_hz: float = 0.0, eq_method: str = 'none', rician_k_db: float = 6.0, mcs_indices: list[int] | None = None, seed: int = 42) dict[源代码]¶
各 MCS 级别的吞吐量与误帧率扫描, 含 AMC 包络线。
遍历所有 MCS 索引 (0-12), 对每个 SNR 点计算 FER 和有效吞吐量。 有效吞吐量 = (1 - FER) * spectral_efficiency (bit/symbol)。 AMC 策略: 在每个 SNR 点选择吞吐量最高的 MCS。
- 返回:
{ "snr_db": [...], "mcs_fer": {mcs_idx: [fer_per_snr, ...]}, "mcs_throughput": {mcs_idx: [throughput_per_snr, ...]}, "amc_throughput": [...], # AMC 包络吞吐量 "amc_mcs": [...], # AMC 选择的 MCS 索引 }
- nearlink_sdr.sim.link_sim.sim_channel_eq_link(channel_type: str = 'rayleigh', rician_k_db: float = 6.0, eq_method: str = 'mmse', rate_str: str = '1/2', code_length: int = 256, snr_range_db: numpy.ndarray | None = None, n_frames: int = 20, seed: int = 42) dict[源代码]¶
多径信道 + 均衡器 + Polar编码 BPSK 链路仿真。
流程: 信息比特 → Polar编码 → BPSK调制 → 信道(衰落+AWGN) → 均衡 → LLR → 解码
- 参数:
channel_type -- "awgn" / "rayleigh" / "rician" / "multipath"。
rician_k_db -- Rician K 因子。
eq_method -- "zf" / "mmse" / "none" (不均衡)。
rate_str -- Polar 码率。
code_length -- Polar 码长。
snr_range_db -- SNR 范围。
n_frames -- 每个 SNR 点的帧数。
seed -- 随机种子。
- 返回:
{"snr_db": [...], "ber": [...], "fer": [...]}
- nearlink_sdr.sim.link_sim.sim_doppler_link(doppler_range_hz: numpy.ndarray | None = None, snr_db: float = 12.0, n_frames: int = 100, mcs_index: int = 7, payload_size: int = 20, channel_type: str = 'rayleigh', eq_method: str = 'zf', seed: int = 42) dict[源代码]¶
Doppler 时变信道仿真: 扫描不同多普勒频移下的 FER。
使用 Jakes 求和正弦模型生成时间相关衰落, 评估 FER 随 Doppler 扩展的变化。
- 参数:
doppler_range_hz -- Doppler 频移扫描范围 (Hz)。
snr_db -- 固定 SNR (dB)。
n_frames -- 每个 Doppler 点仿真帧数。
mcs_index -- MCS 索引。
payload_size -- 载荷字节数。
channel_type -- 衰落类型 ("rayleigh" / "rician")。
eq_method -- 均衡方法。
seed -- 随机种子。
- 返回:
{"doppler_hz": [...], "fer": [...], "avg_fade_depth_db": [...]}
- nearlink_sdr.sim.link_sim.sim_doppler_multipath_link(doppler_range_hz: numpy.ndarray | None = None, snr_db: float = 15.0, n_frames: int = 80, mcs_index: int = 7, payload_size: int = 20, seed: int = 42) dict[源代码]¶
Doppler + 多径信道联合仿真。
在 ITU Indoor Office B 多径模型基础上叠加 Doppler 时变, 评估信道时变对频率选择性衰落下的接收性能影响。
- 返回:
{"doppler_hz": [...], "fer": [...]}
- nearlink_sdr.sim.link_sim.sim_dual_node_link(snr_range_db: numpy.ndarray | None = None, n_frames: int = 50, mcs_index: int = 7, payload_size: int = 10, channel_type: str = 'awgn', cfo_hz: float = 0.0, eq_method: str = 'none', rician_k_db: float = 6.0, seed: int = 42) dict[源代码]¶
双 SleNode 实体数据交换仿真。
创建 G 节点与 T 节点, 完成广播→接入→数据交换全流程。 G 节点发送随机数据, T 节点接收并统计 FER 与字节误码率。
- 返回:
{ "snr_db": [...], "fer": [...], "byte_ber": [...], "tx_count": int, "rx_count": int, }
- nearlink_sdr.sim.link_sim.sim_dual_node_mcs_adapt(snr_db: float = 8.0, n_frames: int = 100, payload_size: int = 10, initial_mcs: int = 7, channel_type: str = 'awgn', seed: int = 42) dict[源代码]¶
双节点 MCS 自适应仿真。
固定 SNR 下连续帧传输, 跟踪 G 节点的 MCS 自适应过程和吞吐量变化。
- 返回:
{ "frame_idx": [...], "mcs_history": [...], "fer_history": [...], "success_history": [...], }
- nearlink_sdr.sim.link_sim.sim_dual_node_secure_link(snr_range_db: numpy.ndarray | None = None, n_frames: int = 50, mcs_index: int = 7, payload_size: int = 10, channel_type: str = 'awgn', seed: int = 42) dict[源代码]¶
双 SleNode 安全通信仿真 (配对 + 加密)。
在 sim_dual_node_link 基础上增加配对与加密流程:
广播→接入→连接
配对 (ECDH 密钥协商)
加密数据帧传输
- 返回:
{ "snr_db": [...], "fer_plain": [...], "fer_encrypted": [...], "pairing_ok": bool, }
- nearlink_sdr.sim.link_sim.sim_encrypted_vs_plain(snr_range_db: numpy.ndarray | None = None, n_frames: int = 50, mcs_index: int = 7, payload_size: int = 10, channel_type: str = 'awgn', seed: int = 42) dict[源代码]¶
对比加密与明文传输的误帧率。
- 返回:
{"snr_db", "fer_encrypted", "fer_plain"}
- nearlink_sdr.sim.link_sim.sim_event_group_timing(event_group_period: int = 100, event_count: int = 4, event_period: int = 25, intra_event_interval: int = 300, tx_max_offset: int = 3, rx_max_offset: int = 3) dict[源代码]¶
事件组时序计算仿真。
可视化事件组内各事件的 TX/RX 窗口分布和资源利用率。
- 参数:
event_group_period -- 事件组周期 (调度时隙)。
event_count -- 事件总数。
event_period -- 事件周期 (调度时隙)。
intra_event_interval -- 事件内间隔 (μs)。
tx_max_offset -- TX 最大偏移 (基础时隙)。
rx_max_offset -- RX 最大偏移 (基础时隙)。
- 返回:
{"events": [{"start": int, "tx_window": (s,e), "rx_window": (s,e)}], "total_active_us": int, "group_period_us": int, "utilization": float}
- nearlink_sdr.sim.link_sim.sim_frame_link(frame_type: int = 2, num_data_bits: int = 200, rate_str: str = '1/2', code_length: int = 256, pilot_interval: int = 4, snr_range_db: numpy.ndarray | None = None, seed: int = 42) dict[源代码]¶
完整帧级仿真: 帧组装 → Polar编码 → PSK调制(含导频) → AWGN → 解调 → 解码 → BER。
- 参数:
frame_type -- 2, 3, or 4.
num_data_bits -- 数据负载比特数.
rate_str -- Polar码率.
code_length -- Polar码长.
pilot_interval -- 导频插入间隔 (0, 4, 8, 16).
snr_range_db -- SNR扫描范围.
seed -- 随机种子.
- 返回:
{"snr_db": [...], "ber": [...], "fer": [...]}
- nearlink_sdr.sim.link_sim.sim_gfsk_link(num_data_bits: int = 1000, snr_range_db: numpy.ndarray | None = None, sps: int = 8, seed: int = 42) dict[源代码]¶
帧类型1 GFSK无编码链路仿真。
流程: 前导码 + 同步信号1(广播) + 数据 → GFSK调制 → AWGN信道 → GFSK解调 → BER
- 返回:
{"snr_db": [...], "ber": [...]}
- nearlink_sdr.sim.link_sim.sim_harq_link(snr_range_db: numpy.ndarray | None = None, n_frames: int = 50, mcs_index: int = 7, payload_size: int = 10, max_retries: int = 3, channel_type: str = 'awgn', cfo_hz: float = 0.0, eq_method: str = 'none', rician_k_db: float = 6.0, seed: int = 42) dict[源代码]¶
HARQ 重传链路仿真 (Chase combining 简化模型)。
每帧传输失败时进行重传, 最多重传 max_retries 次。 使用 B1 控制信息中的 harq_feedback 和 packet_sn 字段。 标准 6.10.5 规定 MCS=15 表示重传帧。
- 返回:
{ "snr_db": [...], "fer_no_harq": [...], # 无重传 FER "fer_harq": [...], # HARQ FER (超过最大重传仍失败) "avg_transmissions": [...], # 平均每帧传输次数 "throughput_no_harq": [...], # 无重传吞吐量 (归一化) "throughput_harq": [...], # HARQ 吞吐量 (归一化) }
- nearlink_sdr.sim.link_sim.sim_hopping_link(hop_param2: int = 43981, n_hops: int = 20, rate_str: str = '1/2', code_length: int = 256, snr_range_db: numpy.ndarray | None = None, bandwidth_mhz: int = 1, blocked_ratio: float = 0.0, seed: int = 42) dict[源代码]¶
跳频链路仿真: 数据帧在多个跳频信道间传输, 每跳独立衰落。
流程: 生成跳频序列 → 每跳: Polar编码 → BPSK调制 → 独立 Rayleigh 信道 → 均衡 → 解码
- 参数:
hop_param2 -- 跳频参数 2。
n_hops -- 每个 SNR 点的跳频次数 (帧数)。
rate_str -- Polar 码率。
code_length -- Polar 码长。
snr_range_db -- SNR 范围。
bandwidth_mhz -- 信道带宽 1/2/4 MHz。
blocked_ratio -- 被阻塞信道占比 (0~1)。
seed -- 随机种子。
- 返回:
{"snr_db": [...], "ber": [...], "fer": [...], "channels_used": [...]}
- nearlink_sdr.sim.link_sim.sim_hopping_multipath_link(snr_range_db: numpy.ndarray | None = None, n_frames: int = 50, mcs_index: int = 7, payload_size: int = 10, n_hop_channels: int = 8, seed: int = 42) dict[源代码]¶
跳频 + 多径信道链路仿真。
每帧在不同频率信道上传输, 模拟跳频对抗频率选择性衰落的效果。 对比固定信道 (Rayleigh) 与跳频 (不同信道独立衰落) 的 FER。
- 返回:
{ "snr_db": [...], "fer_fixed": [...], # 固定信道 FER "fer_hopping": [...], # 跳频 FER }
- nearlink_sdr.sim.link_sim.sim_mac_data_link(payload_sizes: list[int] | None = None, snr_range_db: numpy.ndarray | None = None, n_frames: int = 50, mcs_index: int = 7, channel_type: str = 'awgn', cfo_hz: float = 0.0, eq_method: str = 'none', rician_k_db: float = 6.0, seed: int = 42) dict[源代码]¶
MAC 异步数据帧端到端仿真: 数据编码 → IQ → 信道 → IQ → 数据解码。
对不同载荷大小, 统计字节级误码率和帧正确率。
- 参数:
payload_sizes -- 要测试的载荷大小列表 (字节)。
channel_type -- "awgn" | "rayleigh" | "rician" | "multipath"。
cfo_hz -- 载波频率偏移 (Hz)。
eq_method -- "none" | "zf" | "mmse"。
rician_k_db -- Rician K 因子 (dB)。
- 返回:
{"snr_db": [...], "results": {size: {"fer": [...], "byte_ber": [...]}}}
- nearlink_sdr.sim.link_sim.sim_mac_mux_link(snr_range_db: numpy.ndarray | None = None, n_frames: int = 50, mcs_index: int = 7, data_size: int = 10, channel_type: str = 'awgn', cfo_hz: float = 0.0, eq_method: str = 'none', rician_k_db: float = 6.0, seed: int = 42) dict[源代码]¶
MAC 复用帧端到端仿真: 控制帧+数据帧复用 → IQ → 信道 → IQ → 解码。
每帧包含一条信令和一段数据, 验证复用帧在信道传输后的完整性。
- 参数:
channel_type -- "awgn" | "rayleigh" | "rician" | "multipath"。
cfo_hz -- 载波频率偏移 (Hz)。
eq_method -- "none" | "zf" | "mmse"。
rician_k_db -- Rician K 因子 (dB)。
- 返回:
{"snr_db": [...], "mux_success_rate": [...], "data_match_rate": [...]}
- nearlink_sdr.sim.link_sim.sim_mac_signaling_link(snr_range_db: numpy.ndarray | None = None, n_frames: int = 50, mcs_index: int = 7, channel_type: str = 'awgn', cfo_hz: float = 0.0, eq_method: str = 'none', rician_k_db: float = 6.0, seed: int = 42) dict[源代码]¶
MAC 信令帧端到端仿真: 信令编码 → IQ → 信道 → IQ → 信令解码。
每帧随机选取一种信令类型进行编码, 经过 PHY 发射/接收流水线和信道后, 统计信令解码成功率。
- 参数:
channel_type -- "awgn" | "rayleigh" | "rician" | "multipath"。
cfo_hz -- 载波频率偏移 (Hz)。
eq_method -- "none" | "zf" | "mmse"。
rician_k_db -- Rician K 因子 (dB)。
- 返回:
{"snr_db": [...], "signaling_success_rate": [...]}
- nearlink_sdr.sim.link_sim.sim_multi_link(n_links: int = 3, snr_range_db: numpy.ndarray | None = None, n_superframes: int = 20, mcs_index: int = 7, payload_size: int = 10, channel_type: str = 'awgn', cfo_hz: float = 0.0, eq_method: str = 'none', rician_k_db: float = 6.0, smf_interval: int = 800, seed: int = 42) dict[源代码]¶
多链路调度仿真: 多条链路在超帧内按时间片分时传输。
使用 ScheduleManager 分配时间资源, 每条链路在各自的事件组窗口内 发送/接收数据帧, 统计每条链路和总体的 FER。
- 参数:
n_links -- 并发链路数。
snr_range_db -- 信噪比范围 (dB)。
n_superframes -- 每个 SNR 点仿真的超帧数。
mcs_index -- 调制编码策略索引。
payload_size -- 每帧载荷字节数。
channel_type -- 信道类型。
cfo_hz -- 载波频率偏移。
eq_method -- 均衡方法。
rician_k_db -- Rician K 因子。
smf_interval -- SMF 间隔 (基础时隙)。
seed -- 随机种子。
- 返回:
{"snr_db": [...], "aggregate_fer": [...], "per_link_fer": {link_id: [...]}, "throughput_ratio": [...]}
- nearlink_sdr.sim.link_sim.sim_multi_user_interference(n_interferers_range: list[int] | None = None, sir_db: float = 10.0, snr_db: float = 15.0, n_frames: int = 100, mcs_index: int = 7, payload_size: int = 20, channel_type: str = 'awgn', freq_offset_hz: float = 0.0, seed: int = 42) dict[源代码]¶
多用户干扰仿真: 扫描不同干扰用户数下的 FER 和 SINR。
多个干扰用户在同一频段 (或邻信道) 独立发送, 叠加到有用信号上。
- 参数:
n_interferers_range -- 干扰用户数扫描列表。
sir_db -- 每个干扰用户的 SIR (dB)。
snr_db -- 噪声 SNR (dB)。
n_frames -- 每个点仿真帧数。
mcs_index -- MCS 索引。
payload_size -- 载荷字节数。
channel_type -- 信道类型。
freq_offset_hz -- 干扰频偏 (Hz), 0 为同信道。
seed -- 随机种子。
- 返回:
{"n_interferers": [...], "fer": [...], "sinr_db": [...]}
- nearlink_sdr.sim.link_sim.sim_node_access_flow(seed: int = 42) dict[源代码]¶
SleNode 完整接入流程仿真。
模拟 G 节点广播 → T 节点扫描/发现 → 接入 → 数据交换 → 断开。
- 返回:
{ "g_state": G 节点最终状态, "t_state": T 节点最终状态, "broadcast_frame_valid": 广播帧是否有效, "data_roundtrip_ok": 数据往返是否成功, "scheduler_active": 调度器是否已注册链路, "disconnect_ok": 断开是否成功, }
- nearlink_sdr.sim.link_sim.sim_node_channel_sweep(snr_range_db: numpy.ndarray | None = None, n_frames: int = 50, mcs_index: int = 7, payload_size: int = 10, channel_type: str = 'awgn', seed: int = 42) dict[源代码]¶
SleNode 内置信道模型扫频仿真。
使用节点内置的 ChannelModel, 遍历 SNR 范围统计 FER。
- 返回:
{"snr_db": [...], "fer": [...], "mcs_history": [...]}
- nearlink_sdr.sim.link_sim.sim_node_hopping_link(snr_db: float = 10.0, n_frames: int = 100, mcs_index: int = 7, payload_size: int = 10, seed: int = 42) dict[源代码]¶
SleNode 跳频数据链路仿真。
G 节点和 T 节点在跳频序列上逐帧通信, 每帧发送后推进时隙, 观察信道号变化和传输成功率。
- 返回:
{ "channels": 使用过的信道号列表, "unique_channels": 唯一信道数, "success_count": 成功帧数, "fer": 帧错误率, "tx_powers": 各帧发射功率列表, }
- nearlink_sdr.sim.link_sim.sim_node_measurement(n_measur: int = 64, seed: int = 42) dict[源代码]¶
SleNode 测量信号生成仿真。
- 返回:
{ "signal_length": 测量信号长度, "signal_energy": 信号能量, }
- nearlink_sdr.sim.link_sim.sim_node_power_adapt(snr_db: float = 8.0, n_frames: int = 80, payload_size: int = 10, seed: int = 42) dict[源代码]¶
SleNode 功率自适应仿真。
节点逐帧通信, 根据反馈结果动态调整发射功率。
- 返回:
{ "frame_idx": [...], "power_history": [...], "success_history": [...], "fer": float, }
- nearlink_sdr.sim.link_sim.sim_pairing_signaling_phy(snr_range_db: numpy.ndarray | None = None, n_trials: int = 20, channel_type: str = 'awgn', seed: int = 42) dict[源代码]¶
配对信令经 PHY 管道传输的成功率仿真。
将配对过程中的每条信令编码为 IQ, 经信道传输后解码, 统计信令传输成功率。
- 返回:
{"snr_db", "signaling_success_rate"}
- nearlink_sdr.sim.link_sim.sim_pipeline_channel_link(frame_type: int = 2, mcs_index: int = 7, n_data_bytes: int = 10, channel_type: str = 'awgn', rician_k_db: float = 6.0, cfo_hz: float = 0.0, eq_method: str = 'none', snr_range_db: numpy.ndarray | None = None, n_frames: int = 20, sps: int = 4, seed: int = 42) dict[源代码]¶
全链路 Pipeline 仿真 — 支持多径信道、频率偏移和均衡器。
在 tx_chain 输出的 IQ 信号上依次施加:
衰落信道 (Rayleigh / Rician / 多径)
载波频率偏移
AWGN 噪声 然后可选地进行均衡, 最后送入 rx_chain 解码。
- 参数:
frame_type -- 帧类型 (1-4)。
mcs_index -- MCS 索引。
n_data_bytes -- 数据长度 (字节)。
channel_type -- "awgn" | "rayleigh" | "rician" | "multipath"。
rician_k_db -- Rician K 因子 (dB)。
cfo_hz -- 载波频率偏移 (Hz)。
eq_method -- "none" | "zf" | "mmse", 仅对衰落信道有效。
snr_range_db -- Eb/N0 扫描范围。
n_frames -- 每个 SNR 点的仿真帧数。
sps -- 每符号采样数。
seed -- 随机种子。
- 返回:
{"snr_db": [...], "ber": [...], "fer": [...]}
- nearlink_sdr.sim.link_sim.sim_pipeline_link(frame_type: int = 2, mcs_index: int = 7, n_data_bytes: int = 10, snr_range_db: numpy.ndarray | None = None, n_frames: int = 20, sps: int = 4, seed: int = 42) dict[源代码]¶
使用 tx_chain / rx_chain 的全链路端到端仿真。
- 参数:
frame_type -- 帧类型 (1-4)
mcs_index -- MCS 索引
n_data_bytes -- 数据长度 (字节)
snr_range_db -- Eb/N0 扫描范围 (dB)
n_frames -- 每个 SNR 点的仿真帧数
sps -- 每符号采样数
seed -- 随机种子
- 返回:
{"snr_db": [...], "ber": [...], "fer": [...]}
- nearlink_sdr.sim.link_sim.sim_polar_coded_psk_link(num_info_bits: int = 1000, mod_type: str = 'BPSK', rate_str: str = '1/2', code_length: int = 256, snr_range_db: numpy.ndarray | None = None, sps: int = 4, seed: int = 42) dict[源代码]¶
Polar编码PSK链路仿真。
流程: 信息比特 → Polar编码 → BPSK/QPSK调制 → AWGN信道 → 解调(软判决LLR) → SC解码 → BER
- 返回:
{"snr_db": [...], "ber": [...], "fer": [...]}
- nearlink_sdr.sim.link_sim.sim_psk_link(num_data_bits: int = 1000, mod_type: str = 'QPSK', frame_type: int = 2, snr_range_db: numpy.ndarray | None = None, sps: int = 4, seed: int = 42) dict[源代码]¶
帧类型2/3/4 PSK无编码链路仿真。
流程: 数据 → PSK调制 → AWGN信道 → PSK解调 → BER (前导和同步信号作为独立信号段,不影响数据BER)
- 返回:
{"snr_db": [...], "ber": [...]}
- nearlink_sdr.sim.link_sim.sim_qos_amc_adaptive(snr_sequence: numpy.ndarray | None = None, n_frames_per_snr: int = 20, payload_size: int = 10, channel_type: str = 'awgn', rician_k_db: float = 6.0, seed: int = 42) dict[源代码]¶
QoS 链路质量跟踪驱动的 AMC 自适应仿真。
模拟 SNR 随时间变化的场景, QoS 管理器根据 FER 反馈自动调整 MCS, 验证 AMC 跟踪性能。
- 返回:
{ "snr_trace": [...], "mcs_trace": [...], "fer_trace": [...], "throughput_trace": [...], }
- nearlink_sdr.sim.link_sim.sim_qos_arq_link(snr_range_db: numpy.ndarray | None = None, n_frames: int = 50, mcs_index: int = 7, payload_size: int = 10, max_retries: int = 3, channel_type: str = 'awgn', rician_k_db: float = 6.0, seed: int = 42) dict[源代码]¶
QoS 管理器驱动的 ARQ 重传链路仿真。
使用 QosLink 封装实现自动 ARQ 重传, 对比无 QoS 管理时的 FER。 验证 QosManager 的序列号管理、重传决策和链路质量跟踪。
- 返回:
{ "snr_db": [...], "fer_no_arq": [...], # 无重传 FER "fer_qos_arq": [...], # QoS ARQ FER "avg_transmissions": [...], # 平均每帧传输次数 "throughput_no_arq": [...], "throughput_qos_arq": [...], }
- nearlink_sdr.sim.link_sim.sim_qos_flow_control(n_frames: int = 100, burst_size: int = 10, snr_db: float = 15.0, mcs_index: int = 7, payload_size: int = 10, high_watermark: int = 8, low_watermark: int = 2, channel_type: str = 'awgn', rician_k_db: float = 6.0, seed: int = 42) dict[源代码]¶
QoS 流控机制仿真。
模拟突发数据到达场景, 验证流控背压机制对缓冲区占用和丢包的影响。
- 返回:
{ "frame_idx": [...], "buffer_occupancy": [...], "flow_ctrl_bit": [...], "paused": [...], "tx_success": [...], }
- nearlink_sdr.sim.link_sim.sim_secure_link(snr_range_db: numpy.ndarray | None = None, n_frames: int = 50, mcs_index: int = 7, payload_size: int = 10, channel_type: str = 'awgn', cfo_hz: float = 0.0, eq_method: str = 'none', rician_k_db: float = 6.0, seed: int = 42) dict[源代码]¶
接入 → 配对 → 加密数据传输端到端仿真。
模拟完整的安全通信建立过程:
接入建链 (run_access_procedure)
配对密钥协商 (run_pairing_procedure)
加密数据帧经 PHY 管道传输
- 返回:
{"snr_db", "fer", "access_ok", "pairing_ok", "encrypted": True}
- nearlink_sdr.sim.link_sim.sim_sir_sweep(sir_range_db: numpy.ndarray | None = None, n_interferers: int = 1, snr_db: float = 20.0, n_frames: int = 100, mcs_index: int = 7, payload_size: int = 20, channel_type: str = 'awgn', seed: int = 42) dict[源代码]¶
SIR 扫描仿真: 固定干扰用户数, 扫描 SIR 下的 FER。
- 参数:
sir_range_db -- SIR 扫描范围 (dB)。
n_interferers -- 干扰用户数。
snr_db -- 噪声 SNR (dB)。
n_frames -- 每个 SIR 点帧数。
mcs_index -- MCS 索引。
payload_size -- 载荷字节数。
channel_type -- 信道类型。
seed -- 随机种子。
- 返回:
{"sir_db": [...], "fer": [...], "sinr_db": [...]}
- nearlink_sdr.sim.link_sim.sim_superframe_capacity(smf_interval: int = 800, slice_duration: int = 50, slice_gap: int | None = None, max_links: int = 20) dict[源代码]¶
超帧容量分析: 逐步增加链路直到出现时间片冲突。
- 参数:
smf_interval -- SMF 间隔 (基础时隙)。
slice_duration -- 每条链路时间片持续长度 (调度时隙)。
slice_gap -- 相邻链路的偏移间距 (调度时隙, 默认等于 slice_duration)。 当 gap < slice_duration 时, 链路时间片将发生重叠。
max_links -- 最大测试链路数。
- 返回:
{"n_links": [...], "n_conflicts": [...], "max_no_conflict": int, "utilization": [...]}