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

时间:2013-03-15 08:12:01

标签: iphone ios ipad ios6 core-telephony

以下是我用来查找载波信号强度的代码:

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;
}

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

enter image description here

5 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

我对CoreTelephony中的CTGetSignalStrength()的观察是,它返回了 载波信号强度的RSSI(Received Signal Strength Indication)值。我的实验返回0到100之间的值,我认为是根据this的载体的“百分比信号强度”。

iOS也不会根据this

以线性方式测量信号强度

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

答案 2 :(得分:3)

getSignalStrength()以负比例提供结果。可以使用高通滤波器控制差异。

您应该收集最近10次观察的结果。在添加新观察时,取最近10次观测的平均值。乘以0.1。取当前读数并乘以0.9。添加两者。如果总观测值大于10,则删除最旧的观测值以进行下一次计算。

它将使您的结果更可靠,您还可以有效地处理信号强度的突然变化。

答案 3 :(得分:1)

我建议阅读分贝测量。以下链接应该有所帮助。 How to Read Signal Strength

答案 4 :(得分:1)

至于许多信号getSignalStrength()应与高通滤波器算法共同使用。

同时确保在一段时间内进行平均测量(10-15次连续测量)。 它给出负面结果是正常的,电话的dB信号是这样的; - )