Cómo implementar el filtro Butterworth de paso de banda con Scipy.signal.butter

ACTUALIZAR:

¡Encontré una receta de Scipy basada en esta pregunta! Así que, para cualquier persona interesada, vaya directamente a:Contenidos »Procesamiento de señal» Butterworth Bandpass

Me está costando mucho lograr lo que parecía inicialmente una tarea sencilla de implementar un filtro de paso de banda de Butterworth para una matriz numpy 1-D (series de tiempo).

Los parámetros que tengo que incluir son la frecuencia de muestreo, las frecuencias de corte EN HERTZ y posiblemente el orden (otros parámetros, como la atenuación, la 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 los ejemplos son confusos y oscuros, pero me gustaría implementar el formulario presentado en la recomendación marcada como "para el paso de banda". Los signos de interrogación en los comentarios muestran dónde acabo de copiar y pegar algunos ejemplos sin entender lo que está sucediendo.

No soy ingeniero eléctrico ni científico, solo soy un diseñador de equipos médicos que necesita realizar un filtrado de paso de banda bastante sencillo en señales de EMG.

Respuestas a la pregunta(3)

Su respuesta a la pregunta