typestar

Procesamiento de señales en Python

Picos, filtros y espectros sobre una serie muestreada.

import numpy as np
from scipy import signal

rng = np.random.default_rng(7)
t = np.linspace(0, 2, 400)
limpia = np.sin(2 * np.pi * 3 * t)
ruidosa = limpia + rng.normal(0, 0.4, size=t.size)

picos, props = signal.find_peaks(ruidosa, height=0.5, distance=20)
print(len(picos), props["peak_heights"][:3].round(2))

b, a = signal.butter(4, 0.1, btype="low")
suavizada = signal.filtfilt(b, a, ruidosa)
print(round(float(np.std(ruidosa - limpia)), 3),
      round(float(np.std(suavizada - limpia)), 3))

frecs, potencia = signal.welch(ruidosa, fs=200, nperseg=128)
print(round(float(frecs[np.argmax(potencia)]), 1))

Cómo funciona

  1. find_peaks acepta altura, distancia y prominencia.
  2. butter diseña un filtro; filtfilt lo aplica sin desfase.
  3. detrend quita una tendencia lineal antes del análisis.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
18
Caracteres a escribir
603
Tokens
209
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 114 segundos.

Escribe este fragmento

Paso 2 de 3 en Álgebra lineal y señales; paso 17 de 23 en Computación científica con SciPy.

← Anterior Siguiente →