I am working with kontakt.io Bluetooth eddystone UID beacons and an android application using the alt-beacon library (running on a Samsung Galaxy S5, although I doubt that is relevant).
I've done a bunch of trials under different conditions and am working towards determining the feasibility of high-accuracy tracking via trilateration of multiple beacon signals.
On multiple occasions I have noticed a regular oscillation of the beacon's RSSI being detected by the android device.
Here is one of the more extreme examples. As you can see, the perceived signal strength (RSSI) fluctuates between 3 different RSSI levels, switching every 5 seconds(~-75dBm
, ~-90dBm
, ~-85dBm
).
The beacon that was graphed was 2.5m from the device with no obstructions between the beacon and the device. The beacon, and other beacons that were being tested at the same time, are all set to minimum advertising interval and maximum TxPower. I will not claim that the conditions around the testing environment were ideal (up against a glass wall, for instance) but they were constant, with little to no movement in the environment.
My initial thought was Bluetooth's frequency-hopping, but upon further investigation, those take place 1600/s. Two other theories that I or my co-worker had were 1: weird interference from the multiple Bluetooth beacons in the areas, or 2: Adaptive signal strength in the beacons, but the beacons do not appear to have logic in them (and there are other reasons why that explanation doesn't make sense)
I believe what you see actually is based on seeing a different typical RSSI level on each of the three BLE advertising channels 37/38/39.
My understanding of the advertisement and scanning process is as follows:
The advertising device will send each advertisement out on all three of the advertising channels.
The scanning device, when in scanning mode, will scan on only one of the three advertising channels at a time. It will switch between these channels at a device-specific interval that may range from 2.5 ms to 10,240 ms. Obviously, any detections during this interval will be for the channel the scanner is on.
From the graph, it appears that the Galaxy S5 is scanning on a single channel for a period at the upper-range of that limit -- about 10 seconds at a time. I have noticed this in testing detected BLE advertisement RSSI levels on Samsung devices before. Here's a graph I produced on the Galaxy S6 Edge showing a similar pattern. Note there are common three bands of RSSI ranges suggesting the three channels. And the units of the X axis are seconds, showing that the channel changes at a similar period you are seeing. In my graph, the noise on each measurement is larger, possibly because I took the measurements at a distance twice as far of 5m.
I have found that this paper explains the advertising and discovery process well: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4327007/