paso pasa kaiser imagenes imagen iir ideal filtros filtro codigo alto altas matlab filter signal-processing digital-filter

matlab - kaiser - filtros pasa altas en imagenes



Filtro de paso alto en MATLAB (3)

Cree su filtro, por ejemplo, usando [B,A] = butter(N,Wn,''high'') donde N es el orden del filtro - si no está seguro de qué es esto, simplemente ajústelo en 10. Wn es el límite frecuencia normalizada entre 0 y 1, donde 1 corresponde a la mitad de la frecuencia de muestreo de la señal. Si su frecuencia de muestreo es fs, y desea una frecuencia de corte de 10 Hz, debe configurar Wn = (10/(fs/2)) .

Luego puede aplicar el filtro usando Y = filter(B,A,X) donde X es su señal. También puede examinar la función filtfilt .

¿Alguien sabe cómo usar filtros en MATLAB? No soy un aficionado, así que no me preocupan las características del balanceo, etc. - Tengo un vector de señal 1 dimensional x muestreado a 100 kHz, y quiero realizar un filtro de paso alto en él (digamos, rechazar cualquier cosa por debajo de 10Hz ) para eliminar la deriva de la línea de base.

Hay filtros Butterworth, Elliptical y Chebychev descritos en la ayuda, pero no hay una explicación simple sobre cómo implementarlos.


Hay varios filtros que se pueden usar, y la elección real del filtro dependerá de lo que intente lograr. Como mencionaste los filtros Butterworth, Chebyschev y Elliptical, supongo que estás buscando filtros IIR en general.

Wikipedia es un buen lugar para comenzar a leer los diferentes filtros y lo que hacen. Por ejemplo, Butterworth es máximo plano en la banda de paso y la respuesta rueda en la banda de parada. En Chebyschev , tienes una respuesta suave, ya sea en la banda de paso (tipo 2) o la banda de detención (tipo 1) y ondas irregulares más grandes en la otra y, por último, en los filtros Elliptical , hay ondas en ambas bandas. La siguiente imagen está tomada de wikipedia .

Entonces en los tres casos, tienes que cambiar algo por otra cosa. En Butterworth, no obtienes ondas, pero la respuesta de frecuencia disminuye más lentamente. En la figura anterior, toma de 0.4 a aproximadamente 0.55 para llegar a la mitad de la potencia. En Chebyschev, obtienes una caída más pronunciada, pero tienes que permitir ondulaciones irregulares y más grandes en una de las bandas, y en elíptica, obtienes un corte casi instantáneo, pero tienes ondas en ambas bandas.

La elección del filtro dependerá completamente de su aplicación. ¿Estás tratando de obtener una señal limpia con poca o ninguna pérdida? Entonces necesitas algo que te dé una respuesta suave en la banda de paso (Butterworth / Cheby2). ¿Estás tratando de matar frecuencias en la banda de stop, y no te importará una pequeña pérdida en la respuesta en la banda de paso? Entonces necesitarás algo que sea suave en la banda de paro (Cheby1). ¿Necesita esquinas de corte extremadamente agudas, es decir, cualquier cosa un poco más allá de la banda de paso es perjudicial para su análisis? Si es así, debes usar filtros elípticos.

Lo que hay que recordar sobre los filtros IIR es que tienen polos. A diferencia de los filtros FIR, donde puede aumentar el orden del filtro con la única ramificación que es el retardo del filtro, aumentar el orden de los filtros IIR hará que el filtro sea inestable. Por inestable, quiero decir que tendrá postes que se encuentran fuera del círculo unitario. Para ver por qué esto es así, puede leer los artículos de la wiki sobre filtros IIR , especialmente la parte sobre estabilidad.

Para ilustrar mejor mi punto, considere el siguiente filtro de paso de banda.

fpass=[0.05 0.2];%# passband fstop=[0.045 0.205]; %# frequency where it rolls off to half power Rpass=1;%# max permissible ripples in stopband (dB) Astop=40;%# min 40dB attenuation n=cheb2ord(fpass,fstop,Rpass,Astop);%# calculate minimum filter order to achieve these design requirements [b,a]=cheby2(n,Astop,fstop);

Ahora, si observa el diagrama de polo cero usando zplane(b,a) , verá que hay varios polos ( x ) que se encuentran fuera del círculo unitario, lo que hace que este enfoque sea inestable.

y esto es evidente por el hecho de que la respuesta de frecuencia es totalmente descontrolada. Use freqz(b,a) para obtener lo siguiente

Para obtener un filtro más estable con sus requisitos de diseño exactos, deberá usar filtros de segundo orden usando el método zpk lugar de ba , en MATLAB. Así es como para el mismo filtro que el anterior:

[z,p,k]=cheby2(n,Astop,fstop); [s,g]=zp2sos(z,p,k);%# create second order sections Hd=dfilt.df2sos(s,g);%# create a dfilt object.

Ahora, si observas las características de este filtro, verás que todos los polos se encuentran dentro del círculo unitario (por lo tanto, son estables) y coinciden con los requisitos de diseño

El enfoque es similar para la butter y el ellip , con buttord y ellipord equivalentes. La documentación de MATLAB también tiene buenos ejemplos sobre el diseño de filtros. Puede basarse en estos ejemplos y en los míos para diseñar un filtro de acuerdo con lo que desee.

Para usar el filtro en sus datos, puede filter(b,a,data) o filter(Hd,data) dependiendo de qué filtro use. Si desea una distorsión de fase cero, use filtfilt . Sin embargo, esto no acepta objetos dfilt . Entonces, para el filtro de fase cero con Hd , use el archivo filtfilthd disponible en el sitio de intercambio de archivos de Mathworks

EDITAR

Esto es en respuesta al comentario de @DarenW. El suavizado y el filtrado son dos operaciones diferentes, y aunque son similares en algunos aspectos (el promedio móvil es un filtro de paso bajo), no puede simplemente sustituir uno por otro a menos que pueda estar seguro de que no será de preocupación en la aplicación específica.

Por ejemplo, implementando la sugerencia de Daren sobre una señal de chirrido lineal de 0-25kHz, muestreada a 100kHz, este el espectro de frecuencia después del suavizado con un filtro Gaussiano

Claro, la deriva cerca de 10Hz es casi nula. Sin embargo, la operación ha cambiado por completo la naturaleza de los componentes de frecuencia en la señal original. Esta discrepancia se produce porque ignoraron por completo la caída de la operación de suavizado (ver línea roja), y supusieron que sería cero plano. Si eso fuera cierto, la resta habría funcionado. Pero, por desgracia, ese no es el caso, por lo que existe un campo completo para diseñar filtros.


Una manera barata de hacer este tipo de filtrado que no implique forzar las células cerebrales en el diseño, los ceros y los polos y las ondas y todo eso, es:

* Make a copy of the signal * Smooth it. For a 100KHz signal and wanting to eliminate about 10Hz on down, you''ll need to smooth over about 10,000 points. Use a Gaussian smoother, or a box smoother maybe 1/2 that width twice, or whatever is handy. (A simple box smoother of total width 10,000 used once may produce unwanted edge effects) * Subtract the smoothed version from the original. Baseline drift will be gone.

Si la señal original es puntiaguda, es posible que desee utilizar un filtro mediano corto antes del gran suavizador.

Esto se generaliza fácilmente a imágenes 2D, datos de volumen 3D, lo que sea.