1 BWP定义
由于5G采用大带宽,若每个UE都使用全带宽,则对UE能力要求很高。BWP指载波的一部分,让UE只使用其中的一部分,降低UE的成本。
38.211-4.4.5 A bandwidth part is a subset of contiguous common resource blocks for a given numerology in bandwidth part on a given carrier.
对应载波和BWP,存在CRB和PRB。CRB在载波上编号,PRB在BWP上编号,两者之间映射关系如下图: 
CRB编号和PRB编号的关系如下:
2 BWP配置
已知条件:
- 载波中心频点
Fc和带宽BW - SSB中心频点
SS_REF - RRC参数
offsetToCarrier
计算:
- Point A
- SSB RE级偏移
ssb-SubcarrierOffset - SSB RB级偏移
offsetToPointA - CORESET相对于SSB偏移
offset - BWP起始位置和大小
locationAndBandwidth
载波、SSB、CORESET0和BWP的频域关系如下图所示:

// 配置载波偏移、子载波间隔和载波带宽
SCS-SpecificCarrier ::= SEQUENCE {
offsetToCarrier INTEGER (0..2199),
subcarrierSpacing SubcarrierSpacing,
carrierBandwidth INTEGER (1..maxNrofPhysicalResourceBlocks),
}
// 配置PointA和SSB中心频点的ARFCN
FrequencyInfoDL ::= SEQUENCE {
absoluteFrequencySSB ARFCN-ValueNR
frequencyBandList MultiFrequencyBandListNR,
absoluteFrequencyPointA ARFCN-ValueNR,
scs-SpecificCarrierList SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier,
...
}
// 配置SSB RB级偏移
FrequencyInfoDL-SIB ::= SEQUENCE {
frequencyBandList MultiFrequencyBandListNR-SIB,
offsetToPointA INTEGER (0..2199),
scs-SpecificCarrierList SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier
}
MIB ::= SEQUENCE {
systemFrameNumber BIT STRING (SIZE (6)),
subCarrierSpacingCommon ENUMERATED {scs15or60, scs30or120},
ssb-SubcarrierOffset INTEGER (0..15),
dmrs-TypeA-Position ENUMERATED {pos2, pos3},
pdcch-ConfigSIB1 PDCCH-ConfigSIB1,
cellBarred ENUMERATED {barred, notBarred},
intraFreqReselection ENUMERATED {allowed, notAllowed},
spare BIT STRING (SIZE (1))
}
BWP ::= SEQUENCE {
locationAndBandwidth INTEGER (0..37949),
subcarrierSpacing SubcarrierSpacing,
cyclicPrefix ENUMERATED { extended }
}
3 如何确定BWP的位置和带宽?
通过RRC参数locationAndBandwidth进行配置,利用RIV指示起始位置和BWP带宽。
RIV计算如下图所示:

# 基站侧:根据BWP起始位置和带宽计算RIV
rbLength = 273
rbStart = 0
bwpSize = 275
if ((rbLength-1) <= (bwpSize//2)):
RIV = bwpSize*(rbLength-1)+rbStart
else
RIV = bwpSize*(bwpSize-rbLength+1)+(bwpSize-1-rbStart)
print("RIV=%d",RIV)
# UE侧:根据RIV计算BWP起始位置和带宽
RIV = 36300
bwpSize = 275
rbLength = RIV // bwpSize
rbStart = RIV % bwpSize
if ((rbStart + rbLength - 1) <= bwpSize):
rbStart = rbStart
rbLength = rbLength + 1
else:
rbLength = bwpSize - rbLength + 1
rbStart = bwpSize - 1 - rbStart
print("rbStart=%d,rbLength=%d",rbStart,rbLength)
4 UE侧如何获取BWP的配置?
UE在接入前知道基站的中心频点、带宽和offsetToCarrier吗?
UE在接入前知道SSB中心频点的大致范围,在此范围内进行盲检获得SSB的位置,实现小区同步和解MIB。UE从MIB上获取CORESET0的信息,从而解SIB1,获取BWP配置等信息。
遗留问题: ssb-SubcarrierOffset的作用是什么? SSB盲检原理?
5 BWP切换
此部分暂时不理解,后续更新。