公司一些Android设备,在交给客户使用时,需要使用sim卡网络,但是有时候网络不好,要给客户证据说明是网络问题,一个办法是网络测速,还有就是获取一下频段信息,根据这个信息可以和中国移动沟通问题来源,比如在某些地方,移动只部署了一两个频段,而有的频段速度快,有的频段速度慢,所以可以通过频段信息判断网络问题。
查询结果示例:TDD B34(36275)
,这里显示频段为 TDD B34
频段,频点为36275
。示例代码如下(注:本代码在5G频段换算时仅写了中国移动N41、N79、N28频段,其它5G频段的没写),tm.serviceState
这个API是Android 8.0 才出的,在低版本的话也可以用反射试一下,看是否只是未公开,且这个API需要READ_PHONE_STATE
、ACCESS_FINE_LOCATION
权限。
fun getBandInfo() {
val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
val serviceState = tm.serviceState ?: return
val channelNumber = serviceState.channelNumber
val duplexMode = serviceState.duplexMode
val band = getBand(channelNumber)
val mode = getMode(duplexMode)
Log.i("MainActivity","$mode $band($channelNumber)")
}
fun getMode(mode: Int) : String {
return when (mode) {
1 -> "FDD"
2 -> "TDD"
else -> "未知duplexMode: $mode"
}
}
fun getBand(EARFCN: Int): String {
var band = nrarfcnToBand(EARFCN)
if (band != -1) return "N$band"
band = earfcnToBand(EARFCN)
if (band != -1) return "B$band"
return "$EARFCN"
}
fun nrarfcnToBand(nrarfcn: Int): Int {
val band = when(nrarfcn) {
in 499200 .. 537999 -> 41
in 693334 .. 733334 -> 79
in 272010 ..276660 -> 28
else -> -1
}
return band
}
fun earfcnToBand(EARFCN: Int): Int {
val band = when (EARFCN) {
in 0 until 600, in 18000 until 18600 -> 1
in 600 until 1200, in 18600 until 19200 -> 2
in 1200 until 1950, in 19200 until 19950 -> 3
in 1950 until 2400, in 19950 until 20400 -> 4
in 2400 until 2650, in 20400 until 20650 -> 5
in 2650 until 2750, in 20650 until 20750 -> 6
in 2750 until 3450, in 20750 until 21450 -> 7
in 3450 until 3800, in 21450 until 21800 -> 8
in 3800 until 4149, in 21800 until 22149 -> 9
in 4150 until 4750, in 22150 until 22745 -> 10
in 4750 until 4950, in 22750 until 22950 -> 11
in 5010 until 5180, in 23010 until 23180 -> 12
in 5180 until 5280, in 23180 until 23280 -> 13
in 5280 until 5380, in 23280 until 23379 -> 14
in 5730 until 5850, in 23730 until 23850 -> 17
in 5850 until 6000, in 23850 until 24000 -> 18
in 6000 until 6150, in 24000 until 24150 -> 19
in 6150 until 6450, in 24150 until 24450 -> 20
in 6450 until 6600, in 24450 until 24600 -> 21
in 6600 until 7400, in 24600 until 25399 -> 22
in 7500 until 7700, in 25500 until 25699 -> 23
in 7700 until 8040, in 25700 until 26040 -> 24
in 8040 until 8690, in 26040 until 26690 -> 25
in 8690 until 9040, in 26690 until 27040 -> 26
in 9040 until 9209, in 27040 until 27210 -> 27
in 9210 until 9660, in 27210 until 27660 -> 28
in 36000 until 36200 -> 33
in 36200 until 36350 -> 34
in 36350 until 36950 -> 35
in 36950 until 37550 -> 36
in 37550 until 37750 -> 37
in 37750 until 38250 -> 38
in 38250 until 38650 -> 39
in 38650 until 39650 -> 40
in 39650 until 41590 -> 41
in 41590 until 43590 -> 42
in 43590 until 45590 -> 43
in 45590 until 46590 -> 44
else -> -1
}
return band
}
对于5G的频段,在官网:https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3202,链接界面如下:
点击如上链接,会跳出一个文件列表页面,如下:
这是3GPP TS 38.104
规范,它定义了NR-ARFCN
(NR绝对射频信道编号)与频段的对应关系,上面列出来的文件列表是不同版本的TS 38.104
规范,这些文件的命名方式一般是“TS编号-版本号.zip”,例如,38104-001.zip表示TS 38.104版本0.1.0。 要查找NR-ARFCN范围与频段的对应表,您可以下载最新版本的TS 38.104规范。 在该文档的第5章,通常会列出频段和NR-ARFCN的对应关系。 请注意,随着规范的更新,具体章节和表格编号可能会有所变化。 因此,建议您参考最新版本的TS 38.104,以获取最准确的信息。
获取最新版本看文件的日期即可,点击日期最上面的 “desc” 按降序排序,这样排在最前面的即为最新的版本了。如下:
打开该文件就能看到具体版本号,以及该版本的日期,如下:
GPT说了,NR-ARFCN范围与频段的对应表在第5章,看了一下还真的是,如下:
表格名称翻译为 “表 5.4.2.3-1:FR1 中每个工作频段适用的 NR-ARFCN”,在这个表格中,可以看到N41频段对应的NR-ARFCN范围为499200-537999,它又分上下行的(Uplink、Downlink),而且n41中第二列又分15和30,搞不懂这些区别。而且我发现n90频段的NR-ARFCN范围和N41是一样的,如下:
它的第二列分15、30、100。
发现还有另一个表格:
表名翻译为:表 5.4.2.3-4:增强信道栅格中每个工作频段适用的 NR-ARFCN,跟前一个表格不知道有什么不一样,而且这个表中没有n41频段。而且在同一个表格中不同频段的 NR-ARFCN也是有重复的,比如n77和n78频段有重复,n41和n90有重复。
对于两个表格的不同,GPT答案如下:
在 3GPP TS 38.104 中,这两个表格的作用和使用场景是不同的,具体选择哪一个取决于您的需求:
-
Table 5.4.2.3-1: Applicable NR-ARFCN per operating band in FR1
- 用途:此表格定义了在 FR1(Frequency Range 1,450 MHz 到 6000 MHz)频率范围内,每个操作频段的标准 NR-ARFCN(NR绝对射频信道编号) 范围。
- 应用场景:该表适用于大多数常规场景,是操作频段和 NR-ARFCN 范围的标准映射关系,供无线通信设备的常规频率分配使用。
- 推荐使用场景:
- 标准频段配置。
- 常规通信频谱规划和分配。
- 设备对频率支持的确认。
-
Table 5.4.2.3-4: Applicable NR-ARFCN per operating band for enhanced channel raster
- 用途:此表格定义了针对增强信道栅格(enhanced channel raster)的 NR-ARFCN 范围。增强信道栅格是一种在特定场景下使用的优化频谱配置,主要用于更精细的信道间隔和更灵活的频谱使用。
- 应用场景:该表适用于需要增强信道栅格的特殊场景,例如:
- 特定的频谱共享方案。
- 更细粒度的频谱优化需求。
- 需要在复杂射频环境中对频率资源进行更高效的利用。
选择依据
- 常规使用:如果您是针对标准的 NR 部署或常规频谱规划,应该以 Table 5.4.2.3-1 为准。
- 特殊场景:如果您在设计或优化需要支持增强信道栅格的系统(例如设备需要更精细的信道配置),可以参考 Table 5.4.2.3-4。
建议
- 优先使用 Table 5.4.2.3-1:因为这是默认的 NR-ARFCN 和频段对应关系,适用范围更广。
- 如果确实需要增强信道栅格支持,则使用 Table 5.4.2.3-4,但需确保设备和网络支持该特性。
我的应用场景是:在Android手机中,可以获取到信号中的nr-arfcn,我需要知道当前手机sim卡的信号使用的是哪个频段,这个场景我应该选择使用哪个表格?
推荐表格:Table 5.4.2.3-1: Applicable NR-ARFCN per operating band in FR1
- 原因:该表是标准的 NR-ARFCN 与频段的对应关系,广泛用于常规的 5G NR 部署场景。手机通信系统通常遵循这一标准进行频段和信道分配。
- 适用性:此表适合您的需求,因为它是 NR-ARFCN 的基础对应表,涵盖了大多数常规操作频段。
为何不选择 Table 5.4.2.3-4?
- Table 5.4.2.3-4 是针对 增强信道栅格(enhanced channel raster) 的特殊场景,通常用于需要更精细频谱规划的场合。
- 这种增强信道栅格的配置需要设备明确支持,并非所有设备或运营商都会使用。因此,对普通手机 SIM 卡信号的分析,它的实用性较低。
在 Table 5.4.2.3-1 中,您提到的 n41 和 n90 的 NR-ARFCN 范围相同(499200 - 537999)。因此,仅根据 NR-ARFCN 是无法直接区分信号所属的频段的。但您可以结合其他信息来判断 NR-ARFCN 属于哪一个频段。
- 查询运营商分配的频段
- 在实际网络部署中,不同的运营商可能只启用了 n41 或 n90 其中之一。
- 您可以通过 Android 的 TelephonyManager API 查询 PLMN(Public Land Mobile Network,公共陆地移动网络号),然后根据 PLMN 号判断运营商。
- 参考运营商的公开频谱分配信息,确认对应的频段。
- 获取信道带宽
- n41 和 n90 的带宽配置可能不同:
- n41 常用于大带宽(例如 100 MHz)。
- n90 通常用于更小的带宽,且主要用于某些特定场景。
- Android API 可能允许您获取信号的带宽信息,从而进一步确认频段。
- 利用小区信号信息
- 在 Android 中,通过 API(例如 CellInfoNr 或 ServiceState),获取小区 ID 或更多信号信息。
- 小区的其他特征(如载波频率或支持的频段)可以帮助区分。
这也太复杂了,对于5G频段,网上信息一般是这样说的:目前国内外主要使用的是n1/n3/n28/n41/n77/n78/n79共7个频段。所以代码里面我们就判断这7个频段就行了,然后中国电信和中国联通使用的是n78频段,而中国移动使用的是n41和n79,所以对于n77和n78重复的部分,我们就当n78频段处理,必竟这是联通和电信的常用5G频段,对于n41和n90重复,我们就当n41处理,因为n41是移动常用5G频段,这样就比较简单了。