Filtro passa alto di 0,01 Hz per derive lente EEG


10

Sto cercando di creare un filtro passa-alto per i set di dati elettroencefalografici (EEG), al fine di eliminare le derive molto lente. Tuttavia, le frequenze intorno a 0,3 Hz sono molto importanti per la ricerca di questi dati.

Uso Matlab e ho provato varie cose. Sembra che un'attenuazione dB molto bassa, di 3 dB, vada bene con i filtri FIR. Ad esempio ho usato quello:

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

Tuttavia, questo filtro fa perdere corrente all'inizio dei dati e non vorrei perdere questi primi punti dati.

Ho letto attraverso le tue pagine che un'idea intelligente è quella di progettare un filtro passa-basso che in seguito vorrei sottrarre dai dati reali. L'ho fatto con un filtro equiripple e ha funzionato ma ha lasciato un sollevamento di base. Non voglio eseguire ora la rimozione media poiché questa è una fase successiva del protocollo di analisi.

Eventuali suggerimenti?


1
Quindi il problema è solo la risposta iniziale del filtro? Sono questi dati preregistrati che puoi semplicemente anteporre con zeri o è in tempo reale?
endolith,

L'approccio passa-basso e sottrazione soffrirà anche del problema che stai vedendo. Il problema è che ogni filtro ha un ritardo. I filtri con tagli netti come quello desiderato possono avere ritardi molto lunghi. Non sono sicuro del motivo per cui faresti la rimozione media dopo; il guadagno DC del filtro che hai mostrato è zero, quindi non ci sarà una media apprezzabile da rimuovere (tranne per il periodo transitorio all'inizio dell'uscita a causa del ritardo del filtro).
Jason R,

Risposte:


6

Stai chiedendo una macchina del tempo: per evitare il bump DC at , devi conoscere lo stato del filtro come se fosse in esecuzione prima che la registrazione abbia mai inizio. Questo non accadrà, indipendentemente dal tipo di filtro che usi.t=0

Ecco un trucco che può esserti utile. Supponiamo che tu abbia un filtro FIR -tap (o un filtro IIR la cui risposta all'impulso diminuisce adeguatamente a 0 dopo campioni). Prendi i primi campioni del tuo segnale, invertili e anteponi questo all'inizio del segnale. In effetti, stiamo definendo un nuovo segnale ai fini del filtraggio. Quando lo filtri, lo stato del filtro sarà già stato "innescato" con il segnale iniziale: elimina i primi campioni dell'uscita e il bump DC dovrebbe essere sparito.N N g ( t ) = g ( - t ) = f ( t ) NNNNg(t)=g(t)=f(t)N

Inutile dire che ci sono numerosi trucchi con questo schema: per cominciare, è più difficile da fare per l'elaborazione in tempo reale e se la derivata del segnale è alta a , avrai ancora problemi di fiducia con i primi campioni. Ma dovrebbe sbarazzarsi del dosso.t=0


6

Dai un'occhiata alla funzione filtfilt. Fornisce una risposta a fase zero e una risposta a gradino perfetta. In particolare, la proprietà di risposta al passaggio del filtro filtfilt può risolvere il problema.


0

Ho fatto il trucco spiegato dall'onorevole rtollert e ho pensato che fosse il massimo che potessi fare.

Se segui il percorso di campionamento continuo / compensazione hardware, l'efficienza potrebbe farti interessare ai blocchi DC come descritto da Randy Yates e Richard Lyons in dsp Tips & Tricks marzo 2008



-1

Non ti interessa il valore DC assoluto, giusto?

Perché non aggiungere semplicemente un offset statico ai dati in modo che il primo punto dati sia a zero?

Certo, dovresti aggiungere l'offset a ogni punto dati, ma eviterebbe completamente i grossi problemi di risposta al passaggio che hai con il filtro.

In effetti il ​​filtro si avvia inizializzato su zero. Pertanto, quando iniziano i tuoi dati, il filtro vede un grande gradino da zero a qualunque livello DC tu abbia.

Basta aggiungere l'offset per rimuovere il gradino.


-1

Perché non fare la rimozione media? Il passaggio successivo che lo fa "di nuovo" non ha effetto (sottrarrebbe zero).


Questa è più una domanda, e non proprio una risposta alla domanda. Potrebbe essere stato appropriato come commento ad un certo punto, anche se la domanda è così vecchia che sembra inutile in questo momento.
Sam Maloney,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.