OpenSignalMaps user and MIT Professor Berthold Horn has done some digging into the Android source code. He’s found some interesting hints as to what the signal icon in your phone’s status bar means.
He noticed a series of functions with names following a pattern:
Each of these functions has 5 possible return values (0-4) representing a range from really bad signal to really string signal. Is it a coincidence that stock Android has a signal icon that has 5 different states (from 0 bars to full bars)? Probably not. Berthold reasons that it’s likely that these functions drive the signal notifications and we’re inclined to agree.
What do these functions tell us about how android thinks of signal? Two of the functions getGSMLvel and getLTElevel (both of these relate to GSM technologies) consider just the RSSI, or the power that’s being received by the phone from the connected antenna. For getCDMAlevel and getEVDOlevel it’s a little more involved. These work as follows:
- The RSSI is rated on a scale of 0 – 4 The RSSI for CDMA technologies is quite different, it represents the total power of all the antennas visible to your phone (although you are connected to just one), an effect that has been neatly observed by Berthold by watching how RSSI changes when moving between towers and in handoffs.
- The Signal-to-Noise ratio (or EcIo for CDMA) is rated on a scale of 0 – 4. This is measure of the total proportion of signal being received that can be used for communication.
- These two ratings are compared, whatever is the lower is the one that’s returned as a measure of signal quality. So you may have a a 4 in terms of RSSI, but only 2 for Signal-to_noise, in which case you’d see 2 bars.
But my phone has 5 signal bars!
This can’t be the whole story. Many phones (the Galaxy S for example) show signal bars in a different range. The carriers and manufacturers often add their own take on Android in the terms of a custom UI (TouchWhizz for Samsung, Sense for HTC, Motoblur for Motorola) and they can create alternative measures based on the same ingredients of RSSI, EcIo, Signal Noise and possibly other fields.
Many thanks for Berthold for pointing this out!