当前位置: 首页 > article >正文

告别理论:用Python复现5G NR PRACH/PUSCH功率控制,验证你的协议理解

用Python实战5G NR功率控制从协议公式到可视化仿真在5G NR系统中功率控制算法直接影响着上行链路的覆盖范围和终端功耗。许多开发者虽然熟悉协议文档中的公式却难以将这些抽象描述转化为可验证的代码实现。本文将带您用Python构建一个完整的功率控制仿真器涵盖PRACH和PUSCH两大核心场景。1. 环境搭建与基础模型1.1 协议参数建模我们需要先构建一个参数容器来模拟SIB1的配置。以下代码定义了一个参数类包含所有必要的配置项class NRPowerControlParams: def __init__(self): # PRACH相关参数 self.preambleReceivedTargetPower -100 # dBm self.powerRampingStep 2 # dB self.msg1_SubcarrierSpacing 15 # kHz self.ss_PBCH_BlockPower -6 # dBm self.msg3_DeltaPreamble 4 # 配置值(实际值配置值*2) # PUSCH相关参数 self.p0_NominalWithGrant -76 # dBm self.p0_NominalWithoutGrant -90 # dBm self.msg3_Alpha 1.0 # 比例因子 self.deltaMCS enabled # Ks1.25 # 路损测量 self.higher_layer_filtered_RSRP -116 # dBm1.2 前导格式判定逻辑PRACH功率控制的第一步是确定前导格式及其对应的DELTA_PREAMBLE值。我们需要实现一个前导格式判定器def determine_preamble_format(config_index): # 简化的前导格式判断逻辑 if config_index 64: return Format 0, 0 elif 64 config_index 128: return Format 1, 0 elif 128 config_index 192: return Format 2, 0 elif 192 config_index 256: return Format 3, 3 * get_mu(config_index) else: return Format 4, 3 * get_mu(config_index) def get_mu(config_index): # 根据配置索引确定μ值 if config_index % 4 0: return 0 # 15kHz elif config_index % 4 1: return 1 # 30kHz elif config_index % 4 2: return 2 # 60kHz else: return 3 # 120kHz2. PRACH功率控制实现2.1 核心计算公式实现PRACH发射功率的计算公式如下PRACH_Power (preambleReceivedTargetPower DELTA_PREAMBLE (PREAMBLE_POWER_RAMPING_COUNTER - 1) * powerRampingStep) (ss_PBCH_BlockPower - higher_layer_filtered_RSRP)对应的Python实现def calculate_prach_power(params, config_index, ramp_counter): format_name, delta_preamble determine_preamble_format(config_index) # 计算目标接收功率部分 target_part (params.preambleReceivedTargetPower delta_preamble (ramp_counter - 1) * params.powerRampingStep) # 计算路损补偿部分 path_loss params.ss_PBCH_BlockPower - params.higher_layer_filtered_RSRP total_power target_part path_loss return total_power, format_name2.2 重传场景模拟PRACH功率会随着重传次数增加而逐步提升。我们可以模拟这一过程import matplotlib.pyplot as plt def simulate_prach_retransmission(params, config_index, max_retries): powers [] for counter in range(1, max_retries 1): power, _ calculate_prach_power(params, config_index, counter) powers.append(power) plt.figure(figsize(10, 6)) plt.plot(range(1, max_retries 1), powers, markero) plt.xlabel(Transmission Attempt) plt.ylabel(Transmit Power (dBm)) plt.title(PRACH Power Ramping Simulation) plt.grid(True) plt.show() return powers提示实际系统中PREAMBLE_POWER_RAMPING_COUNTER会在每次重传时递增直到达到最大重传次数或收到响应。3. PUSCH功率控制实现3.1 三种配置场景处理PUSCH功率控制根据j值分为三种情况场景触发条件P0来源α来源j0Msg3或未配置P0-PUSCH-AlphaSetpreambleReceivedTargetPowermsg3-Alpha或1.0j1半静态调度p0-NominalWithoutGrantConfiguredGrantConfigj2动态调度p0-NominalWithGrantp0-AlphaSetsdef get_pusch_parameters(params, j_value): if j_value 0: p0 params.preambleReceivedTargetPower params.msg3_DeltaPreamble * 2 alpha params.msg3_Alpha if hasattr(params, msg3_Alpha) else 1.0 elif j_value 1: p0 params.p0_NominalWithoutGrant alpha 0.8 # 假设值 else: # j2 p0 params.p0_NominalWithGrant alpha 0.8 # 假设值 return p0, alpha3.2 完整PUSCH功率计算PUSCH功率计算公式包含多个分量def calculate_pusch_power(params, j_value, rb_count, mcs_index, tpc_command): p0, alpha get_pusch_parameters(params, j_value) # 路损补偿 path_loss params.ss_PBCH_BlockPower - params.higher_layer_filtered_RSRP # MCS调整量 delta_tf calculate_delta_tf(params, mcs_index, rb_count) # 功率调整状态 delta_power tpc_command # 简化处理 # 最终功率计算 power (p0 10 * math.log10(rb_count) alpha * path_loss delta_tf delta_power) return power4. 可视化分析与验证4.1 功率随路损变化曲线def plot_power_vs_pathloss(params, rb_count10): path_losses range(80, 151, 5) # 80-150dB pusch_powers [] for pl in path_losses: params.higher_layer_filtered_RSRP params.ss_PBCH_BlockPower - pl power calculate_pusch_power(params, 2, rb_count, 10, 0) pusch_powers.append(power) plt.figure(figsize(10, 6)) plt.plot(path_losses, pusch_powers) plt.xlabel(Path Loss (dB)) plt.ylabel(PUSCH Transmit Power (dBm)) plt.title(PUSCH Power vs Path Loss) plt.grid(True) plt.show()4.2 协议一致性验证我们可以将仿真结果与协议示例进行对比验证def verify_prach_example(): params NRPowerControlParams() params.preambleReceivedTargetPower -100 params.powerRampingStep 2 params.ss_PBCH_BlockPower -6 params.higher_layer_filtered_RSRP -116 # 示例配置 config_index 202 ramp_counter 1 power, fmt calculate_prach_power(params, config_index, ramp_counter) print(fCalculated PRACH power: {power:.1f} dBm (Format: {fmt})) # 预期结果10dBm (Format B4) 或 15dBm (Format C2)通过这样的代码实现和可视化分析开发者可以直观地理解5G NR功率控制机制验证自己对协议的理解是否正确并为实际系统调试提供参考依据。

