Problems with acc/gyro sample rate in iOS


I'm having trouble achieving the gyro/acc sample rate that I want. Device is a CPRO. Let's say I specify the sampleFrequency property to 100 Hz, I measure 92-93 Hz streaming (both with gyro or acc). If I stream both gyro and acc simultaneously, I get around 87 Hz.

If I specify 50 Hz, the measured sample rate is about 48 Hz (47 Hz with both gyro/acc streaming). I simply measure it by counting the samples and dividing by the elapsed time.

Any ideas what this might be?



  • It appears that packets are being dropped due to the high frequency of the stream which is to be expected as Bluetooth LE is not meant for high frequency traffic.  You can try to get the phone as close as possible to your board to improve signal strength or you will have to use logging.
  • Hm, I have other BLE IMUs that can handle 100 Hz streaming.

    Why do you state "Sensor data can stream at up to 200Hz using the Bluetooth Low Energy link. " in your product description?

    I guess there is something to gain in optimising Firmware+API?
  • That description is wrong and will be fixed, apologies for the mistake and any confusions.  100Hz is the the highest stable frequency that we have observed the BTLE handle.

    You can check if my assumption about dropped packets is correct or not by both logging and streaming the data for about 30 seconds and then comparing both outputs to see if they match up.

    Also, what iOS device and operation system are you using?
  • hey jakobve, I was having exactly the same problem you are: 
    I came to the same conclusion you did. There's something wrong with the firmware/api. Even specifying low data rates, I couldn't get the expected data rate. I ended up giving up on this board. With the data rate problems combined with the completely broken magnetometer (serious design flaw), this board is unusuable.
  • Glad others have had the same problem.  For me it won't even acquire a reliable 25 Hz accelerometer signal.  Numerous dropped packets and an actual sample rate of about 16 Hz.    

    Can this be improved by turning off some of the other sensors and is there an option to get the time stamp from the packet to at least have a reliable time even if it's not regular?
  • If you need reliable timestamps, you'll have to log the data on-board.
  • I have the same issue. 
    I'm streaming accelerometer and gyro data simultaneously at 50hz. I'm receiving between 44 and 48 data entries per second/per sensor. If i change the frequency to, for example 60hz, i'm getting about 80 data entries per second and so on. Summarized: I'll never get frequency i specified.  

    Obviously, this can't be a BLE issue, but rather a firmware problem.

    - Tim 
  • Yes, this has been confirmed to be an issue with how the firmware handles interrupts from the BMI160 and BMA255 sensors.  We are working on getting a fix into the next firmware update.
  • When will be the next update available? 
    Thank you 
  • Ideally sometime in the next two weeks, could be longer.  In short, when it's ready.
This discussion has been closed.