J'ai du mal à trouver de la documentation pour implémenter un filtre passe-bande ou passe-haut avec python / scipy / numpy.
Je peux facilement créer et appliquer un filtre passe-bas, donc je demande:
Serait-il conceptuellement correct de filtrer passe-bas un signal, puis de soustraire le résultat du signal d'origine, afin d'obtenir uniquement les hautes fréquences?
De plus, si quelqu'un a un exemple simple d'un filtre passe-bande naïf en Python (utilisant de préférence les bibliothèques numpy et scipy), je serais très reconnaissant.
Ce que je recherche, c'est quelque chose comme:
filtered_signal = band_pass(original_signal, rate, low=20, high=500)
Merci pour toute aide!
EDIT: avec scipy, je l'utilise comme passe-bas, avec de bons résultats:
import numpy, scipy.signal
def firfilt(interval, freq, sampling_rate):
nfreq = freq/(0.5*sampling_rate)
taps = sampling_rate + 1
a = 1
b = scipy.signal.firwin(taps, cutoff=nfreq)
firstpass = scipy.signal.lfilter(b, a, interval)
## second pass to compensate phase delay
secondpass = scipy.signal.lfilter(b, a, firstpass[::-1])[::-1]
return secondpass
scipy.signal.firwin
explique comment créer des filtres passe-bas, passe-haut, passe-bande, coupe-bande et multi-bandes. As-tu essayéfirwin(taps, cutoff=nfreq, pass_zero=False)
?