相关文章:

告别理论:用Python复现5G NR PRACH/PUSCH功率控制,验证你的协议理解

用Python实战5G NR功率控制:从协议公式到可视化仿真 在5G NR系统中,功率控制算法直接影响着上行链路的覆盖范围和终端功耗。许多开发者虽然熟悉协议文档中的公式,却难以将这些抽象描述转化为可验证的代码实现。本文将带您用Python构建一个完整…...

用Multisim和74LS192芯片,我手搓了一个能自动计数的停车场车位模型

用Multisim和74LS192芯片构建智能停车场计数系统 停车场车位管理系统是数字电路教学的经典案例,它能将抽象的计数器原理转化为看得见摸得着的实用装置。本文将手把手教你如何用Multisim仿真软件和74LS192芯片,搭建一个能自动统计车位使用情况的完整系统…...

【实战解析】基于YOLOv3与TensorFlow/Keras的船舶检测模型调优与部署指南

1. 从零开始搭建船舶检测环境 第一次接触YOLOv3和TensorFlow/Keras时,我花了两周时间才把环境搭好。现在回想起来,其实只要掌握几个关键点,半小时就能搞定。先说说我的硬件配置:一台搭载RTX 2080 Ti的台式机,32GB内存。…...

90% 的人都忽略的 OpenClaw 安装细节,避坑必看

