I am using the Matlab AHRS filter fusion algorithm with an InvenSense ICM-20948 to determine object orientation. I seem to be obtaining reasonable results however I am getting what appears to be substantial yaw/heading drift (please see attached plot).enter image description here

The Matlab AHRS filter fusion algorithm requires the following hardware/scenario specific parameters to be set (which I think is where my problem is stemming from):

  • Accelerometer noise - variance of accelerometer signal noise $(\frac{m}{s^2})^2$
  • Magnetometer noise - variance of magnetometer signal noise $T^2$

  • Gyroscope noise - variance of gyroscope signal noise $(\frac{rad}{s})^2$

  • Gyroscope drift noise - variance of gyroscope offset drift $(\frac{rad}{s})^2$

  • Linear acceleration noise - variance of linear acceleration noise

  • Linear acceleration decay factor (this appears to be dependent on the application/movement velocity)

  • Magnetic disturbance noise - variance of magnetic disturbance noise $T^2$

  • Magnetic disturbance decay factor - decay factor for magnetic disturbance

  • Expected magnetic field strength (I understand this as being location dependant)

  • Initial process noise - covariance matrix for process noise


I have calibrated my magnetometer to account for hard/soft iron effects. Additionally, I have found and am now using what I believe to be appropriate values for the Accelerometer noise and Gyroscope noise from the ICM-20948 data sheet.

Does anyone know where I may be going wrong or how I may obtain/set/measure any more of the above parameters to perhaps reduce this drift?


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.