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)
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
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.pyParámetros
signalnp.ndarrayMintpassesintRetorno
ynp.ndarraysignal(modosame)Criterios de aceptación — tests que deben pasar
Los tests están en
core/dsp/tests/test_filters.py.test_moving_average_dc_preservationtest_moving_average_output_lengthlen(output) == len(input)para cualquier M válidotest_moving_average_passes_smoothnesstest_moving_average_m1_identitytest_moving_average_known_outputNotas de implementación
np.ones(M) / Mnp.convolve(signal, h, mode='same')signaldirectamentesignalrecibido como argumentoArchivos involucrados
core/dsp/filters.py— aquí va la implementacióncore/dsp/tests/test_filters.py— aquí están los tests (ya escritos)