☰
5G NR中SRS与CSI-RS信号:原理、配置与外场调优实战
2026/9/26 2:39:25 网站建设 项目流程

简介:这份PPT资料聚焦5G NR物理层中的SRS与CSI-RS两类关键参考信号,面向通信工程专业学生、无线网络优化工程师及5G协议研究者,帮助读者系统理解上行与下行信道估计、资源分配背后的信号机制。资源包内含1个pptx文件,整体约1.15MB,以图文并茂的幻灯片形式呈现,便于课堂讲解与自学梳理。内容覆盖SRS的周期性、非周期性、半持续性三种类型及其时频位置、带宽配置、天线轮询与发送周期设置,同时详解CSI-RS的NZP-CSI-RS、CSI-IM、TRS、RRM、RLM等类别与资源配置、上报参数及触发方式,并对比LTE与5G NR参考信号的差异。目前已有1701人学习下载,适合希望从协议原理到参数配置全面掌握5G NR信道测量机制的读者参考。

1. 从一份 PPT 标题说起:5G NR 里 SRS 和 CSI-RS 到底在测什么

很多人第一次看到「5G NR中SRS和CSI-RS信号」这个标题,以为是一份讲参考信号定义的课件。真到外场调优或者做 O-RAN 前传压缩的时候才会发现,这两个信号决定了整个链路能不能跑满。SRS(Sounding Reference Signal)是终端发给基站的上行探测信号,基站靠它测上行信道质量、算下行波束赋形权值;CSI-RS(Channel State Information Reference Signal)是基站发给终端的下行参考信号,终端靠它测出 CQI、PMI、RI 再上报。一个管上行探测,一个管下行测量,方向相反但共同支撑 Massive MIMO 的闭环。做基站侧算法、终端协议栈、或者网优外场的人,绕不开这两个信号的时频资源配置和功率参数。这篇笔记按「先立住原理、再动手配参数、最后讲踩坑」的顺序展开,把 PPT 里那几页图背后的工程细节补全。

2. SRS 与 CSI-RS 的时频资源映射:先搞清谁占哪个 RE

2.1 SRS 的梳状结构与周期/非周期触发

SRS 在频域上不是连续占满带宽的,而是用「梳状」(comb)结构,把频域资源按 comb 值间隔抽取。NR 里 comb 支持 comb2 和 comb4,也就是每 2 个或 4 个子载波放一个 SRS 端口。这样做的直接好处是多个终端可以在同一符号里频分复用,基站侧通过不同的 comb 偏移和循环移位区分用户。

时域上 SRS 分两类:周期 SRS(periodic)和半持续/非周期 SRS(aperiodic)。周期 SRS 通过 RRC 配置周期和偏移,适合做长期信道跟踪;非周期 SRS 由 DCI 触发,适合在业务突发前临时探测。工程上常见做法是:低速移动用户配周期 SRS,高速或突发业务用非周期触发,减少上行开销。

一个典型的 SRS 资源配置参数表:

参数含义常用取值影响
comb频域梳状间隔comb2 / comb4comb4 复用更多用户但信道估计精度下降
c-SRS小区级 SRS 带宽配置0~63决定 SRS 占用的总带宽
b-SRS用户级带宽配置0~3决定单个用户 SRS 带宽
b-hop跳频配置0~3开启后 SRS 在频域跳变,扩展探测范围
periodicity周期2/5/10/20/40/80/160/320 slot越小跟踪越及时,开销越大
nrofSymbols占用符号数1/2/4多符号用于多端口探测

配置时最容易翻车的是 c-SRS 和 b-SRS 的关系。b-SRS 必须小于等于 c-SRS,且跳频开启时 b-hop 要小于 b-SRS,否则基站侧解析不出正确的频域位置。我一般先在仿真里把 SRS 的频域起始位置和跳频图案画出来,确认和协议公式一致再上外场。

2.2 CSI-RS 的端口数与 CDM 类型选择

CSI-RS 的核心参数是端口数(1/2/4/8/12/16/24/32)和 CDM(Code Division Multiplexing)类型。NR 里 CSI-RS 支持 CDM2、CDM4、CDM8,分别对应 2、4、8 个端口在同一个 RE 组内码分复用。端口数越多,终端能测的下行信道维度越高,但 CSI-RS 开销也越大。

一个 32 端口的 CSI-RS 资源,如果配 CDM8,需要占用 4 个 RE 组,每组 8 个端口码分。实际配置时要注意:CSI-RS 的密度(density)可以是 1 或 3,密度 3 表示每个 RB 里有 3 个 CSI-RS RE,用于提升测量精度,但开销翻三倍。通常波束管理用密度 1,精细信道测量用密度 3。

# 计算 CSI-RS 在一个 slot 内的 RE 开销(简化模型) def csi_rs_overhead(prb_num, ports, cdm_type, density): # 每个 CDM 组占用的 RE 数 cdm_re = {'CDM2': 2, 'CDM4': 4, 'CDM8': 8} re_per_group = cdm_re[cdm_type] # 需要的 CDM 组数 groups = ports // re_per_group # 每个 RB 内 CSI-RS RE 总数 re_per_rb = groups * re_per_group * density total_re = re_per_rb * prb_num return total_re # 示例:100 PRB,32 端口,CDM8,密度 1 print(csi_rs_overhead(100, 32, 'CDM8', 1)) # 输出 3200

这段代码算的是 CSI-RS 在一个 slot 内占用的总 RE 数。参数说明:prb_num 是下行带宽对应的 PRB 数,ports 是 CSI-RS 端口数,cdm_type 决定码分复用方式,density 是频域密度。实际工程里这个值要和 PDSCH 的 RE 数对比,如果 CSI-RS 开销超过 5%,就要考虑降低端口数或密度。我见过有人配 32 端口 CDM8 密度 3,结果 PDSCH 速率掉了 15%,就是没算这笔账。

2.3 两者在时隙内的共存与冲突规避

SRS 在上行符号,CSI-RS 在下行符号,理论上不冲突。但 NR 的时隙格式是灵活可配的,如果配了「下行-灵活-上行」的时隙结构,灵活符号里既可能放 CSI-RS 也可能放 SRS,就需要靠 RRC 的符号级配置错开。常见做法是:把 CSI-RS 固定在下行符号的前几个符号,SRS 固定在时隙最后 1~2 个符号,中间灵活符号留给 PDSCH/PUSCH。

如果 CSI-RS 和 SRS 在同一个符号里出现(比如全灵活时隙),基站侧调度器必须保证不把同一个 RE 同时配给两者。实际排查时,如果发现终端上报的 CQI 异常低,先查 CSI-RS 的 RE 有没有被 SRS 或 PUCCH 占用,这种资源碰撞在日志里表现为 CSI 测量参考功率突变。

3. 从 RRC 参数到外场验证:SRS 和 CSI-RS 的配置落地

3.1 SRS 资源配置的 RRC 参数逐项拆解

在 NR 里,SRS 配置通过 RRC 的SRS-ConfigIE 下发。核心字段包括srs-ResourceId、nrofSRS-Ports、transmissionComb、resourceMapping、freqDomainPosition、freqDomainShift、cyclicShift、periodicityAndOffset。每个字段都影响基站侧的信道估计。

以freqDomainPosition和freqDomainShift为例,前者决定 SRS 在频域的起始 RB 位置,后者决定 comb 的偏移。如果两个用户的freqDomainShift相同且 comb 相同,就会在频域完全重叠,基站只能靠 cyclicShift 区分。cyclicShift 有 8 个取值,理论上最多支持 8 个用户正交。超过 8 个用户就要靠 comb 和频域位置再分。

# 通过 O1 接口下发 SRS 配置的示例命令(厂商无关的伪代码) # 配置一个周期 SRS,comb2,2 端口,周期 20 slot srs_config = { "srs_ResourceId": 1, "nrofSRS_Ports": 2, "transmissionComb": {"combOffset": 0, "cyclicShift": 0}, "resourceMapping": { "startPosition": 0, "nrofSymbols": 1, "repetitionFactor": 1 }, "freqDomainPosition": 0, "freqDomainShift": 0, "periodicityAndOffset": {"periodicity": 20, "offset": 5} } # 下发后检查基站侧是否收到终端的 SRS # 在基站日志里搜索 "SRS received" 和 "SRS SNR"

这段配置的关键是periodicityAndOffset的 offset 要和小区级配置对齐,否则终端发的 SRS 和基站预期的接收窗口错位,表现为基站收不到 SRS 或者 SNR 极低。参数说明:startPosition是 SRS 在时隙内的起始符号,nrofSymbols是占用符号数,repetitionFactor决定是否重复。外场调优时,我一般先把周期设大(比如 40 slot),确认链路通了再逐步减小,避免一开始就引入上行干扰。

3.2 CSI-RS 的波束管理与测量配置

CSI-RS 在 NR 里分两类用途:一类是用于波束管理的 CSI-RS(beam management),一类是用于信道测量的 CSI-RS(CSI acquisition)。波束管理用的 CSI-RS 通常配成多组窄波束,终端测量后上报最佳波束索引;信道测量用的 CSI-RS 配成宽波束,终端测 CQI/PMI/RI。

配置时通过CSI-ResourceConfig和NZP-CSI-RS-ResourceSet下发。关键参数是repetition和trs-Info。repetition设为on时,多个 CSI-RS 资源用同一个波束发送,用于终端做精细信道估计;设为off时,不同资源用不同波束,用于波束扫描。trs-Info设为true时,CSI-RS 作为跟踪参考信号(TRS),用于时频同步。

一个常见的坑是:波束管理阶段repetition配成on,终端以为所有资源都是同一个波束,不上报波束索引,导致基站无法完成波束切换。排查时看终端上报的 CSI 报告里有没有CRI(CSI-RS Resource Indicator),如果没有,先查repetition配置。

3.3 用仿真和日志验证配置是否生效

配置下发后,怎么确认 SRS 和 CSI-RS 真的按预期工作?我一般分三步:第一步,在基站侧看 SRS 的接收功率和 SNR,如果 SNR 低于 0 dB,检查终端发射功率和路径损耗;第二步,看终端上报的 CSI 报告,CQI 是否在合理范围(比如 16QAM 对应 CQI 7~9),如果 CQI 一直是 0 或 15,说明 CSI-RS 测量有问题;第三步,做吞吐量测试,对比配置前后的下行速率。

# 解析基站日志中 SRS 和 CSI-RS 的关键指标(示例) import re def parse_srs_log(log_line): # 匹配 SRS SNR 和接收功率 pattern = r'SRS.*?SNR=(-?\d+\.?\d*).*?RSSI=(-?\d+\.?\d*)' match = re.search(pattern, log_line) if match: return {'snr': float(match.group(1)), 'rssi': float(match.group(2))} return None def parse_csi_log(log_line): # 匹配 CSI 报告中的 CQI 和 RI pattern = r'CSI.*?CQI=(\d+).*?RI=(\d+)' match = re.search(pattern, log_line) if match: return {'cqi': int(match.group(1)), 'ri': int(match.group(2))} return None # 示例日志行 srs_line = "2024-01-01 10:00:00 SRS received SNR=12.5 RSSI=-85.3" csi_line = "2024-01-01 10:00:01 CSI report CQI=9 RI=2" print(parse_srs_log(srs_line)) print(parse_csi_log(csi_line))

这段脚本用于从日志里提取 SRS 和 CSI 的关键指标。参数说明:SNR 正常范围在 5~20 dB,RSSI 在 -70~-100 dBm;CQI 9 对应 16QAM,RI 2 表示两层 MIMO。如果 SRS SNR 持续低于 0 dB,先查终端是否真的发了 SRS,再看基站接收通道有没有问题。如果 CQI 一直是 15 但吞吐量上不去,可能是 RI 配死了,终端没上报正确的层数。

4. 避坑与排查:SRS 和 CSI-RS 配置中最容易翻车的五个点

4.1 现象:终端不上报 CSI,CQI 始终为 0

原因:CSI-RS 资源配置里的resourceType设成了aperiodic,但基站没有发触发 DCI,终端一直在等触发信号。或者CSI-ReportConfig里的reportQuantity设成了none,终端根本不计算 CSI。

解决:先确认resourceType是periodic还是aperiodic。如果是aperiodic,检查 DCI format 0_1 或 0_2 里的 CSI request 字段是否置位。如果是periodic,检查CSI-ReportConfig的reportQuantity是否配成了cri-RI-PMI-CQI之类的有效值。我遇到过有人把reportQuantity配成none做测试,忘了改回来,排查了半天。

4.2 现象:SRS 接收 SNR 正常但上行吞吐量低

原因:SRS 只用于信道探测,不承载数据。上行吞吐量低可能是 PUSCH 的 MCS 配置保守,或者 SRS 的周期太长导致信道估计过时。如果终端移动速度快,SRS 周期 40 slot 以上,基站拿到的信道信息已经过期,调度器只能降 MCS。

解决:把 SRS 周期从 40 slot 降到 10 或 20 slot,观察上行 MCS 是否提升。同时检查b-hop是否开启,跳频能扩展探测带宽,但会引入额外的信道估计复杂度。如果终端高速移动,建议用非周期 SRS,在每次上行调度前触发。

4.3 现象:CSI-RS 端口数配了 32,但终端只上报 RI=1

原因:终端能力不支持 32 端口 CSI-RS,或者nrofSRS-Ports和 CSI-RS 端口数不匹配。NR 终端的能力等级(UE capability)里明确写了支持的 CSI-RS 端口数,如果基站配了 32 端口但终端只支持 8 端口,终端会忽略多余的端口,RI 只能上报 1。

解决:查终端的featureSets里csi-RS-ForTracking和csi-RS-ForBeamManagement支持的最大端口数。如果终端只支持 8 端口,基站侧把 CSI-RS 端口数降到 8 或 16。另外检查nrofSRS-Ports是否和 CSI-RS 端口数一致,不一致会导致上下行信道互易性假设失效。

