Bmi160 questions


I've got a MetaWear RG board with the Bmi160 accelerometer. I have three questions please if anyone knows:

1. Precision
All the data I've managed to log or stream (having started with the tutorial and the starter app for Android) is limited to 3 decimal places. The chip, I believe, has 16 bit resolution which I think means that even when used in the 16g range the resolution should be down to 0.00048 (i.e., 32/(2^16)). Is it possible to get better resolution that 3 dp?

2. Sampling rate
According to the documentation using the fromHighFreqAxes function one should be able to get a 1.6 kHz sampling rate. However, when I have tried this I am only getting perhaps 25% of the number of samples expected in my Android log over a given period (I have timed a few secs and counted the entries). I have found that the highest sampling rate I can actually use is 400 Hz. 

3. High pass filter
Does this chip support high pass filtering or would I need to use the MMA8452Q chip?

Thanks a lot!


    1. Those values are simply how they are displayed as a string.  You can use String.format to set how many decimals should be show in the string
    2. High freq lets you stream at higher frequencies but you are still bound by the 100Hz throughput limitation by the BLE radio.  The fastest you can realistically stream is 250Hz for one accelerometer.
    3. There is no high pass filter built into the BMI160 chip 
  • Hi Eric. Thanks a lot for the reply. Sorry but I can't figure out how to apply what you said about using String.format - would you mind just providing a little example please?

    When I set a breakpoint to inspect the message object I can evaluate the expression msg.getData(CartesianFloat.class) and see that this is what returns the 3dp values to the log. I guess I could in theory pass in another class? I have also inspected the message object and can see that ((Bmi160ThreeAxisMessage) msg).scaledValues will return 3 axes data to 9 dp but I can't access this in code because it is a private variable of the class and there is no getter.

  • Actually I've worked it out. Instead of using gradle to manage the Metawear API dependency I downloaded the whole API from github and put it in my project. I was then able to edit the CartesianFloat class to return 6dp.

    By the way i really do seem to be able to stream 400Hz without any problems - or am I missing something?

Sign In or Register to comment.