Filtro passa-alto de 0,01 Hz para desvios lentos do EEG


10

Estou tentando fazer um filtro passa-alto para conjuntos de dados eletroencefalográficos (EEG), para me livrar de desvios muito lentos. No entanto, frequências em torno de 0,3 Hz são muito importantes para a pesquisa que esses dados servem.

Eu uso o Matlab e tentei várias coisas. Parece que uma atenuação de dB muito baixa, de 3 dB, é boa com filtros FIR. Por exemplo, eu usei isso:

h=fdesign.highpass('Fst,Fp,Ast,Ap',0.005,0.01,3,1,250); % i needed to cut 
d=design(h,'butter');
fvtool(d)

No entanto, este filtro faz uma variação de CC no início dos dados e eu não gostaria de perder esses primeiros pontos de dados.

Li nas suas páginas que uma idéia inteligente é projetar um filtro passa-baixo que posteriormente subtrairia dos dados reais. Fiz isso com um filtro de duas vias e funcionou, mas deixou um aumento na linha de base. Não quero executar agora a remoção média, pois esta é uma próxima etapa do protocolo de análise.

Alguma sugestão?


11
Então o problema é apenas a resposta inicial do filtro? Esses dados pré-gravados podem ser anexados com zeros ou são em tempo real?
Endolith 20/10

A abordagem lowpass-and-subtract também sofrerá com o problema que você está vendo. O problema é que todo filtro tem atraso. Os filtros com pontos de corte nítidos, como o desejado, podem ter atrasos muito longos. Não sei por que você faria a remoção média em seguida; o ganho DC do filtro que você mostrou é zero; portanto, não haverá média apreciável para remover (exceto o período transitório no início da saída devido ao atraso do filtro).
Jason R

Respostas:


6

Você está pedindo uma máquina do tempo: para evitar o colapso DC em , você precisa conhecer o estado do filtro como se estivesse em funcionamento antes do início da gravação. Isso não vai acontecer, não importa que tipo de filtro você use.t=0

Aqui está um truque que pode ser útil para você. Digamos que você tenha um filtro -tap FIR (ou um filtro IIR cuja resposta ao impulso decaia adequadamente para 0 após amostras). Pegue as primeiras amostras do seu sinal, inverta-as e coloque-as no início do seu sinal. Com efeito, estamos definindo um novo sinal para fins de filtragem. Quando você filtrar isso, o estado do filtro já terá sido "preparado" com o sinal inicial: exclua as primeiras amostras da saída e esperamos que o dump CC tenha desaparecido.N N g ( t ) = g ( - t ) = f ( t ) NNNNg(t)=g(t)=f(t)N

Escusado será dizer que existem inúmeras dicas com esse esquema - para iniciantes, é mais difícil fazer o processamento em tempo real, e se o derivado do sinal for alto em , você ainda terá problemas de confiança com as primeiras amostras. Mas deve se livrar do solavanco.t=0


6

Dê uma olhada na função filtfilt. Ele fornece resposta de fase zero e uma resposta de etapa perfeita. Especialmente, a propriedade de resposta a etapas da filtragem de filtfilt pode resolver seu problema.


0

Fiz o truque que o Sr. rtollert explicou e pensei que era o melhor que eu podia fazer.

Se você seguir o caminho da amostragem contínua / compensação de hardware, a eficiência poderá interessá-lo pelos bloqueadores de corrente contínua, conforme descrito por Randy Yates e Richard Lyons no dsp Tips & Tricks March 2008



-1

Você não se importa com o valor absoluto de CD, correto?

Por que não adicionar apenas um deslocamento estático aos seus dados para que o primeiro ponto de dados seja zero?

Claro, você teria que adicionar o deslocamento a todos os pontos de dados, mas evitaria completamente os grandes problemas de resposta a etapas que você está tendo com o filtro.

Efetivamente, o filtro inicia inicializado em zero. Portanto, quando seus dados começam, o filtro vê uma grande escada de zero a qualquer nível de CC que você tiver.

Basta adicionar deslocamento para remover a escada.


-1

Por que não fazer a remoção média? A etapa posterior, que faz "de novo", simplesmente não tem efeito (seria subtrair zero).


Isso é mais uma consulta e não é realmente uma resposta para a pergunta. Pode ter sido apropriado como um comentário em um ponto, embora a pergunta seja tão antiga que pareça inútil neste momento.
Sam Maloney 14/05
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.