4.4 现象:SRS 和 PUCCH 在同一符号冲突,上行误码率升高

原因:SRS 配在了时隙的最后一个符号,而 PUCCH 的格式 1 也占用最后几个符号。如果调度器没做符号级避让,两者在同一 RE 上碰撞,基站解调 PUCCH 时误码率飙升。

解决:在 RRC 配置里把 SRS 的startPosition设成时隙倒数第 2 个符号,PUCCH 格式 1 占用倒数第 1 个符号。或者用SRS-Config里的resourceMapping把 SRS 限制在特定符号。外场排查时,看 PUCCH 的 DTX 率,如果突然升高,先查 SRS 符号位置。

4.5 现象:CSI-RS 密度配了 3,下行速率反而下降

原因:密度 3 意味着每个 RB 里有 3 个 CSI-RS RE,开销是密度 1 的三倍。如果下行带宽是 100 PRB,32 端口 CDM8 密度 3,CSI-RS 占用 9600 个 RE,而一个 slot 总共才 100×12×14=16800 个 RE,CSI-RS 占了 57%,PDSCH 没资源可调。

解决:波束管理阶段用密度 1,信道测量阶段如果终端低速且信道变化慢,也可以用密度 1。密度 3 只在需要极高测量精度且带宽较小的场景用。我一般先算 CSI-RS 开销占比,超过 10% 就降密度或降端口数。

5. 进阶技巧:用 SRS 和 CSI-RS 的互易性做下行预编码验证

SRS 和 CSI-RS 最值钱的用法不是各自单独工作,而是利用上下行信道的互易性(channel reciprocity)。TDD 系统里,基站通过 SRS 测出上行信道,假设下行信道和上行信道相同(经过校准后),直接用上行信道信息算下行预编码权值,省掉终端上报 CSI 的开销。这个技巧在 Massive MIMO 里是标配,但验证起来有几个关键点。

第一,天线校准。基站侧的发射通道和接收通道存在幅度和相位差异,如果不校准,SRS 测出的上行信道不能直接用于下行预编码。校准方法是在基站侧加一个校准网络,定期测量收发通道的差异并补偿。外场验证时,如果发现下行波束赋形增益比预期低 3 dB 以上,先查校准。

第二,SRS 的探测带宽要覆盖下行调度带宽。如果 SRS 只探测了 20 MHz,而下行调度用了 100 MHz,基站只能对 20 MHz 内的信道做预编码,其余 80 MHz 用默认波束,增益会打折。配置时让c-SRS对应的带宽等于下行带宽。

第三,CSI-RS 用于验证互易性。基站用 SRS 算出一套预编码权值后,发 CSI-RS 让终端测 CQI,如果 CQI 比不用互易性时高 2~3 dB,说明互易性生效。如果 CQI 没变化甚至更低,检查校准和 SRS 带宽。

# 互易性验证:对比 SRS 信道和 CSI-RS 上报的信道相关性 import numpy as np def reciprocity_check(srs_channel, csi_channel): # srs_channel: 基站侧从 SRS 估计的上行信道矩阵 (Nt x Nr) # csi_channel: 终端上报的 CSI 还原的下行信道矩阵 (Nt x Nr) # 计算相关系数 corr = np.abs(np.sum(srs_channel * np.conj(csi_channel))) / ( np.linalg.norm(srs_channel) * np.linalg.norm(csi_channel)) return corr # 示例:4x4 MIMO 信道 srs_ch = np.random.randn(4, 4) + 1j * np.random.randn(4, 4) csi_ch = srs_ch + 0.1 * (np.random.randn(4, 4) + 1j * np.random.randn(4, 4)) print(f"Reciprocity correlation: {reciprocity_check(srs_ch, csi_ch):.3f}")

这段代码算的是 SRS 估计的上行信道和 CSI-RS 还原的下行信道之间的相关系数。参数说明:srs_channel是基站侧估计的矩阵,csi_channel是终端上报后还原的矩阵。相关系数大于 0.9 说明互易性良好,低于 0.7 说明校准有问题或者信道变化太快。我一般在外场每隔一小时跑一次这个检查,相关系数掉到 0.8 以下就重新校准。

最后说个血泪教训:SRS 和 CSI-RS 的配置不是配完就完事,终端移动、天气变化、邻区干扰都会让信道条件变。我习惯在网优平台上设个定时任务,每天凌晨低话务时段自动跑一遍 SRS SNR 和 CSI CQI 的统计,发现异常趋势提前处理,比等用户投诉再排查省事得多。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询