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

别再死记硬背了!用Python+Matplotlib动态演示5G NR调度中的Slot与Mini-Slot

用Python动态可视化5G NR调度Slot与Mini-Slot的实战解析在5G NR的学习过程中帧结构和调度机制往往是让开发者最头疼的部分。那些抽象的时隙图、晦涩的协议文档以及复杂的调度算法常常让人望而却步。但如果我们换一种方式——用代码动态生成这些调度过程一切就会变得直观起来。本文将带你用Python和Matplotlib从零构建一个5G NR调度可视化工具让Slot和Mini-Slot的调度过程活起来。1. 环境准备与基础概念在开始编码前我们需要明确几个核心概念。5G NR的调度单位主要分为两种Slot-based和Non-slot based即Mini-Slot。Slot是固定14个OFDM符号的时域单位而Mini-Slot则更加灵活支持2、4、7个符号的配置。这种灵活性使得5G能够更好地适应不同业务的需求比如低时延的URLLC业务就更适合使用Mini-Slot。首先安装必要的Python库pip install matplotlib numpy ipywidgets我们将使用以下核心组件Matplotlib用于绘制动态的帧结构图NumPy处理数值计算IPyWidgets创建交互式控件提示建议在Jupyter Notebook中运行本文代码以获得最佳交互体验。2. 构建TDD帧结构可视化让我们从最基础的TDD帧结构开始。假设我们使用30kHz子载波间隔上下行配比为1:4即1个下行Slot后跟4个上行Slot。首先定义Slot类型import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Rectangle from ipywidgets import interact, IntSlider # Slot类型定义 SLOT_DL 0 # 纯下行 SLOT_UL 1 # 纯上行 SLOT_FLEX 2 # 灵活Slot接下来我们创建一个函数来绘制单个Slot的结构def draw_slot(ax, slot_type, slot_idx, num_symbols14): colors {DL: #1f77b4, UL: #ff7f0e, GP: #2ca02c, SRS: #d62728} if slot_type SLOT_DL: for i in range(num_symbols): ax.add_patch(Rectangle((i, slot_idx), 1, 1, colorcolors[DL])) elif slot_type SLOT_UL: for i in range(num_symbols): ax.add_patch(Rectangle((i, slot_idx), 1, 1, colorcolors[UL])) else: # 灵活Slot # 假设前3个符号下行接着8个符号上行最后3个GP/SRS ax.add_patch(Rectangle((0, slot_idx), 3, 1, colorcolors[DL])) ax.add_patch(Rectangle((3, slot_idx), 8, 1, colorcolors[UL])) ax.add_patch(Rectangle((11, slot_idx), 2, 1, colorcolors[GP])) ax.add_patch(Rectangle((13, slot_idx), 1, 1, colorcolors[SRS])) ax.set_xlim(0, num_symbols) ax.set_ylim(0, 5) ax.set_xticks(np.arange(num_symbols)) ax.set_yticks([]) ax.set_title(fSlot {slot_idx 1} Structure)通过这个基础函数我们可以轻松扩展出完整的帧结构可视化def visualize_frame_structure(): fig, ax plt.subplots(figsize(12, 4)) # 1:4 TDD配置1个下行Slot 4个上行Slot slot_types [SLOT_DL, SLOT_UL, SLOT_UL, SLOT_UL, SLOT_UL] for i, slot_type in enumerate(slot_types): draw_slot(ax, slot_type, i) plt.tight_layout() plt.show() visualize_frame_structure()3. 动态调度过程模拟理解了静态帧结构后我们来模拟动态调度过程。关键是要展示基站(gNB)如何根据UE反馈的CQI等信息进行调度决策。首先定义CQI与MCS的对应关系CQI索引调制方式编码率频谱效率(bits/symbol)1QPSK0.0760.1522QPSK0.1170.234............964QAM0.6013.6041064QAM0.7024.212在代码中我们可以这样实现CQI到MCS的映射cqi_to_mcs { 1: {modulation: QPSK, code_rate: 0.076, efficiency: 0.152}, 2: {modulation: QPSK, code_rate: 0.117, efficiency: 0.234}, # ... 中间省略 ... 9: {modulation: 64QAM, code_rate: 0.601, efficiency: 3.604}, 10: {modulation: 64QAM, code_rate: 0.702, efficiency: 4.212} } def get_mcs(cqi): return cqi_to_mcs.get(min(max(cqi, 1), 10), cqi_to_mcs[1])接下来我们创建一个动态调度模拟器def simulate_scheduling(cqi5, use_mini_slotFalse): fig, (ax1, ax2) plt.subplots(2, 1, figsize(12, 8)) # 绘制帧结构 slot_types [SLOT_DL, SLOT_UL, SLOT_UL, SLOT_UL, SLOT_FLEX] for i, slot_type in enumerate(slot_types): draw_slot(ax1, slot_type, i) # 根据CQI决定资源分配 mcs_info get_mcs(cqi) num_rbs min(int(cqi * 2.5), 100) # 模拟RB分配 # 绘制资源分配 if use_mini_slot: # Mini-Slot分配2符号 ax1.add_patch(Rectangle((4, 0), 2, 1, colorred, alpha0.3)) ax1.text(4.5, 0.5, fMCS: {mcs_info[modulation]}\nRBs: {num_rbs}, hacenter, vacenter, colorblack) else: # 常规Slot分配 ax1.add_patch(Rectangle((0, 0), 14, 1, colorred, alpha0.3)) ax1.text(7, 0.5, fMCS: {mcs_info[modulation]}\nRBs: {num_rbs}, hacenter, vacenter, colorblack) # 绘制CQI变化曲线 ax2.plot([1, 2, 3, 4, 5], [3, cqi, 7, 5, 8], o-) ax2.set_ylabel(CQI) ax2.set_xlabel(Time (ms)) ax2.set_title(Channel Quality Variation) ax2.set_ylim(0, 11) plt.tight_layout() plt.show() interact(simulate_scheduling, cqiIntSlider(min1, max10, step1, value5), use_mini_slotFalse)4. Mini-Slot的灵活调度实现Mini-Slot是5G NR引入的重要特性特别适合低时延场景。让我们实现一个对比可视化展示Slot和Mini-Slot的差异。首先定义Mini-Slot的配置参数mini_slot_configs { 2符号: {length: 2, color: #9467bd}, 4符号: {length: 4, color: #8c564b}, 7符号: {length: 7, color: #e377c2} }然后创建一个对比可视化函数def compare_slot_vs_minislot(): fig, (ax1, ax2) plt.subplots(1, 2, figsize(14, 4)) # 标准Slot调度 draw_slot(ax1, SLOT_DL, 0) ax1.add_patch(Rectangle((0, 0), 14, 1, colorred, alpha0.3)) ax1.set_title(Slot-Based Scheduling (14 symbols)) # Mini-Slot调度 draw_slot(ax2, SLOT_DL, 0) for i, (name, config) in enumerate(mini_slot_configs.items()): start i * 4 ax2.add_patch(Rectangle((start, 0), config[length], 1, colorconfig[color], alpha0.5)) ax2.text(start config[length]/2, 0.5, name, hacenter, vacenter) ax2.set_title(Mini-Slot Scheduling) plt.tight_layout() plt.show() compare_slot_vs_minislot()这个对比清晰地展示了Mini-Slot如何实现更细粒度的资源分配。在实际应用中基站会根据业务需求动态选择调度方式eMBB业务通常使用标准Slot追求高吞吐量URLLC业务倾向使用Mini-Slot满足低时延要求mMTC业务可能混合使用根据设备状态调整5. 完整调度系统模拟现在我们将所有组件整合成一个完整的调度系统模拟器。这个模拟器将展示UE测量并上报CQIgNB根据CQI选择MCS和资源分配方式动态决定使用Slot还是Mini-Slot可视化整个调度决策过程def full_scheduling_simulation(cqi_history[5, 7, 4, 6, 8]): fig, (ax1, ax2) plt.subplots(2, 1, figsize(14, 10)) # 绘制帧结构 slot_types [SLOT_DL, SLOT_UL, SLOT_FLEX, SLOT_DL, SLOT_UL] for i, slot_type in enumerate(slot_types): draw_slot(ax1, slot_type, i) # 模拟调度决策 for i, cqi in enumerate(cqi_history): mcs_info get_mcs(cqi) # 根据CQI决定使用Slot还是Mini-Slot use_mini_slot cqi 5 # 信道质量差时使用Mini-Slot快速重传 if use_mini_slot: # 随机选择一个Mini-Slot配置 config list(mini_slot_configs.values())[i % 3] length config[length] start i * 3 % 12 # 随机起始位置 ax1.add_patch(Rectangle((start, i), length, 1, colorconfig[color], alpha0.7)) ax1.text(start length/2, i 0.5, fCQI:{cqi}\n{config[length]}sym, hacenter, vacenter) else: ax1.add_patch(Rectangle((0, i), 14, 1, colorred, alpha0.3)) ax1.text(7, i 0.5, fCQI:{cqi}\nSlot, hacenter, vacenter) # 绘制CQI变化曲线 ax2.plot(range(len(cqi_history)), cqi_history, o-) ax2.set_ylabel(CQI) ax2.set_xlabel(Time (ms)) ax2.set_title(Channel Quality Indicator (CQI) over Time) ax2.set_ylim(0, 11) ax2.grid(True) plt.tight_layout() plt.show() # 交互式控件 cqi_sliders [IntSlider(min1, max10, value5) for _ in range(5)] interact(full_scheduling_simulation, cqi_historycqi_sliders);在实际项目中这种可视化工具可以帮助开发者直观理解调度算法行为调试调度参数配置向非技术人员解释5G调度原理教学演示核心概念6. 扩展与优化方向我们的基础可视化框架已经完成但还有多种优化方向可以探索性能优化技巧使用Matplotlib的动画API实现平滑过渡添加更多真实5G参数配置选项实现多UE竞争资源场景教学功能增强添加逐步解释注释实现错误场景模拟如HARQ重传对比不同子载波间隔的影响# 示例添加动画效果 from matplotlib.animation import FuncAnimation def animate_scheduling(frame): ax.clear() cqi frame % 10 1 # 模拟CQI变化 simulate_scheduling_static(cqi, frame % 2 0) fig, ax plt.subplots(figsize(12, 6)) ani FuncAnimation(fig, animate_scheduling, frames20, interval500) plt.close()对于希望深入学习的开发者可以考虑以下扩展集成更多3GPP标准参数添加物理层过程模拟如信道编码实现跨层优化可视化RLC/MAC互动构建Web交互界面使用Plotly Dash注意完整实现这些扩展需要更深入的5G协议知识建议参考3GPP 38系列规范。通过这个项目我们不仅掌握了5G NR调度的核心概念还构建了一个强大的可视化分析工具。这种通过代码学习协议的方法相比传统理论学习更加高效和直观。

