MetaMotion C slow sample rates, 0.8 or 1.6 or 3.1 per second

I've been using slow sample rates for animal tracking, just by simply setting odr, e.g. ODR=0.8, or ODR=1.6, or ODR=3.1.
Just want to confirm this is OK?
I got worried by this post, about needing to set Bosch LowPowerMode byte ..? (or maybe it's an old obsolete post?)


  • You can set the ODR to allowed values ONLY. Check the API docs for allowed values.
    If you want even lower ODR rates then the accepted values by BOSCH; you have to use our data processing APIs to reduce the sample rate.

    LowPowerMode is completely different and the bug related to ODR and power mode was fixed back in 2016.

  • Thanks, actually I found ODR is kinda 'rounded' conveniently to the Bosch rates, - hope that's ok!

                          0.0                 0.8 samples-per-second
                          0.1                 0.8 samples-per-second
                          1.0                 0.8 samples-per-second
                          1.1                 0.8 samples-per-second
                          1.2                 1.59 samples-per-second
                          1.4                 1.59 samples-per-second
                          1.5                 1.59 samples-per-second
                          2.0                 1.59 samples-per-second
                          2.1                 1.59 samples-per-second
                          2.2                 1.59 samples-per-second
                          2.3                 1.59 samples-per-second
                          2.4                 3.15 samples-per-second
                          2.5                 3.15 samples-per-second
                          3.0                 3.15 samples-per-second
                          3.1                 3.15 samples-per-second
  • ... and while running at 3 samples-per-second, I was able to get two simultaneous Routes going from the accelerometer, ... comparing the Z-axis and Z-axis low-pass filtered:
    await acc.Acceleration.AddRouteAsync(source => source.Split().Index(2).Stream(data =>
    await acc.Acceleration.AddRouteAsync(source => source.Split().Index(2).LowPass(8).Stream(data =>

    It works ok. But I read somewhere that simultaneous routes are not recommended. Am I on thin ice here ..?

    Regards, .. Tim

  • If it's working, don't worry about it. You could run into issues if you add more complexity down the road.

  • Thanks Laura. Suppose I then want to subtract the two routed streams from each other (e.g. part of a filter algorithm, Z-(LpfZ), is that possible?
    (I'd like to maximise local processing on MetaMotionC if possible, - sample-by-sample subtraction, then act on a threshold difference).

  • edited July 2020

    @TimC there is a high pass filter built into the device which does precisely that. It performs a low pass identical to the filter you are using, and subtracts it from the input to produce the output. In the C++ API it is named mbl_mw_dataprocessor_highpass_create. For the next stage you will likely want to use the Comparison or Multi Value Comparison filter to check if your threshold is exceeded.

Sign In or Register to comment.