We have explained some of the technical challenges in providing real-time, accurate indoor localization in a previous post. Most good indoor localization solutions these days use a hybridized approach (WiFi fingerprinting + inertial navigation seem to be a popular option) to achieve the required accuracy and speed; and a good solution must deal with lots of entropy, but remain fast and accurate. The best way is to use any and all available sensor data, and an inertial navigation model, and then add predictive filtering while conserving device resources, such as battery power. Device manufacturers’ battery allocation for indoor location services is challengingly small.
In order to deal with all the entropy our application uses an improved variant of something called a Kalman filter, an algorithm that has been very useful over the past couple of decades in bleeding edge navigation and robotics applications (such as the Mars Rover), where a lot of noisy input is combined with a system’s dynamic models (e.g. an inertial navigation algorithm) to produce an increasingly accurate predictive model of movement and location. The Kalman filter is a set of recursive equations, and, in our case, involves a lot of tricky vector and matrix operations: a typical example has our applying a probability or confidence vector to a set of sensor inputs. This can be taxing on system resources, especially when the key requirement is real-time, accurate location using multi-sensor inputs.
This is where ARM comes to the rescue. We really like ARM’s NEON™ SIMD engine (SIMD – Single Instruction, Multiple Data - means a single instruction applied to multiple data points. Imagine a probabilistic operation applied to a large set of sensor input). We really, really like NEON. But this became full blown obsessive love when we started using ARM’s Project Ne10 library, which optimizes matrix and vector operations. Our predictions now go much faster. And our app consumes far less power. There is no trade-off (…no extra RAM requirements, nothing. I swear: we checked the fine print). It’s just amazingly wonderful. And it’s free from this Github repository!
Ne10 works like a ‘convenience wrapper’, and handles really useful things like vectorization residuals. It makes much more efficient use of CPU cycles. We see a 5x speed gain on common operations, and over the long run (we are still tuning, but initial results are awesome), we’ll see significant improvement in power consumption at the same time.
Previously, we benchmarked the performance of our indoor localization solution against competitors, (and so have Google). We were ~20% better across the board in terms of speed and accuracy before optimizing with Ne10. Now, thanks to ARM, we are significantly extending that lead.
ARM welcomes its wealth of Partners in the ARM Connected Community (CC) to submit guest blogs to be published on our multiple community blogs. If interested in participating please submit email inquiries to Tell.Us@arm.com.
The ARM Connected Community (CC) is an extensive ecosystem covering all aspects of ARM processor-based design, from chip implementation through to system and device design. The CC provides a platform for collaborative innovation, with multiple types of forums for members to work with one another, and with customers, to solve industry challenges, all with the purpose of enabling designers to focus on differentiating features and an accelerated time-to-market for ARM powered solutions.
0 Comments On This Entry
Please log in above to add a comment or register for an account
Search My Blog
Coding Using NEON Technology
on May 21 2013 08:57 AM
on May 08 2013 06:15 PM
New Platform Bring-Up with ARM® Development Studio 5 (DS-5™)
on Apr 30 2013 09:55 AM
如何利用全志安卓4.0 HDMI Dongle进行ARM DS-5 Streamline性能分析
on Apr 26 2013 10:50 AM
DS-5 Streamline Performance Analyzer on Allwinner Android 4.0 HDMI Dongle
on Apr 25 2013 04:58 PM