相关文章:

别再死记硬背了!用Python+Matplotlib动态演示5G NR调度中的Slot与Mini-Slot

用Python动态可视化5G NR调度:Slot与Mini-Slot的实战解析 在5G NR的学习过程中,帧结构和调度机制往往是让开发者最头疼的部分。那些抽象的时隙图、晦涩的协议文档,以及复杂的调度算法,常常让人望而却步。但如果我们换一种方式——…...

OpenCV实战:用SAD、SSD、SGBM三种算法搞定双目立体匹配(附完整C++代码与效果对比)

OpenCV双目立体匹配实战:SAD、SSD、SGBM算法深度解析与性能优化 双目立体视觉技术正在机器人导航、三维重建等领域掀起新的效率革命。当我在去年参与无人机避障项目时,曾花费两周时间反复调试立体匹配算法参数——那段经历让我深刻意识到,选…...

5步精通:免费AI图像视频超分辨率放大工具完全指南

5步精通:免费AI图像视频超分辨率放大工具完全指南 【免费下载链接】Waifu2x-Extension-GUI Video, Image and GIF upscale/enlarge(Super-Resolution) and Video frame interpolation. Achieved with Waifu2x, Real-ESRGAN, Real-CUGAN, RTX Video Super Resolution…...

Qwen3-8B应用案例:如何用它快速生成营销文案和产品介绍

