ACTUALIZAR:
¡Encontré una Receta Scipy basada en esta pregunta! Entonces, para cualquier persona interesada, vaya directamente a: Contenido »Procesamiento de señales» Butterworth Bandpass
Estoy teniendo dificultades para lograr lo que inicialmente parecía una tarea simple de implementar un filtro de paso de banda de Butterworth para una matriz numpy 1-D (serie temporal).
Los parámetros que tengo que incluir son el sample_rate, las frecuencias de corte EN HERTZ y posiblemente el orden (otros parámetros, como atenuación, frecuencia natural, etc. son más oscuros para mí, por lo que cualquier valor "predeterminado" sería suficiente).
Lo que tengo ahora es esto, que parece funcionar como un filtro de paso alto, pero no estoy seguro de si lo estoy haciendo bien:
def butter_highpass(interval, sampling_rate, cutoff, order=5):
nyq = sampling_rate * 0.5
stopfreq = float(cutoff)
cornerfreq = 0.4 * stopfreq # (?)
ws = cornerfreq/nyq
wp = stopfreq/nyq
# for bandpass:
# wp = [0.2, 0.5], ws = [0.1, 0.6]
N, wn = scipy.signal.buttord(wp, ws, 3, 16) # (?)
# for hardcoded order:
# N = order
b, a = scipy.signal.butter(N, wn, btype='high') # should 'high' be here for bandpass?
sf = scipy.signal.lfilter(b, a, interval)
return sf
Los documentos y ejemplos son confusos y oscuros, pero me gustaría implementar el formulario presentado en el elogio marcado como "para paso de banda". Los signos de interrogación en los comentarios muestran dónde simplemente copié y pegué un ejemplo sin comprender lo que está sucediendo.
No soy ingeniero eléctrico ni científico, solo un diseñador de equipos médicos que necesita realizar un filtrado de paso de banda bastante sencillo en las señales EMG.