前言 OpenClaw(小龙虾)是 2026 年热门的本地 AI 自动化工具,无需联网、无需云端账号,依托自然语言指令即可让 AI 自动处理电脑上各类重复工作,大幅提升操作效率。 安装前重要提醒(99% 失败都源于这里&…...

告别繁琐回调!OpenClaw 企业微信长连接极简对接实战

教程使用的openclaw中文版一键安装包版本 下载地址:https://openclaw.ikidi.top/api/download/package/22?promoCodeIVB807603D98 一、准备工作(企业微信端) 登录企业微信管理后台访问地址:https://work.weixin.qq.com/wework_…...

SITS2026核心洞察:AI故事创作不是“写得快”,而是“编得真”——基于278万条用户反馈的可信度建模

第一章:SITS2026核心洞察:AI故事创作不是“写得快”,而是“编得真”——基于278万条用户反馈的可信度建模 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026发布的SITS-Credibility v3.2模型中,“可信度建模”首次被定义…...

杰理之牙通话声音卡顿严重,【篇】

甚至没有声音...

杰理之DAC配成单声道输出少了一路声道输出【篇】

DAC配成单声道输出会少了一路声道输出。...

OBS智能背景移除插件:5分钟免费实现专业级虚拟背景的完整指南

OBS智能背景移除插件:5分钟免费实现专业级虚拟背景的完整指南 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: h…...

杰理之 蓝牙音频解码码率没有设置到最高影响音频音质【篇】

__set_sbc_cap_bitpool(53); //35~53之间,音箱建议直接设置为53 __set_aac_bitrate(320 * 1000);//范围131k~320K...

千问3.5-2B Node.js环境配置与项目初始化一键通教程

千问3.5-2B Node.js环境配置与项目初始化一键通教程 1. 为什么选择这个教程 如果你刚接触Node.js开发,可能已经被各种环境配置问题搞得头大。不同项目需要不同Node版本,npm包冲突频繁出现,项目结构设计也让人纠结。这个教程就是要帮你一键解…...

AI驱动的社媒运营革命,从概念到量产仅剩90天:2026奇点大会闭门报告首度公开

第一章:AI驱动的社媒运营革命,从概念到量产仅剩90天:2026奇点大会闭门报告首度公开 2026奇点智能技术大会(https://ml-summit.org) 当多模态大模型在72小时内完成从用户画像生成、内容创意构思、A/B变体批量产出,到跨平台自动适…...

生成式AI容错不是加个重试就行:深度拆解OpenAI/Anthropic/Meta内部SLO白皮书中的4类非功能性约束边界

第一章:生成式AI容错设计的本质认知与范式跃迁 2026奇点智能技术大会(https://ml-summit.org) 生成式AI的容错设计并非传统软件工程中“异常捕获降级响应”的线性延展,而是一场从确定性系统观向概率性认知范式的根本性跃迁。其本质在于承认模型输出天然…...

AI智能体在渗透测试中的实战技巧与自动化策略

1. AI智能体如何重塑渗透测试工作流 记得我第一次用AI智能体做渗透测试时,整个人都惊呆了。原本需要3天才能完成的信息收集工作,AI只用了20分钟就给出了更全面的报告。这种效率提升不是简单的量变,而是整个工作模式的质变。 传统渗透测试就…...

AI视觉测试工具深度剖析:从Applitools看智能测试的未来趋势与实战优化

1. AI视觉测试工具的技术演进与核心价值 记得我第一次接触视觉测试是在2015年,当时团队为了验证一个电商网站的响应式设计,不得不手动在20多台不同设备上反复刷新页面、截图比对。这种低效的方式让我开始寻找更智能的解决方案,直到遇见了Appl…...

从‘黑大理石’到你的研究:VIIRS夜间灯光数据(VNP46)预处理与避坑指南

从‘黑大理石’到你的研究:VIIRS夜间灯光数据(VNP46)预处理与避坑指南 深夜打开NASA的"黑大理石"(Black Marble)夜间灯光数据集,仿佛在凝视地球的脉搏。这些来自Suomi NPP卫星VIIRS传感器的数据&…...

B站视频解析API:轻松获取B站视频资源的完整解决方案

B站视频解析API:轻松获取B站视频资源的完整解决方案 【免费下载链接】bilibili-parse bilibili Video API 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse B站视频解析API是一个专为开发者和内容创作者设计的强大工具,能够快速将Bi…...

2025终极指南:如何快速掌握3D打印切片软件的5个关键步骤

2025终极指南:如何快速掌握3D打印切片软件的5个关键步骤 【免费下载链接】Cura 3D printer / slicing GUI built on top of the Uranium framework 项目地址: https://gitcode.com/gh_mirrors/cu/Cura 你是否曾经看着复杂的3D模型文件,却不知道如…...

前端响应式设计进阶:从移动优先到自适应

前端响应式设计进阶:从移动优先到自适应 一、引言:别再把响应式设计当适配 "响应式设计不就是多写几个媒体查询吗?"——我相信这是很多前端开发者常说的话。 但事实是: 好的响应式设计可以提升移动用户体验50%以上响应式…...

Windows风扇控制终极方案:FanControl让你告别噪音与过热烦恼

Windows风扇控制终极方案:FanControl让你告别噪音与过热烦恼 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trend…...

保姆级教程:用PyTorch从零搭建CNN,在CIFAR-10上实现75%+准确率

从零构建PyTorch CNN:在CIFAR-10上突破75%准确率的实战指南 当第一次接触图像分类任务时,CIFAR-10数据集就像是一个完美的 playground——它足够复杂以考验模型能力,又不会庞大到让初学者望而生畏。这个包含6万张32x32彩色图像的数据集&#…...

GSE宏编辑器:魔兽世界玩家的终极操作优化指南

GSE宏编辑器:魔兽世界玩家的终极操作优化指南 【免费下载链接】GSE-Advanced-Macro-Compiler GSE is an alternative advanced macro editor and engine for World of Warcraft. 项目地址: https://gitcode.com/gh_mirrors/gs/GSE-Advanced-Macro-Compiler …...

学术福利!AI专著生成工具深度测评,开启专著写作新体验

学术专著的主要价值在于其内容的严谨性和逻辑的完整性,然而这正是许多作者在写作过程中最难跨越的障碍。与专注单一课题的期刊论文不同,专著需要建立一个涵盖引言、理论基础、主要研究、应用扩展和结论的全面框架。各章节之间必须层层递进、环环相扣&…...

BatteryChargeLimit技术实现深度解析:Android电池健康管理的系统级解决方案

BatteryChargeLimit技术实现深度解析:Android电池健康管理的系统级解决方案 【免费下载链接】BatteryChargeLimit 项目地址: https://gitcode.com/gh_mirrors/ba/BatteryChargeLimit BatteryChargeLimit是一款基于Android平台的电池充电限制应用&#xff0c…...

【JVS更新日志】物联网、动态首页插件、在线白板插件4.15更新说明!

项目介绍 JVS是企业级数字化服务构建的基础脚手架,主要解决企业信息化项目交付难、实施效率低、开发成本高的问题,采用微服务配置化的方式,提供了低代码数据分析物联网的核心能力产品,并构建了协同办公、企业常用的管理工具等&am…...

RVC模型Anaconda环境配置详解:创建独立的Python开发环境

RVC模型Anaconda环境配置详解:创建独立的Python开发环境 每次开始一个新项目,尤其是像RVC(Retrieval-based Voice Conversion)这种涉及音频处理和机器学习的项目,最头疼的往往不是写代码,而是配环境。你是…...

暗黑2存档编辑器终极指南:5分钟掌握角色定制与物品管理

暗黑2存档编辑器终极指南:5分钟掌握角色定制与物品管理 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款专业的暗黑破坏神2存档编辑器,专为单机玩家打造,让您轻松定制游戏体验…...

通义千问2.5-7B在Windows上的完整部署流程:环境配置到成功运行

通义千问2.5-7B在Windows上的完整部署流程:环境配置到成功运行 1. 引言 1.1 为什么选择通义千问2.5-7B 通义千问2.5-7B-Instruct是阿里云2024年推出的70亿参数大语言模型,在7B量级模型中表现出色。相比其他同规模模型,它有三大优势&#x…...

Android 13 HAL开发避坑指南:用AIDL实现带回调的跨进程通信(附完整SELinux配置)

Android 13 HAL开发实战:AIDL跨进程回调的工程化实现与SELinux深度适配 在Android系统开发中,硬件抽象层(HAL)的设计往往需要处理跨进程通信(IPC)的复杂场景。当涉及到异步事件通知时,回调机制的…...

从零到一:借助 firmware-analysis-plus 快速构建固件模拟实战环境

1. 为什么你需要firmware-analysis-plus 第一次接触固件安全分析时,我对着满屏的报错信息差点崩溃。传统工具链的复杂配置就像在玩俄罗斯套娃——解压一个依赖又发现十个新依赖。直到遇到firmware-analysis-plus,这个基于firmadyne和firmware-analysis-t…...