Guía 2 - Ejercicio 9: Filtrado Butterworth

Resolución Ejercicio 9 - Diseño de Filtro y Aislación de Armónicos

a) Discusión Teórica: Elección del Filtro

Tenemos una onda cuadrada de frecuencia f0=1 Hzf_0 = 1\text{ Hz}. Por nuestro análisis previo de la Serie de Fourier (Ejercicio 4), sabemos que una onda cuadrada simétrica no posee armónicos pares. Su espectro está compuesto únicamente por:

  • Fundamental: 1 Hz1\text{ Hz}
  • 3er armónico: 3 Hz3\text{ Hz}
  • 5to armónico: 5 Hz5\text{ Hz}
  • ... y así sucesivamente.

El objetivo es quedarnos solamente con el primer armónico (la fundamental a 1 Hz1\text{ Hz}). Por lo tanto, necesitamos un Filtro Pasa-Bajos (Low-Pass Filter). Este filtro debe dejar pasar sin atenuar la frecuencia de 1 Hz1\text{ Hz} y aplastar lo máximo posible cualquier frecuencia ≥3 Hz\ge 3\text{ Hz}.

Para evitar atenuar nuestra fundamental y a la vez asegurarnos de matar al tercer armónico, una frecuencia de corte (fcf_c) ideal es 2 Hz2\text{ Hz} (el punto medio entre la fundamental y el primer armónico indeseado). A esta frecuencia, la ganancia del filtro caerá −3 dB-3\text{ dB}, pero para 1 Hz1\text{ Hz} estará casi intacta (ganancia ∼0 dB\sim 0\text{ dB}) y para 3 Hz3\text{ Hz} ya estará fuertemente atenuada.

b) Diseño e Implementación en Python

Para la simulación utilizamos el script ejercicio9.py. En él empleamos la familia de filtros Butterworth, famosa por tener una respuesta lo más plana posible en la banda de paso (maximally flat magnitude), ideal para no distorsionar la amplitud de nuestra fundamental.

  • Frecuencia de Nyquist (fnyqf_{nyq}): Al estar sampleando a 100 Hz100\text{ Hz}, Nyquist es 50 Hz50\text{ Hz}.
  • Frecuencia normalizada (WnW_n): La función scipy.signal.butter exige la frecuencia de corte normalizada entre 00 y 11 (donde 11 representa Nyquist). Wn=2/50=0.04W_n = 2 / 50 = 0.04.
  • Orden (N=4N=4): Un filtro de orden 4 provee una caída (roll-off) de −80 dB/deˊcada-80\text{ dB/década}. Suficientemente agresivo para eliminar el armónico de 3 Hz3\text{ Hz}.

Para aplicar el filtro sobre la señal temporal, en lugar de usar lfilter (que introduce un corrimiento de fase y nos retrasaría la onda sinusoidal), utilizamos filtfilt. Esta función pasa el filtro hacia adelante y luego hacia atrás en el tiempo, cancelando cualquier desfasaje (fase lineal nula), logrando que la sinusoide quede perfectamente alineada con la cuadrada original.

c) y d) Resultados Gráficos

El gráfico generado:

Filtro Butterworth

Consta de tres partes:

  1. Dominio Temporal: Vemos la cuadrada original (negra punteada) y cómo el filtro extrae limpiamente una sinusoide perfecta (roja). La línea azul marca la amplitud teórica esperada (4A/π≈1.274A/\pi \approx 1.27). La onda filtrada coincide maravillosamente con este valor teórico. El filtro destiló exactamente el b1b_1 de Fourier de entre toda la basura de alta frecuencia.
  2. Magnitud (Diagrama de Bode): Muestra la banda de paso plana hasta fc=2 Hzf_c=2\text{ Hz} (-3dB) y luego una caída brutal. En f=1 Hzf=1\text{ Hz} la atenuación es 0 dB0\text{ dB} (multiplica por 1). En f=3 Hzf=3\text{ Hz} la atenuación ya es de casi −20 dB-20\text{ dB} (divide por 10).
  3. Fase: Muestra cómo el filtro IIR crudo alteraría la fase de las componentes. (Recordar que el uso de filtfilt en la práctica anula este efecto bidireccionalmente).

[!infobox] Ejercicio 9: Diseño de Filtros Discretos Contexto: Procesamiento de señales para eliminación de armónicos superiores. Resolución Analítica/Numérica: Se usó un Pasa-Bajos Butterworth de orden 4 con fc=2 Hzf_c = 2\text{ Hz}. Al no existir armónicos en 2 Hz2\text{ Hz} (la cuadrada pasa de 1 Hz1\text{ Hz} a 3 Hz3\text{ Hz}), el filtro pasa la fundamental intacta y suprime al resto. Se aplicó con filtfilt para garantizar desfasaje nulo. Advertencia/Clave: La función signal.butter de scipy requiere la frecuencia de corte normalizada dividiendo por la Frecuencia de Nyquist (fs/2f_s/2), NO por fsf_s. Si pasás el valor absoluto en Hz sin decirle a scipy explícitamente fs=..., el filtro no va a cortar donde vos creés. Siempre validá graficando la respuesta en frecuencia (freqz).