Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. 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. La salida 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 en la que 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 object. The axes object 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 muestras faltantes 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 object. The axes object 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 faltantes.

y = medfilt1(x);
plot(y)

Figure contains an axes object. The axes object 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 faltantes 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 object. The axes object 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 object. The axes object 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 object. The axes object 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, la función 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 sobre la que filtrar, especificada como un escalar entero positivo. De forma predeterminada, la función 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.

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a

Consulte también

| | | |