Descripción
Implementar el cálculo de la Transformada de Fourier Discreta de una señal, retornando los vectores de frecuencia y magnitud listos para graficar.
Contexto del TP
La consigna pide graficar espectros de Fourier de señales y filtros. Esta función es el núcleo de toda la parte de análisis espectral.
Definición matemática
X(ω) = Σ_{n=0}^{N-1} x[n] · e^{-j·ω·n}
En la práctica (FFT discreta):
X[k] = FFT(x[n])
Magnitud: |X[k]| (espectro de amplitud)
Frecuencias: f[k] = k · fs / N, para k = 0, ..., N/2
Solo se retorna la mitad positiva del espectro (señal real → espectro simétrico).
Función a implementar
Archivo: core/dsp/analysis.py
Parámetros
| Parámetro |
Tipo |
Descripción |
signal |
np.ndarray |
Señal de entrada x[n], arreglo 1D |
fs |
float |
Frecuencia de muestreo en Hz |
Retorno
| Variable |
Tipo |
Descripción |
frequencies |
np.ndarray |
Vector de frecuencias en Hz, de 0 a fs/2 |
magnitudes |
np.ndarray |
Magnitudes |
Criterios de aceptación
| Test |
Qué verifica |
test_fft_dc_signal |
Una señal constante tiene toda su energía en f=0 |
test_fft_sine_peak |
Un seno a 440 Hz tiene su pico en el bin más cercano a 440 Hz |
test_fft_frequency_range |
frequencies[0] == 0 y frequencies[-1] <= fs/2 |
test_fft_lengths_match |
len(frequencies) == len(magnitudes) |
test_fft_positive_magnitudes |
Todos los valores de magnitudes son ≥ 0 |
test_fft_nyquist |
La frecuencia máxima retornada no supera fs/2 |
Notas de implementación
- Usar
np.fft.fft(signal) para calcular la FFT
- Usar
np.fft.fftfreq(N, d=1/fs) para obtener las frecuencias
- Tomar solo la primera mitad: índices
[:N//2]
- La magnitud es
np.abs(X[:N//2]) — resultado siempre real y positivo
- No normalizar por N a menos que sea explícitamente necesario para otro issue
Archivos involucrados
core/dsp/analysis.py
core/dsp/tests/test_analysis.py
Descripción
Implementar el cálculo de la Transformada de Fourier Discreta de una señal, retornando los vectores de frecuencia y magnitud listos para graficar.
Contexto del TP
La consigna pide graficar espectros de Fourier de señales y filtros. Esta función es el núcleo de toda la parte de análisis espectral.
Definición matemática
Solo se retorna la mitad positiva del espectro (señal real → espectro simétrico).
Función a implementar
Archivo:
core/dsp/analysis.pyParámetros
signalnp.ndarrayfsfloatRetorno
frequenciesnp.ndarraymagnitudesnp.ndarrayCriterios de aceptación
test_fft_dc_signaltest_fft_sine_peaktest_fft_frequency_rangefrequencies[0] == 0yfrequencies[-1] <= fs/2test_fft_lengths_matchlen(frequencies) == len(magnitudes)test_fft_positive_magnitudesmagnitudesson ≥ 0test_fft_nyquistNotas de implementación
np.fft.fft(signal)para calcular la FFTnp.fft.fftfreq(N, d=1/fs)para obtener las frecuencias[:N//2]np.abs(X[:N//2])— resultado siempre real y positivoArchivos involucrados
core/dsp/analysis.pycore/dsp/tests/test_analysis.py