Main Content

La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.

medfilt1

Filtrado de mediana de 1D

Descripción

y = medfilt1(x) aplica un filtro de mediana unidimensional de tercer orden al vector de entrada, x. La función considera que la señal es 0 más allá de los puntos finales. El resultado, y, tiene la misma longitud que x.

ejemplo

y = medfilt1(x,n) aplica un filtro de mediana unidimensional de n-ésimo orden a x.

y = medfilt1(x,n,blksz,dim) o y = medfilt1(x,n,[],dim) especifica la dimensión, dim, a lo largo de la cual opera el filtro. blksz es necesario para la compatibilidad con versiones anteriores y se ignora.

ejemplo

y = medfilt1(___,nanflag,padding) especifica cómo se tratan los valores NaN en cada segmento, utilizando cualquier argumento de entrada de sintaxis anteriores. Esta sintaxis también especifica padding, el tipo de filtrado realizado en los extremos de la señal.

nanflag y padding pueden aparecer en cualquier lugar después de x en la llamada a la función.

Ejemplos

contraer todo

Genere una señal sinusoidal muestreada durante 1 segundo a 100 Hz. Añada una sinusoide de alta frecuencia para simular ruido.

fs = 100;
t = 0:1/fs:1;
x = sin(2*pi*t*3)+0.25*sin(2*pi*t*40);

Utilice un filtro de mediana de 10.º orden para suavizar la señal. Represente el resultado.

y = medfilt1(x,10);

plot(t,x,t,y)
legend('Original','Filtered')
legend('boxoff')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Filtered.

Genere una señal de dos canales compuesta de sinusoides de diferentes frecuencias. Coloque picos en lugares aleatorios. Utilice NaN para añadir las muestras no encontradas de forma aleatoria. Reinicie el generador de números aleatorios para obtener resultados reproducibles. Represente la señal.

rng('default')

n = 59;
x = sin(pi./[15 10]'*(1:n)+pi/3)';

spk = randi(2*n,9,1);
x(spk) = x(spk)*2;
x(randi(2*n,6,1)) = NaN;

plot(x)

Figure contains an axes. The axes contains 2 objects of type line.

Filtre la señal utilizando medfilt1 con los valores predeterminados. Represente la señal filtrada. De forma predeterminada, el filtro asigna NaN a la mediana de cualquier segmento con muestras no encontradas.

y = medfilt1(x);
plot(y)

Figure contains an axes. The axes contains 2 objects of type line.

Trasponga la señal original. Fíltrela de nuevo, especificando que la función funcione a lo largo de las filas. Excluya las muestras no encontradas al calcular las medianas. Si deja vacío el segundo argumento, medfilt1 utiliza el orden de filtro predeterminado de 3.

y = medfilt1(x',[],[],2,'omitnan');
plot(y')

Figure contains an axes. The axes contains 2 objects of type line.

La función no puede asignar un valor al segmento que únicamente contiene NaN. Incremente la longitud del segmento para solucionar este error. El cambio también elimina el valor atípico de manera más precisa.

y = medfilt1(x,4,'omitnan');
plot(y)

Figure contains an axes. The axes contains 2 objects of type line.

El relleno de cero predeterminado hace que la función subestime los valores de la señal en los extremos. Reduzca este efecto utilizando ventanas decrecientes para calcular las medianas en los extremos.

y = medfilt1(x,4,'omitnan','truncate');
plot(y)

Figure contains an axes. The axes contains 2 objects of type line.

Argumentos de entrada

contraer todo

Señal de entrada, especificada como un vector con valor real, matriz o arreglo N-D.

Tipos de datos: single | double

Orden del filtro de mediana unidimensional, especificado como un escalar entero positivo.

  • Cuando n es impar, y(k) es la mediana de x(k-(n-1)/2:k+(n-1)/2).

  • Cuando n es par, y(k) es la mediana de x(k-n/2:k+(n/2)-1). En este caso, medfilt1 ordena los números y toma la media de los dos elementos centrales de la lista ordenada.

Ejemplo: Si n = 11, entonces y(k) es la mediana de x(k-5:k+5).

Ejemplo: Si n = 12, entonces y(k) es la mediana de x(k-6:k+5).

Tipos de datos: double

Dimensión para filtrar, especificada como un escalar entero positivo. De forma predeterminada, medfilt1 opera a lo largo de la primera dimensión no singular de x. En particular, si x es una matriz, la función filtra sus columnas para que y(:,i) = medfilt1(x(:,i),n).

Tipos de datos: double

Condición NaN, especificada como 'includenan' o 'omitnan'.

  • 'includenan': devuelve la señal filtrada para que la mediana de cualquier segmento que contiene NaN sea también NaN.

  • 'omitnan': devuelve la señal filtrada para que la mediana de cualquier segmento que contiene NaN sea la mediana de los valores no NaN. Si todos los elementos de un segmento son NaN, el resultado es NaN.

Filtrado de puntos finales, especificado como 'zeropad' o 'truncate'.

  • 'zeropad': considera que la señal es cero más allá de los puntos finales.

  • 'truncate': calcula la mediana de segmentos más pequeños a medida que alcanza los extremos de la señal.

Argumentos de salida

contraer todo

Señal filtrada, devuelta como un vector con valor real, matriz o arreglo N-D. y es del mismo tamaño que x

Tipos de datos: double

Sugerencias

Si tiene una licencia para el software Image Processing Toolbox™, puede utilizar la función medfilt2 (Image Processing Toolbox) para realizar un filtrado de mediana bidimensional.

Referencias

[1] Pratt, William K. Digital Image Processing. 4th Ed. Hoboken, NJ: John Wiley & Sons, 2007.

Consulte también

| | | |

Introducido antes de R2006a