Estou tentando filtrar um sinal pela HP filtrando-o por LP e subtraindo a saída do filtro original. Para obter o sinal filtrado por LP, eu retrocedi para a frente usando um filtro Butterworth de terceira ordem para um sinal de 16.000 amostras. A frequência de corte foi de 0,5 Hz a 250 Hz. Nenhuma janela foi usada.
Nos primeiros 85% ou mais das amostras, a saída desse método parece se sobrepor completamente ao sinal realmente filtrado por HP. No entanto, no final da saída, há um fenômeno supostamente sincero.
- O que causa isso?
- O que eu poderia mudar para tornar esse método viável?
Aqui estão os dois sinais sobrepostos. O azul é filtrado por HP e o vermelho é obtido por subtração.
Aqui está a diferença absoluta por amostra. Eles nunca são exatamente iguais; a diferença mínima é 8e-12. 87% dos valores estão abaixo de 0,01.
(Se houver uma maneira melhor de obter um filtro HP do de um filtro LP , ficaria feliz em saber.)
fonte
Respostas:
Methinks @ hotpaw2 está no caminho certo. Meu palpite é que o filtfilt não está lidando corretamente com as condições iniciais do filtro reverso. Parece um problema muito difícil - acho que não posso culpar o Mathworks por errar ...
A correção parece fácil para mim: coloque o zero no final do seu sinal até que o sinc desapareça e exclua o preenchimento (agora diferente de zero!) Após o filtro.
fonte
Você está criando um filtro de retrocesso para um e outro somente para o outro. Assim, os dois filtros se comportarão de maneira diferente em uma ou nas duas bordas.
Se o seu sinal é fortemente estacionário e exatamente periódico no comprimento da janela de dados, você pode tentar agrupar os dados circularmente e iniciar os filtros de acordo com os comprimentos de resposta ao impulso.
fonte
filtfilt
ebutter(3,0.5/250,high)
). O sinal é de um ECG que não posso esperar que seja exatamente periódico.