Android如何获得SNR(信噪比)

pub*_*dge 7 android

我想知道是否有人知道如何以编程方式获得Android手机中的LTE/WCDMA信号的SNR或信噪比.SNR可以从三星机型的密码*#0011#中查看,但在其他手机(如Nexus 5)中则无法查看.我在想是否有实际的API,可能是现有API的计算?

我知道您可以使用SignalStrength API获取有关信号的详细信息,但我已经解析了我看到的部分,似乎无法找到任何SNR读数.

非常感谢任何帮助或建议!

谢谢!

附加信息:

我应该补充说,我一直在从这个线程中修补信号强度[链接] 如何在Android中获得LTE信号强度?所以这是我的问题的起点.

我的结果如下:

LteSignalStrength - >根据位置在15-30左右波动,不知道这是什么..

LteRsrp - >显示dBm,我想这就是手机确定信号质量的方式(大致无论如何).

LteRsrq - >显示-7到-11,不确定

LteRssnr - >因某种原因总是300,不明白为什么......

LteCqi - >渠道质量指标?一些巨大的数字,似乎是最大的32位整数值,不确定

有没有办法从这个API获得SNR或者我在大海捞针中寻找一个不存在的针?

三星GalaxyNote2的屏幕截图,SNR读取*#0011#密码: 在此输入图像描述

Mar*_*elo 11

我从2014年8月开始密集研究这个问题.首先,我希望您熟悉一些电信知识和Android开源项目(AOSP).那么,根据我的研究,我说:

  1. 通过查看AOSP内部本机类,似乎Android 通过在调制解调器上通过AT + CSQ命令(请检查AOSP本机类reference-ril.c)分配返回值来提供SignalStrength值.而且只有它.问题是这个命令只能提供信号质量和块错误率(BLER),并且不会告知任何其他输入信号; 在LTE调制解调器中,某些设备似乎没问题,但是当你改用UMTS网络时,事情变得不清楚/不一致;
  2. 您可以通过使用来自其他小区或AT + CGREGAT的接收信号强度的电信公式(相关RSSI,RSCP,EcNo等等)的一些推导来计算输入干扰(SNR和其他).+ CREG(再次,请检查reference-ril.c类).
  3. 我挖掘了所有AOSP内部类,跟踪和绘制与电话相关的方法调用.我查看了从SDK层(我们使用TelephonyManagerPhoneStateListener API类)到使用c/c ++编写的本机无线电接口层类.在任何时候,我都发现了一个真正基于其他单元的SNQ计算,但只作为从AT + CSQ调制解调器获得的值传递(该命令仅提供信号质量和BLER).这听起来很奇怪,因为干扰是用其他接收信号计算的值,包括那些不是来自GSM的信号.所以,对我来说,从Android API获得的传入SNR有点蹩脚或不完整.

基于以上所述,我认为:

  1. 谷歌不是3GPP.而且3GPP不是谷歌.Android是一个庞大而复杂的项目,拥有超过1200万行代码.Android和电信之间可能会错过通信/理论信息,这是非常合理的;
  2. 特别是我正在搜索CQI,我怀疑CQI是在L2 PPP(点对点协议)中计算的LQR(链路质量报告)的上下文中;
  3. 这个主题的主题确实存在问题.没有圣杯,因为不同的设备拥有不同的(可能是封闭的)硬件驱动程序.我们需要为每个不同的设备支持不同的软件.也许,如果您需要为所有设备提供正确的值,则需要为每个设备重新编译整个Android ROM.

我希望它能给你带来一些启示.如果您有任何其他信息,请在此处分享.