Filtro de Mediana

A graph with two peaks with the input closely following the target signal.

A statistically robust alternative to the moving-average filter is the median filter. Where a moving average filter takes the arithmetic mean of the input over a moving sample window, a median filter (per the name) takes a median instead.

El filtro de mediana es el más útil para remover valores atípicos del flujo de entrada. Esto lo hace particularmente bueno para filtrar entradas de sensores distantes, que son propensos a interferencias ocasionales. A diferencia de una media móvil, el filtro de mediana permanecerá intacto por pocas alteraciones de los valores, no importa cuán extremo sean.

The median filter is supported in WPILib through the MedianFilter class (Java, C++, , Python).

Creando un MedianFilter

Nota

La clase MedianFilter de C++ está basada en el tipo de datos usados para la entrada.

Nota

Debido a que los filtros tienen “memoria”, cada entrada de flujo requiere su propio objeto filtro. No intente usar el mismo objeto filtro para múltiples entradas de flujo.

Crear un MedianFilter es simple:

// Creates a MedianFilter with a window size of 5 samples
MedianFilter filter = new MedianFilter(5);
// Creates a MedianFilter with a window size of 5 samples
frc::MedianFilter<double> filter(5);
from wpimath.filter import MedianFilter

# Creates a MedianFilter with a window size of 5 samples
filter = MedianFilter(5)

Usando un MedianFilter

Una vez que su filtro ha sido creado, usarlo es sencillo - simplemente llame al método calculate() con la entrada más reciente para obtener la salida filtrada:

// Calculates the next value of the output
filter.calculate(input);
// Calculates the next value of the output
filter.Calculate(input);
# Calculates the next value of the output
filter.calculate(input)