如何以编程方式找出载波信号强度

Dee*_*Dee 4 iphone ipad ios core-telephony ios6

这是我用来找出载波信号强度的代码:

int getSignalStrength()
{
    void *libHandle = dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony", RTLD_LAZY);
    int (*CTGetSignalStrength)();
    CTGetSignalStrength = dlsym(libHandle, "CTGetSignalStrength");
    if( CTGetSignalStrength == NULL) NSLog(@"Could not find CTGetSignalStrength");
    int result = CTGetSignalStrength();
    dlclose(libHandle);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

它给我的值在60到100之间,但是当我通过调用这个*3001#12345#*数字来测试设备中的信号强度时,它显示为-65.下面我附上截图.价值来自getSignalStrength()准确吗?那为什么它总是会返回正值?

在此输入图像描述

小智 6

getSignalStrength()显示否定的dB衰减,例如 - ( - 60)== 60.呼入将更常规地显示为小于零的测量.是的,这些变化是典型的.即使在严格控制的条件下,您也可以获得+/- 20分贝.解决这个问题的一种方法是随着时间的推移进行一系列测量,比如说每秒,并保留最近10次测量的运行列表.然后报告平均值或中位数或其他统计数据.根据我的经验,这减少了很多变化.您还可以执行标准偏差以提供可靠性的度量.


小智 5

我对CTGetSignalStrength()CoreTelephony的观察是,它返回了RSSI(Received Signal Strength Indication)载波信号强度的 值.100,我相信这是根据"百分比信号强度"的载体的-我与此实验的范围内0之间返回值.

也iOS不根据以线性的方式测量的信号强度

我也注意到,即使我们在状态栏中有5个条形,RSSI值也可能不是100.