Qwen3-8B应用案例:如何用它快速生成营销文案和产品介绍 1. 引言:当营销文案遇上AI助手 你有没有过这样的经历?产品经理催着要一份产品介绍,市场部急着要一篇营销文案,而你盯着空白的文档,大脑一片空白。传…...

别再傻傻分不清了!嵌入式开发中IIC、SPI、CAN、IIS四大通信总线到底怎么选?

嵌入式开发四大通信总线实战选型指南:IIC、SPI、CAN、IIS深度对比 当你在设计一个需要连接温度传感器的智能家居终端,或是开发车载音响系统的音频模块时,面对琳琅满目的通信协议选项,是否曾陷入选择困难?IIC的简洁、S…...

EcomGPT电商大模型保姆级教程:从build/start.sh启动到多任务切换全流程图解

EcomGPT电商大模型保姆级教程:从build/start.sh启动到多任务切换全流程图解 1. 引言:电商人的AI助手,到底有多好用? 如果你是做电商的,每天是不是都在为这些事头疼? 给几百个商品写标题、写描述&#xf…...

别再傻傻分不清!一张图看懂IDS、IPS、防火墙、网闸这些安全设备到底该放哪儿

企业网络安全设备部署实战指南:从拓扑设计到纵深防御 第一次接触企业级网络拓扑时,那些密密麻麻的连线图和各式各样的安全设备图标总让人望而生畏。作为刚入行的网络安全工程师,最常遇到的困惑莫过于:IDS该放在核心交换机旁边还是…...

