4

キャリア信号強度を調べるために使用したコードは次のとおりです。

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

*3001#12345#*60 から 100 の間の値が表示されますが、この番号に電話してデバイスの信号強度をテストすると、 -65. 以下にスクリーンショットを添付しました。値はgetSignalStrength()正確ですか?では、なぜ常に正の値を返すのでしょうか?

ここに画像の説明を入力

4

5 に答える 5

6

getSignalStrength()たとえば、-(-60) == 60 などの否定された dB 減衰を示しています。呼び出しでは、0 未満の測定値としてより慣習的に表示されています。はい、これらの種類のバリエーションは典型的です。厳密に制御された条件でも、+/- 20 デシベルを取得できます。これを修正する 1 つの方法は、一連の測定を時間の経過とともに (たとえば 1 秒ごとに) 行い、最後の 10 程度の測定の実行中のリストを保持することです。次に、平均または中央値またはその他の統計を報告します。私の経験では、これによりバリエーションが大幅に削減されます。標準偏差を実行して、信頼性の尺度を提供することもできます。

于 2013-03-20T18:26:15.927 に答える
5

CTGetSignalStrength()CoreTelephony での 私の観察はRSSI(Received Signal Strength Indication)、キャリアの信号強度の値を返すということです。これを使った私の実験では、0 ~ 100 の範囲の値が返されます。これは、 this によると、キャリアの「パーセント信号強度」であると考えられます

また、iOS は信号強度を直線的に測定しません

また、ステータス バーに 5 つのバーがある場合でも、RSSI 値が 100 にならない場合があることに気付きました。

于 2014-08-05T04:58:06.320 に答える
3

getSignalStrength()負のスケールで結果を提供します。この差は、ハイパスフィルターを使用して制御できます。

最後の 10 回の観測結果を収集する必要があります。新しい観測を追加するときに、最後の 10 個の観測の平均を取ります。0.1 を掛けます。現在の読み取り値を取得し、0.9 を掛けます。両方を追加します。合計観測値が 10 を超える場合は、次の計算のために最も古い観測値を削除します。

結果の信頼性が高まり、信号強度の急激な変化にも効果的に対処できます。

于 2013-03-23T05:33:26.537 に答える
1

多くの信号getSignalStrength()については、ハイパス フィルター アルゴリズムと併用する必要があります。

また、一定期間にわたって平均測定値を取得してください (10 ~ 15 回の連続測定)。そして、それが負の結果を与えるのは普通のことです.電話のdB信号はそのようなものです;-)

于 2013-03-26T18:47:10.193 に答える
1

デシベル単位で読むことをお勧めします。次のリンクが役立ちます。 信号強度の読み方

于 2013-03-15T13:05:15.217 に答える