如何找出载波信号强度编程(How to find out carrier signal streng

2019-07-21 16:35发布

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

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()准确吗? 那为什么返回正值始终?

Answer 1:

getSignalStrength()是表示否定dB的衰减,例如, - ( - 60)== 60中更通常显示它作为测量小于零的呼叫。 是的,这些种类的变体是典型的。 即使是在严格控制的条件就可以得到+/- 20分贝。 你能解决这个问题的方法之一是采取一系列的测量随着时间的推移,说每一秒,并且保留最后10次左右的测量的运行列表。 然后报告平均值或中值或其他一些统计。 在我的经验,这减少了变化了很多。 你也可以做标准差来提供可靠性的措施。



Answer 2:

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

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

我还注意到,即使我们在状态栏5条,RSSI值可能不是100。



Answer 3:

getSignalStrength()将结果提供在负规模。 的差异可以使用高通滤波器来控制。

你应该收集过去10所观察的结果。 在增加新的观测时间,取最后10个观察值的平均值。 0.1相乘。 就拿当前的读数和0.9相乘。 添加两者。 如果总的观察是大于10,除去用于下一次计算的最古老的观察。

它会使你的结果更可靠,也可以有效地处理在信号强度的突然变化。



Answer 4:

我会建议在分贝衡量学生的阅读起来。 点击以下链接应该有所帮助。 如何阅读信号强度



Answer 5:

作为许多信号getSignalStrength()应cojointly具有高通滤波器算法中使用。

另外,还要确保有一个平均测量过一段时间(10-15连续测量)。 而这是正常的,它给了否定的结果,分贝信号,电话都是这样的;-)



文章来源: How to find out carrier signal strength programmatically