I'm trying to use a LSM6DS33 6-axis accelerometer/gyro chip as an inertial navigation aid, participating in sensor fusion. The problem is that the application has large amount of vibrations and the accelerometer data is quite noisy. I need around 25 accelerometer samples per second, so to get a smoother signal I have enabled the analog low-pass filter at the lowest BW = 50Hz and the accelerometer ODR is 104 Hz; I average 4 samples manually whilst reading them to get equivalent ODR of 26 Hz with less aliasing.
This is better than before (when there was no low-pass and at 52 Hz ODR), but there's still some noise (around 0.1g peak-to-peak - measured on a vibrating platform that vibrates at ~65 Hz) present in the resulting averaged samples. I verified that increasing the accelerometer ODR to 208 Hz decreases noise (aliasing) further. 416Hz reduces it even further (0.025g p-p). But that needs more I²C traffic and CPU time, so increasing the ODR will be prohibitive.
My question is: is it possible to set up the LSM6DS33 to sample the accelerometer at 833 Hz, average each 8 samples, and put the results in the FIFO (equivalent 104 ODR)? Or put in other way, to get an equivalent low-pass filtering BW lower than 50 Hz, ideally around 12 Hz?
For reference, my current config is:
CTRL1_XL = 0x4F; // acc setup -> 104 Hz, 8 g full scale, 50Hz bandwidth
CTRL2_G = 0x4C; // gyro setup -> 104 Hz, 2000 dps full scale
CTRL3_C = 0x44; // set BDU (block data update) bit high
CTRL4_C = 0x81; // enable FIFO length limit; XL_BW_SCAL_ODR=1
... (and also some unrelated code for setting up the FIFO).