Como implementar filtro passa-faixa Butterworth com Scipy.signal.butter
ATUALIZAR:
Eu encontrei uma receita Scipy com base nesta questão! Então, para qualquer pessoa interessada, vá direto para:Conteúdo »Processamento de sinal» Bandwidem Butterworth
Eu estou tendo dificuldades para conseguir o que parecia inicialmente uma tarefa simples de implementar um filtro passa-banda Butterworth para matriz 1-D numpy (série temporal).
Os parâmetros que tenho que incluir são o sample_rate, as frequências de corte IN HERTZ e possivelmente a ordem (outros parâmetros, como atenuação, frequência natural, etc., são mais obscuros para mim, portanto, qualquer valor "padrão" faria).
O que tenho agora é isso, o que parece funcionar como um filtro passa-alta, mas não tenho certeza se estou fazendo certo:
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
Os documentos e exemplos são confusos e obscuros, mas gostaria de implementar o formulário apresentado no comentário marcado como "para passagem de banda". Os pontos de interrogação nos comentários mostram onde eu apenas copiei e colei alguns exemplos sem entender o que está acontecendo.
Não sou engenheiro elétrico nem cientista, apenas um designer de equipamentos médicos que precisa realizar uma filtragem de passagem de banda bastante simples em sinais de EMG.