UPDATE :
J'ai trouvé une recette Scipy basée sur cette question ! Donc, pour toute personne intéressée, allez directement à : Contenu " Traitement du signal " Passe-bande de Butterworth
J'ai du mal à réaliser ce qui semblait initialement une tâche simple, à savoir la mise en œuvre d'un filtre passe-bande Butterworth pour un tableau numpy 1-D (séries temporelles).
Les paramètres que je dois inclure sont le sample_rate, les fréquences de coupure en HERTZ et éventuellement l'ordre (d'autres paramètres, comme l'atténuation, la fréquence naturelle, etc. sont plus obscurs pour moi, donc toute valeur "par défaut" ferait l'affaire).
Ce que j'ai maintenant est ceci, qui semble fonctionner comme un filtre passe-haut mais je ne suis pas sûr de le faire correctement :
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
La documentation et les exemples sont confus et obscurs, mais j'aimerais mettre en œuvre la forme présentée dans le commentaire marqué comme "pour le passe-bande". Les points d'interrogation dans les commentaires montrent les endroits où j'ai simplement copié-collé un exemple sans comprendre ce qui se passe.
Je ne suis ni ingénieur électricien ni scientifique, juste un concepteur d'équipement médical qui doit effectuer un filtrage passe-bande assez simple sur des signaux EMG.