Skip to content

[FEAT] filters.py: Implementar moving_average() #1

Description

@jero-scafati

Descripción

Implementar el filtro de media móvil con soporte para 1, 2 y 3 pasadas consecutivas.
Este filtro es el punto de partida del TP — del cual dependen las secciones de análisis, comparación y filtrado.

Contexto del TP

La consigna pide generar la respuesta al impulso del filtro de media móvil y caracterizarlo en frecuencia para M variable. También pide aplicarlo con 1, 2 y 3 pasadas y analizar las diferencias.

Definición matemática

h[n] = 1/M     para n = 0, 1, ..., M-1
h[n] = 0       en cualquier otro caso

y[n] = Σ x[k] · h[n-k]     (convolución discreta)

Para múltiples pasadas: aplicar la convolución secuencialmente. El resultado de cada pasada es la entrada de la siguiente.

Función a implementar

Archivo: core/dsp/filters.py

moving_average(signal, M, passes=1)

Parámetros

Parámetro Tipo Descripción Restricciones
signal np.ndarray Señal de entrada x[n], arreglo 1D longitud ≥ M
M int Tamaño de la ventana del filtro M ≥ 1
passes int Cantidad de pasadas (1, 2 ó 3). Default: 1 1 ≤ passes ≤ 3

Retorno

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

Criterios de aceptación — tests que deben pasar

Los tests están en core/dsp/tests/test_filters.py.

Test Qué verifica
test_moving_average_dc_preservation Una señal constante filtrada debe seguir siendo constante (el filtro no altera la DC)
test_moving_average_output_length len(output) == len(input) para cualquier M válido
test_moving_average_passes_smoothness La señal con 2 pasadas debe tener menor varianza que con 1 pasada sobre una señal ruidosa
test_moving_average_m1_identity Con M=1 la salida debe ser idéntica a la entrada
test_moving_average_known_output Para una señal corta conocida y M=3, verificar los valores exactos de salida

Notas de implementación

  • Para construir h[n]: np.ones(M) / M
  • Para la convolución usar np.convolve(signal, h, mode='same')
  • El bucle de múltiples pasadas opera sobre el resultado de la pasada anterior, no sobre signal directamente
  • No modificar el arreglo signal recibido como argumento

Archivos involucrados

  • core/dsp/filters.py — aquí va la implementación
  • core/dsp/tests/test_filters.py — aquí están los tests (ya escritos)

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions