Question

Would like to determine via code whether the voice channel on an Android is experiencing noise.

There is a list of functions at http://developer.android.com/reference/android/telephony/SignalStrength.html

I see a function getGsmBitErrorRate() and that will be useful when I switch to GSM.

I see the function getEvdoSnr() but I think that is only for the "data channel."

The only other function with CDMA is getCdmaEci0(). How can one derive SNR from Eci0()? Is there some other way of deriving this value?

Review: I'm looking for a function that returns something like Bit Error Rate OR a Signal to Noise Ratio. I find one link that implies that ec/i0 is exactly the same thing as SNR. But other pages have indicated that ec/i0 is the amount of signal that is available.

Was it helpful?

Solution

Ec refers to the pilot signal energy. Io refers to the noise energy. Thus, Ec/Io is the "pilot-to-noise ratio", instead of the "signal-to-noise ratio" (i.e. SNR). While, strictly speaking, the PNR is not the same as the SNR, as a practical matter you should be able to use the PNR as a proxy for the SNR. The whole point of the pilot is to give the receiver information about the signal and allow it to estimate channel effects.

This web page looks useful- Ec/Io.

Edit: I forgot that there is a parameter set by the network provider that specifies what the power of the pilot should be as compared to the actual signal. For instance, they could be the same power, in which case Ec/Io would be equal to the SNR, or the pilot could be half the power of the signal, in which case the SNR would always be 3 dB higher than Ec/Io. The pilot to signal ratio can be any of a number of different values and is, as mentioned earlier, set by the network. I don't recall what the parameter is called.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top