Data Processor

Data processors are functions in the firmware that filter or transform sensor data and are represented by the MblMwDataProcessor struct.

In the C++ API, data processors can be thought of as a data signal whose data is produced by the on-board data processor. As such, a MblMwDataProcessor can be safely typecasted to a MblMwDataSignal.

Processor Id

Name

Functionality

0x01

Passthrough

Allow a specific # of data (samples) through

0x02

Accumulator

Running sum of data

0x02

Counter

Keeps a tally of how many times it is called

0x03

Averager / Low Pass Filter

Computes a running average of the data

0x03

High Pass Filter

Compute the difference of the current value from a running average of the previous N samples

0x06

Comparator

Removes data that do not satisfy the comparison operation

0x07

RMS

Computes the root mean square over multi component data

0x07

RSS

Computes the root sum square, or vector magnitude, over multi component data

0x08

Time

Only allows data to pass at fixed intervals

0x09

Math

Performs arithmetic or logical operations on the data

0x0a

Sample

Only allowing data through once it has collected a set number of samples

0x0b

Pulse

Detects and quantifies a pulse over a set of data

0x0c

Delta

Computes the dif between 2 successive data values and only allows data through that creates a diff > threshold

0x0d

Threshold

Only allows data through that crosses a boundary

0x0f

Buffer

Captures input data which can be read at a later time

0x10

Packer

Combines multiple data samples into 1 BLE packet

0x11

Accounter

Adds additional information to the BTLE packet

0x1b

Fuser

Combine data from multiple sources into 1

This section will focus on the MblMwDataProcessor struct. Details on supported processors and how to create them are covered in the Data Processor Types section.

ID

Data processors are identified by a unique numerical ID; as identified in the table above.

You can retrieve this id by calling mbl_mw_dataprocessor_get_id.

The data processor ID is used to lookup a previously created MblMwDataProcessor object with the mbl_mw_dataprocessor_lookup_id function.

The object is needed to remove/delete processors (see section below).

The object is useful as it can be used as the input to another processor. As such, it is possible to combine processors together for all sorts of functionality.

A high pass filter on the accelerometer data can remove noise which can then be set as the input to an RMM to combine the x,y,z axis data into a signal signal. This can further be set as the input to a comparator or threshold detector to determine if the accelerometer experienced a shock higher than 4Gs.

processor= self.libmetawear.mbl_mw_dataprocessor_lookup_id(self.board, 1)
self.libmetawear.mbl_mw_dataprocessor_remove(processor)

State

Some processors have an internal state that can be read and modified; the internal state is treated as a readable MblMwDataSignal.

In this example, a buffer process is used. The state of the buffer processor is the data in the buffer:

processor = libmetawear.mbl_mw_dataprocessor_lookup_id(board, id)
state_signal = libmetawear.mbl_mw_dataprocessor_get_state_data_signal(processor)
libmetawear.mbl_mw_datasignal_read(state_signal)

The state of the counter processor is the count itself.

# Previously setup the counter in function
processor = mbl_mw_dataprocessor_lookup_id(board, 2)
processor_state = mbl_mw_dataprocessor_get_state_data_signal(processor)
mbl_mw_datasignal_subscribe(processor_state, sensor_data_handler)

Removal

Removing a processor is handled by calling mbl_mw_dataprocessor_remove.

When a processor is removed, all processors that consume its output will also be removed.

processor= self.libmetawear.mbl_mw_dataprocessor_lookup_id(self.board, 1)
libmetawear.mbl_mw_dataprocessor_remove(processor)