Sensor Filters

Modifies a sensor in place and performs some sort of filtering (ie. moving average). This acts on a Sensor source that was either input or created using a sensor transform. This does not create a new source.

Copyright 2017-2024 SensiML Corporation

This file is part of SensiML™ Piccolo AI™.

SensiML Piccolo AI is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

SensiML Piccolo AI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with SensiML Piccolo AI. If not, see <https://www.gnu.org/licenses/>.

Moving Average Sensor Transform

Performs a symmetric moving average filter on the input column, creates a new column with the filtered data.

Parameters
  • input_data – DataFrame containing the time series data.

  • group_columns – columns to group data by before processing.

  • input_column – sensor stream to apply moving average filter on.

  • order (filter) – the number of samples to average to the left and right.

Returns

input data after having been passed through symmetric moving average filter

Streaming Downsample

Downsample the entire dataframe into a dataframe of size filter_length by taking the average over the samples within the filter length.

Parameters
  • input_data – dataframe

  • group_columns (a list) – List of columns on which grouping is to be done. Each group will go through downsampling one at a time

  • input_columns – List of columns to be downsampled

  • filter_length – Number of samples in each new filter length

Returns

The downsampled dataframe.

Return type

DataFrame

Streaming Downsample by Decimation

Decrease the sample rate by a factor of filter_length, this will only keep one samples for every length of the filter.

Parameters
  • input_data – dataframe

  • columns – List of columns to be downsampled

  • group_columns (a list) – List of columns on which grouping is to be done. Each group will go through downsampling one at a time

  • filter_length – integer; Number of samples in each new filter length

Returns

The downsampled dataframe.

Return type

DataFrame

Examples

>>> from pandas import DataFrame
>>> df = DataFrame([[3, 3], [4, 5], [5, 7], [4, 6], [3, 1],
                    [3, 1], [4, 3], [5, 5], [4, 7], [3, 6]],
                    columns=['accelx', 'accely'])
>>> df
Out:
       accelx  accely
    0       3       3
    1       4       5
    2       5       7
    3       4       6
    4       3       1
    5       3       1
    6       4       3
    7       5       5
    8       4       7
    9       3       6
>>> client.pipeline.reset()
>>> client.pipeline.set_input_data('test_data', df, force = True)
>>> client.pipeline.add_transform('Streaming Downsample by Decimation', params={'group_columns':[],                                                            'columns' : ['accelx', 'accely'],                                                            'filter_length' : 5 })
>>> results, stats = client.pipeline.execute()
>>> print results
    Out:
            accelx  accely
        0     3       3
        1     3       1
        2     3       6
High Pass Filter

This is a simple IIR Filter that is useful for removing drift from sensors by subtracting the attentuated running average.

\[y_{i}= y_{i-1} + \alpha (x_{i} - y_{i-1})\]
Parameters
  • input_data – DataFrame containing the time series data

  • input_columns – sensor streams to apply the filter to

  • alpha – attenuation coefficient

Returns

input data after having been passed through the IIR filter