Skip to content

[FEAT] filters.py: Implementar comb_filter() #2

Description

@jero-scafati

Descripción

Implementar el filtro peine (comb filter) definido mediante tres coeficientes y dos muestras de retardo.

Contexto del TP

La consigna pide generar la respuesta al impulso del filtro peine, caracterizarlo en frecuencia (módulo y fase) y analizar cómo varían sus comportamientos al cambiar b0, b1 y b2. El nombre "peine" viene de la forma de su respuesta en frecuencia.

Definición matemática

h[n] = b₀·δ[n] + b₁·δ[n-1] + b₂·δ[n-2]

y[n] = b₀·x[n] + b₁·x[n-1] + b₂·x[n-2]

donde δ[n] es el impulso unitario (1 si n=0, 0 si n≠0).

Función a implementar

Archivo: core/dsp/filters.py

comb_filter(signal, b0, b1, b2)

Parámetros

Parámetro Tipo Descripción
signal np.ndarray Señal de entrada x[n], arreglo 1D
b0 float Coeficiente para muestra actual
b1 float Coeficiente para muestra anterior
b2 float Coeficiente con 2 muestras de retardo

Retorno

Variable Tipo Descripción
y np.ndarray Señal filtrada. Misma longitud que signal

Criterios de aceptación

Test Qué verifica
test_comb_zero_coefficients Con b0=b1=b2=0, la salida es un arreglo de ceros
test_comb_identity Con b0=1, b1=0, b2=0, la salida es igual a la entrada
test_comb_output_length La longitud de salida es igual a la de entrada
test_comb_known_output Para una señal de impulso, la salida debe ser [b0, b1, b2, 0, 0, ...]
test_comb_delay_two Con b0=0, b1=0, b2=1: la salida es la entrada retardada 2 muestras

Notas de implementación

  • La respuesta al impulso de este filtro tiene exactamente 3 coeficientes no nulos
  • Se puede implementar como convolución con h = np.array([b0, b1, b2])
  • Alternativa: implementar el bucle de diferencias directamente (más didáctico)
  • Usar mode='same' si se usa np.convolve

Archivos involucrados

  • core/dsp/filters.py
  • core/dsp/tests/test_filters.py

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions