High Frequency Streams for Processed Signals

Hi there,

we tried switching from reading accelerometer and gyroscope signals from their respective modules to using the sensor fusion module on a MetaMotion R board. We use the pymetawear python library, that is using your c++ api at v0.7.10.

We previously streamed acc and gyro at 50Hz, together with magnetometer readings at 25Hz, using high frequency streams.
Using Time Data Processors, we also tried to get a similar setup using the Sensor Fusion data signals, by setting them to 50Hz for acc and gyro and 25Hz for quaternions.
Unfortunately, with this setup we only get 33Hz for acc and gyro and 20Hz for the quaternion signal.

We assume, that we don't get higher data rates because each sample is sent as a new ble packet when using sensor fusion instead of 3 samples per packet when using high frequency streams. Would you support that assumption?
Do you plan on implementing some kind of high frequency output for processed (sensor fusion) signals?


  • Sensor fusion output does not support high frequency streaming so you should stream raw acc and gyro data, and use time processor to reduce quaternion to 25Hz.
  • Hi Eric, 

    thanks for your reply.
    I just read your (C++) docs on Sensor Fusion again, and it is stated there:

    "When using the sensor fusion algorithm, it is important that you do not simultaenously use the Accelerometer, Gyro, and Magnetometer modules; the algorithm configures those sensors internally based on the selected fusion mode."

    Doesn't this mean, I can't stream accelerometers and gyroscope at 50Hz, as it is configured by the Sensor Fusion module to stream at 100Hz?
    I just tried streaming the raw (unconfigured, apart from setting high frequency) acc and gyro streams, together with a quaternion stream from sensor fusion processed by a time processor (set to a delay of 40ms for a 25Hz stream), and I get ~41Hz for acc and gyro and ~8Hz for quaternions, which is quite strange, as it seems significantly lower than what we got when using raw acc, gyro and mag.
  • I am able to stream raw acc / gyro (100hz each) along with quaternions (25Hz) without any issue on Android.

    Try reducing the max connection interval to 7.5ms before configuring the board.
  • edited February 2017
    Thank you for reproducing our settings!

    We will try to stream on Android to see if we can also get it to work there, and then to duplicate it under linux.

    Just to clarify some things:
    We already reduced the max connection interval by calling (c++ api):
    libmetawear.mbl_mw_settings_set_connection_parameters(board, 7.5, 7.5, 0, 6000) 

    Is this what you meant? 
    When you say "before configuring the board", do you mean "before configuring any signals and modules", or even "before calling libmetawear.mbl_mw_metawearboard_initialize"?

    And to fully understand you:
    1. you configured the sensor fusion module (NDOF, 8G?, 2000DPS?) 
    2. you routed (only) quaternion data to a time data processor (new Time(Time.OutputMode.ABSOLUTE, 40)) and attach a monitor
    3. you enable high frequency streaming by using fromHighFreqAxes().stream, but without configuring either acc nor gyro
    4. you enable sensor fusion sampling (sensorFusion.start(SensorFusion.DataOutput.QUATERNIONS);)
    5. you enable acc and gyro sampling (accelModule.enableAxisSampling(); accelModule.start();)
  • This post might solve your Linux issue.

    Initializing the API is always the first thing to do so after calling initialize.

    I used 16G for acc range but everything else is the same.
This discussion has been closed.