Java后端开发实战:手把手教你用e签宝API搞定电子合同签署(含回调处理与Token优化)

Java后端开发实战:e签宝API深度集成与电子合同签署优化指南 在数字化转型浪潮中,电子合同已成为企业服务升级的标配功能。作为Java开发者,如何高效集成第三方电子签章平台,同时确保系统稳定性和业务连贯性,是提升SaaS…...

别再死记硬背AES列混合矩阵了!手把手带你从GF(2⁸)多项式推导出那个‘神秘’的4x4矩阵

从多项式运算到矩阵表示:彻底理解AES列混合的数学本质 第一次接触AES列混合时,那个神秘的4x4矩阵总是让人摸不着头脑。为什么是这些特定数字?为什么计算规则如此特殊?本文将带你从有限域GF(2⁸)的多项式运算出发,一步…...

不用微软商店!5分钟搞定Win10 OpenSSH离线安装(附GitHub下载指南)

绕过微软商店:Win10 OpenSSH离线安装全攻略 每次在Windows 10的可选功能里尝试安装OpenSSH时,那个转圈圈进度条是不是总让你提心吊胆?微软商店的安装方式不仅速度慢,还经常莫名其妙失败。作为技术爱好者,我们完全有更…...

从PWM到BCM:深入浅出讲解HUB75 LED屏如何实现256级灰度与全彩动画

从PWM到BCM:HUB75 LED屏的256级灰度与全彩动画实现指南 当你在深夜调试HUB75 LED屏时,是否遇到过这样的困境:明明代码逻辑正确,屏幕却只能显示几种基础颜色,动画效果更是惨不忍睹?这不是你的技术问题&…...

别再只调参了!用Python从CWRU轴承数据里手动提取这9类特征,喂给XGBoost效果有多炸?

从振动信号到精准诊断:手工特征工程在轴承故障预测中的实战突破 轴承作为机械设备中的核心部件,其健康状态直接影响整个系统的运行安全。传统故障诊断方法往往陷入"调参陷阱"——过度依赖模型参数优化而忽视数据本身的物理意义。本文将带您深入…...

保姆级教程:实时口罩检测-通用镜像零基础入门,3步完成口罩佩戴检测

保姆级教程:实时口罩检测-通用镜像零基础入门,3步完成口罩佩戴检测 1. 引言:为什么你需要这个工具? 想象一下,你是一家商场的物业经理,每天需要人工检查监控,确保进入的顾客都佩戴了口罩。或者…...

3分钟上手Applite:让Mac软件管理变得像逛应用商店一样简单

3分钟上手Applite:让Mac软件管理变得像逛应用商店一样简单 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 还在为Mac上复杂的命令行安装而烦恼吗?Appli…...

PyTorch 2.6 镜像使用全攻略:Jupyter和SSH任你选

PyTorch 2.6 镜像使用全攻略:Jupyter和SSH任你选 1. 镜像简介与环境准备 PyTorch 2.6镜像是一个开箱即用的深度学习开发环境,预装了PyTorch 2.6框架和CUDA工具包,能够直接调用GPU加速模型训练和推理。这个镜像特别适合需要快速搭建深度学习…...

仓颉语言深度前瞻:华为自研编程语言如何改变鸿蒙开发?

