Non riesco a trovare la documentazione per implementare il filtro passa-banda o passa-alto con python / scipy / numpy.
Tuttavia, posso facilmente creare e applicare un filtro passa-basso, quindi chiedo:
Sarebbe concettualmente corretto filtrare un segnale passa-basso, quindi sottrarre il risultato dal segnale originale, al fine di ottenere solo le alte frequenze?
Inoltre, se qualcuno ha un semplice esempio di un ingenuo filtro passa-banda in Python (preferibilmente usando le librerie intorpidite e scipy), sarei molto grato.
Quello che cerco è qualcosa di simile:
filtered_signal = band_pass(original_signal, rate, low=20, high=500)
Grazie per qualsiasi aiuto!
EDIT: con scipy, sto usando questo come passa-basso, con buoni risultati:
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
spiega come realizzare filtri passa-basso, passa-alto, passa-banda, passa-banda e multi-banda. Ci hai provatofirwin(taps, cutoff=nfreq, pass_zero=False)
?