## Filter Toolkit

The filter toolkit is a set of blueprints which can used to process signals. It allows us to get smoother values from a signal, and thus allows us to easily process this signal.

An example of raw signals is what we can get from the accelerometer or from the magnetometer. Using a filter allow us to have more stable values from these inputs. However, it’s not limited to this kind of use case: everytime you have a raw or unstable behavior, and you want to smooth it, then the Filter Toolkit can be used.

Note: A basic knowledge of signal processing is advised.

### Principle of the filters

All the filters in the Filter Toolkit are *ActorComponent*. They must be added to an actor before being used. Every filter proposes a set of parameters.

The only function of all filters is *GetValue* which takes an input (usually a float from a signal) and returns a filtered output.

The state of the filter is changing after each input, so you can’t expect the same result by calling *GetValue* two successive times.

If you are processing a temporal signal, the period between two successive calls of *GetValue* should be constant (the sampling of the input signal is supposed to be regular).

### The filters

- Low-pass threshold filter

If the difference between the current input and the last output is above a threshold (which is a parameter of the filter).

- High-pass threshold filter

If the difference between the current input and the last output is below a threshold (which is a parameter of the filter).

- Derivative filter

The output is the difference between the current input and the previous input.

- Mean filter

The output is the mean of the last N inputs where N is the size of the filter (the only parameter).

A mean filter for vectors is provided: it applies a mean filter on each component of the input vector.

- Median filter

The output is the median of the last N inputs where N is the size of the filter (the only parameter).

- Kernel filter

It works like the mean filter, except that all previous inputs are weighted according to the values in an array (the kernel).

- Dynamic kernel filter

It works like the kernel filter, excepts that the *GetValue* takes two parameters: the input and the weight of this input. The jernel is then dynamically updated using the provided weights.

- IIR Filter

It is an infinite impulse response filter, according to this definition. The two parameters of this filter are the input kernel (the weights applied to the input) and the output kernel (the weights applied to the output).

### PID controller

The Filter Toolkit also contains a PID controller component. The purpose of the PID controller is to estimate the good input to apply to a system in order to have this system produce a given output. This component takes 4 parameters:

- Target: the desired output
- Kp: the proportional gain applied to the error (the difference between the target and the input)
- Ki: the integration gain applied to the error
- Kd: the derivative gain applied to the error