仓颉语言深度前瞻:华为自研编程语言如何改变鸿蒙开发?当鸿蒙遇见仓颉,一场编程语言的范式革命正在开启引言:仓颉造字,鸿蒙新生 2024年6月21日,华为正式发布了自研编程语言——仓颉(Cangjie&…...

无需GPU!DeepSeek-R1-Distill-Qwen-1.5B在Mac上的完美运行方案

无需GPU!DeepSeek-R1-Distill-Qwen-1.5B在Mac上的完美运行方案 1. 模型简介与优势 1.1 DeepSeek-R1-Distill-Qwen-1.5B核心特点 DeepSeek-R1-Distill-Qwen-1.5B是专为边缘计算优化的轻量级语言模型,具有以下显著优势: 硬件友好设计&#…...

别再手动敲命令了!用Ansible一键自动化部署Oracle 19c到Oracle Linux 7.9

从手工到工业级:Ansible自动化部署Oracle 19c全攻略 在传统数据库部署中,运维工程师需要逐台服务器执行上百条命令,稍有不慎就会因人为失误导致安装失败。而现代DevOps实践中,Ansible以其无代理架构和声明式语法,正在彻…...

SystemVerilog里用disable fork踩过的坑:一个fork套娃引发的‘误杀’血案

SystemVerilog中disable fork的精确控制:从"误杀"到线程安全 最近在调试一个复杂的验证环境时,遇到了一个诡异的并发问题:某些后台监控任务会莫名其妙地消失。经过几天的追踪,发现问题出在一个看似无害的disable fork语…...

暗黑3游戏自动化难题的终极解决方案:D3KeyHelper宏工具深度解析

暗黑3游戏自动化难题的终极解决方案:D3KeyHelper宏工具深度解析 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 在暗黑破坏神3的高强度刷…...

手把手教你用Habitat-Lab YAML配置文件,5分钟定制你的第一个Embodied AI智能体(含代码片段)

从零开始构建Habitat-Lab智能体:YAML配置实战指南 Embodied AI(具身人工智能)正在重塑机器人学习和虚拟智能体的开发方式。Habitat-Lab作为Meta AI推出的开源框架,为研究者提供了高度可配置的虚拟环境,让智能体能够通过…...

SillyTavern终极指南:5步打造专业级AI对话前端

SillyTavern终极指南:5步打造专业级AI对话前端 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 还在为复杂的AI对话系统配置而烦恼吗?SillyTavern作为一款专为高级用…...

FitGirl游戏启动器:3分钟掌握游戏下载与管理的终极指南

FitGirl游戏启动器:3分钟掌握游戏下载与管理的终极指南 【免费下载链接】Fitgirl-Repack-Launcher An Electron launcher designed specifically for FitGirl Repacks, utilizing pure vanilla JavaScript, HTML, and CSS for optimal performance and customizatio…...

别再调Prompt了!SITS2026圆桌重磅共识:下一代智能生成将绕过自然语言,直连IDE AST与编译器IR(附3家头部厂商技术路线图)

第一章:SITS2026圆桌:智能代码生成趋势 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026圆桌论坛上,来自GitHub、Tabnine、DeepMind与国内大模型开源社区的七位核心研发者共同指出:智能代码生成正从“单轮补全”迈向“…...

如何彻底清理Windows软件残留?Bulk Crap Uninstaller完整指南教你快速搞定!

如何彻底清理Windows软件残留?Bulk Crap Uninstaller完整指南教你快速搞定! 【免费下载链接】Bulk-Crap-Uninstaller Remove large amounts of unwanted applications quickly. 项目地址: https://gitcode.com/gh_mirrors/bu/Bulk-Crap-Uninstaller …...

突破限制:百度网盘直链解析工具助你实现高速下载

突破限制:百度网盘直链解析工具助你实现高速下载 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘下载速度慢而烦恼吗?🚀 今天…...

Win11升级翻车实录:从TPM报错到桌面黑屏,我遇到的坑和解决办法都在这了

Windows 11升级避坑指南:从硬件检查到系统优化的完整方案 最近身边不少朋友都在讨论Windows 11的新界面和功能,但升级过程却并非一帆风顺。作为一个经历过完整升级流程的用户,我想分享一些实战经验,帮助大家避免常见的"翻车…...

给爸妈买手机电脑,别再被屏幕参数忽悠了!5分钟搞懂LCD、OLED到底怎么选

给爸妈买手机电脑,别再被屏幕参数忽悠了!5分钟搞懂LCD、OLED到底怎么选 每次陪父母去商场买电子产品,总能看到他们对着五花八门的屏幕参数一脸茫然。销售员滔滔不绝地讲着"OLED色彩更鲜艳"、"IPS广视角更清晰"&#xff0…...

用Python和NumPy手把手复现DCO-OFDM与ACO-OFDM:从DFT对称性到可见光通信仿真

用Python和NumPy手把手复现DCO-OFDM与ACO-OFDM:从DFT对称性到可见光通信仿真 在可见光通信(VLC)系统中,如何高效地将数字信号转换为适合光强度调制的非负实信号,一直是工程师们关注的焦点。DCO-OFDM和ACO-OFDM作为两种…...

别再只调参了!深入理解PCL点云滤波:体素与统计滤波背后的数学与视觉影响

点云滤波的艺术:从数学原理到参数调优的深度实践指南 当你在处理激光雷达数据时,是否曾遇到过这样的困惑——为什么同样的滤波参数在不同场景下效果差异巨大?为什么降采样后点云边缘变得模糊不清?本文将带你深入PCL点云滤波的核心…...