Transformadas de Fourier en Python
rfft para señales reales, fftfreq para el eje que lo vuelve legible.
import numpy as np
from scipy import fft
tasa = 500
t = np.arange(0, 2, 1 / tasa)
onda = 2 * np.sin(2 * np.pi * 7 * t) + np.sin(2 * np.pi * 40 * t)
espectro = fft.rfft(onda)
frecs = fft.rfftfreq(t.size, d=1 / tasa)
potencia = np.abs(espectro)
cimas = np.argsort(potencia)[::-1][:2]
print(sorted(frecs[cimas].round(1)))
print(round(float(potencia.max()), 1), espectro.dtype)
print(np.allclose(fft.irfft(espectro, n=t.size), onda))
Cómo funciona
rfftdevuelve medio espectro, que es todo lo que una señal real tiene.rfftfreqnecesita el espaciado de muestreo para etiquetar los bins.- El bin del pico es la frecuencia dominante.
Palabras clave y builtins usados aquí
asfloatprintroundsorted
El intento, en números
- Líneas
- 15
- Caracteres a escribir
- 432
- Tokens
- 165
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 90 segundos.
Paso 3 de 3 en Álgebra lineal y señales; paso 18 de 23 en Computación científica con SciPy.