Scenario: People wearing beacons are coming from the airport and I am standing at an exit gateway.
Requirement:
I only want to view persons within 3-meter.
I want to mark the person leaving and for ease I want them to view in a sorted(according to distance) way in my Android application.
Currently facing inconsistency in the distance emitted(Eddystone) by beacons.
Please suggest how to remove noise and get an accurate distance of the beacon or please suggest if there is any other way to do this task.
It is normal for distance estimates to fluctuate as radio noise alters the estimate. Set your expectations appropriately, and this is OK. Larger distance estimates will fluctuate more as there is more noise than signal in the input to the distance estimating algorithm.
If sorting by distance in the UI, your best bet for stability is to first convert the distance to a range of distances (e.g. 0-0.5 meters, 0.5-1 meters,1-3 meters, 3-5 meters, 5-10 meters, 10+ meters). You can then sort the list to be displayed in the UI by distance range and MAC address. This will keep the list much more stable.
There will still be variations as beacons move up and down the list, but much less so than when sorting by raw distance estimates.
You can also reduce the fluctuation in your distance estimate by increasing your beacon transmission rate, increasing the power of the transmitter, and adjusting your beacon scanner to average your distance estimate over a longer interval.
Related
I developed an iBeacon related app and I want to calculate the exact distance from iBeacon to an Android device. Is there any approach to get the exact distance in meters for Samsung Galaxy J7?
You can't get the exact distance. iBeacon is not designed for.
An approximation of the distance is the more that you can get.
For a beacon that is 5 meters away, distance estimates might fluctuate between 2 meters and 10 meters.
The reasons for these distance estimate variations and the steps that can be taken to reduce them are some of the most frequent questions we get about beacons. Factors that influence the error in the estimate include reflections of the radio signal, obstructions that attenuate the radio signal, and orientation of both the phone and the beacon.
source
Yes. The beacon provider /manufacturer would have their sdk. Use it in your eclipse project and directly you can get the distance in metres. I can send you my code if you want.
How to calculate distance using BLE beacons if the user is moving in a vehicle with 2-15kmph speed?Also,if the distance won't give me accurate results is there any other mechanism with the help of which I can calculate the nearest beacon.The default implementation does not give me proper results as there is a 20sec lag in distance estimates.
Secondly,in which cases should ARMA filter be used.
Beacon distance estimates are only estimates, so you must set accuracy expectations accordingly. In order to reduce noise on radio signal levels, many samples are averaged over a period of time.
Figuring out the appropriate averaging time depends on the use case. As you have noted, the Android Beacon Library uses a 20 second running average by default. This gives a distance estimate based on where the vehicle was on average over the past 20 seconds.
For a vehicle going up to 15km/hour (~5 meters / sec) with a beacon transmission radius of 50 meters, it will be in range of the beacon for a maximum of 10 seconds. How many distance measurements do you need to get? If one is enough, average over 10 seconds. If you need more, set the period even shorter.
Understand that reducing the sample interval will add more noise error to the distance estimates, because you will have fewer statistical samples to work with. A few things you can do to make the most of the samples you do get:
Set the beacon to advertise as frequently as possible. Some beacons advertise at 1Hz or less to save battery. This leads to poor distance estimates. Increase it to 10Hz or more if possible.
Turn off bluetooth configurability/connectability on your beacon. Some Android devices will only allow one signal level sample per BLE scan (1.1 secs by default in the library) in connectable mode. This can lose you 90% of your samples at 10 Hz.
Configure the beacon transmitter to be on its highest power setting and calibrate it properly. Stronger signals have a higher signal to noise ratio, giving better distance estimates.
The ARMA filter uses a nondeterministic sample interval based on % change in each sample. It is more appropriate for use cases with slow moving beacon receivers.
I want to try to make with iBeacon device position of human hands. Does someone know, what is precision of getting iBeacon devices positions?
Determining the position of human hands is beyond the ability of Bluetooth LE beacons, which cannot measure direction and can only estimate distance to an accuracy of 0.5 meters at a distance of 2-3 meters.
More details are available here: http://developer.radiusnetworks.com/2014/12/04/fundamentals-of-beacon-ranging.html
For my project I need to estimate the distance between a Smartphone and a bluetooth module. The Estimation doesn't have to be very precise. I only need to determine the distance with a margin of error of about 50cm.
I did test the RSSI of two bluetooth modules at distance-steps of 10 cm. I measured the RSSI 5 times for each step and got the average of the 5 measurements. The averages are shown in the graph below:
The red and blue lines resemble the two Bluetooth modules. You can see that the results are not very linear. One of the reasons for this is interference, so i searched for ways to tackle the interference issue. Two ways i found are:
Signal Noise Ratio(SNR): Understanding ibeacon distancing
ratio of the iBeacon signal strength (rssi) over the calibrated transmitter power (txPower). The txPower is the known measured signal strength in rssi at 1 meter away: http://www.princeton.edu/~achaney/tmve/wiki100k/docs/Signal-to-noise_ratio.html
However i don't really understand how the above techniques would be used to get more accuracy. For SNR i need the Noise value, how do i even get the Noise value?
For ratio rssi/txPower, I can get the txPower by simply measuring the rssi at 1 meter from the module. So I know all the needed values. But I don't know what to do from here on out. How do i use these values to get a more accurate distance estimations?
Are there any other techniques i can use to improve accuracy?
You are running into the practical limitations on this technology. Getting estimation accuracy of +/- 50 cm may be possible under ideal conditions at short distances (under 2 meters) not at long distances of over 10 meters.
I wrote a longer blog post about the limits here: http://developer.radiusnetworks.com/2014/12/04/fundamentals-of-beacon-ranging.html
To answer your specific questions:
No, there is no practical way to know what part of a single RSSI measurement comes from signal and what part comes from noise. You can take an average over many samples, which partially removes noise if the transmitter and receiver are stationary over the sample interval.
The techniques you ask about do work to give you distance estimate, but they have the limitations of the technology described above.
I have here a device which can give me GPS coordinates. The time interval I can define. I want to use it to calculate the average speed during driving or travelling by car. Actually I used a orthodrome formula to calculate the distance between two points and then divided it by the given time interval. By the implementation I followed this term. Unfortunately I could only find a German link, but I think the formula should be understandable in any language ;)
Unfortunately, using this formula and a time interval of 1 second gives very unprecise results. The speed while walking is between 1 km/h and 20 km/h.
So I wonder if there is a general reference on how to implement distance calculation between two GPS coordinates (I found something similar on SO) and particulary, which is the best time interval to update the GPS coordinates?
I assume that you're testing this by walking at a constant speed (I think ~5 kph is a normal walking speed) while measuring your GPS position once per second.
The variation that you're seeing in instantaneous speed (the distance between each measured point divided by 1 second) is either due to random variation in the measured GPS position or else you aren't taking your measurements exactly one second apart (or it could be both of these things).
I'm going to assume your measurements are being taken precisely one second apart. Hand-held GPS devices are much less accurate than advertised. While it's often claimed that the devices are accurate to within 10 ft. of the true position, this simply isn't so.
The best way to measure and report the accuracy of a GPS device is to leave it in a place where it can see the satellites and not be rained on, and record a few day's worth of data. You can then use Google Maps to plot the points - I've done this around my house and around the office, which is a good way to give you a sense of scale.
Obviously, if the devices were perfectly accurate, you would see all your measured points in one spot. Or, if the 10 ft. accuracy thing were true, you would see all the points in a little cluster inside a 20 ft. diameter circle.
What you see instead (with every GPS-enabled device I've ever tested) is a combination of relatively small positional scattering (on the order of a few tens of feet) occurring on a scale of a few seconds, and a longer-term "random walk" of the average position which might move 200 or 300 ft. in the course of a day or two. When plotted over your own house, for example, it might look like your PDA wandered over to the neighbor's house, then across the street, then down the street two houses, back towards you etc., all while jittering around 5 or 10 feet here or there like it drank too much coffee.
GPS can be more accurate than this. Surveyors use devices with much more powerful receiver sets (so they get a much more accurate read on the satellite signals), and they leave them in place for days at a time to average successive measurements. Handheld devices have cheap receiver chips and cheap antennas and have to deal with all kinds of signal interference anyway.
Your best bet is to do a running average to calculate your instantaneous speed. Instead of dividing the distance between the current point and the previous point by 1 second, take the last 5 distances between points and divide by 5 seconds (or whatever number of seconds you use). It's important not to just take the difference between the current point and the point 5 seconds ago and divide this distance by 5, as that would miss any non-linear movement.
Update: I noticed in a comment that you're using an Android device. Do you know if it has a built-in GPS receiver? Many (most?) Android devices don't, which means their GPS is not the triangulate-on-the-satellites version of GPS, but the guess-where-I-am-based-on-the-signal-from-the-cell-towers version. This is much less accurate positionally, as I'm sure you could tell from the snarkiness of my description. :)
GPS systems can yield instantaneous velocity directly, without interpolating positions. I read somewhere that the velocity reading is actually more accurate than the position reading. What device/system/OS are you using?
On Android, try the android.location.Location.getSpeed() method (along with hasSpeed()) in your LocationListener implementation.
Search on google for GPS SPEED ACCURACY, and you will find reports stating that speed calculated out of position-vs-time is ten times worse than just using the speed parameter coming right out from the GPS receiver. The speed parameter is not depending on position accuracy, but is calculated out of doppler (speed/frequency difference) from the satellite signals.
Good luck