Estou com dificuldade para encontrar documentação para implementar o filtro passa-banda ou passa-alto com python / scipy / numpy.
Porém, posso criar e aplicar facilmente um filtro passa-baixo, então pergunto:
Seria conceitualmente correto filtrar um sinal com passa-baixo e subtrair o resultado do sinal original, para obter apenas as altas frequências?
Além disso, se alguém tiver um exemplo simples de um filtro passa-banda ingênuo em Python (preferencialmente usando as bibliotecas numpy e scipy), ficaria muito grato.
O que eu procuro é algo como:
filtered_signal = band_pass(original_signal, rate, low=20, high=500)
Obrigado por qualquer ajuda!
EDIT: com scipy, estou usando isso como passa-baixo, com bons resultados:
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
mostra como criar filtros passa-baixo, passa-alto, passa-banda, pára-banda e multibanda. Você tentoufirwin(taps, cutoff=nfreq, pass_zero=False)
?