For an trajectory estimation project using BMX055 IMU, it looks like all 3 sensors(acc,gyro,mag) inside the IMU have different and unsync data rates. Accelerometer provides 7.81, 15.63, 31.25, 62.5, 125, 250, 1000, 2000 Hz options. Gyroscope provides 100,200,400,1000,2000 Hz and magnetometer 2,6,8,10,15,20,25,30 Hz rates. Considering a dead-reckoning application using a fusion algorithm:

  1. Is there a relationship between the case that sampling rates are exactly multiple of each other and algorithm's(mahony,madgwick,kalman,dcm..) success?
  2. If 125Hz for accelerometer and 100Hz for gyroscope are selected, what speed the fusion method need to work? Selecting 100Hz and discarding 25 accelerometer sample or selecting 125Hz and repeating 25 gyroscope sample when running the algorithm.
  3. Sensors sampling are not sync with each other. Does it cause a problem for fusion?
  4. How to select data rate(bandwidth) of IMU sensors with considering application? Can we say higher sampling rates are better everytime?
  • \$\begingroup\$ If the sensor sampling is not in sync, it could be a problem if the sample rate is too low relative to the bandwidth. If it is a problem, here is a concept that might help you: ednasia.com/… \$\endgroup\$
    – DKNguyen
    Aug 16, 2020 at 21:16

1 Answer 1


With respect to questions 1-3:

According to the datasheet, this really is three completely independent sensors that happen to be in the same package, and there's no way to synchronize their sampling.

You have a couple of choices with this kind of sensor.

The first choice would be to timestamp each new sensor reading, and run the update algorithm as soon as new data is available, using the Δt between the previous update and the current sample's timestamp. This can be tricky to implement, and is recommended only if you really need sub-sample resolution in your fused data stream.

The second choice is to asynchronously re-sample all of the input data to a common sample rate and run your update at that common rate. There are a number of different interpolation algorithms you could use for resampling, but by far the simplest (and lowest latency) is the "zero-order hold" — you simply use the latest available data from each sensor channel at the time that the update runs.

On question 4, the bandwidth for each sensor should be set to the bandwidth you care about in your application. Higher is generally better, but at the cost of increased CPU load to process all of the updates.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.