Filtro de paso alto de 0.01 Hz para desviaciones lentas EEG

10

Estoy tratando de hacer un filtro de paso alto para conjuntos de datos electroencefalográficos (EEG), con el fin de deshacerme de las desviaciones muy lentas. Sin embargo, las frecuencias alrededor de 0.3 Hz son muy importantes para la investigación que sirven estos datos.

Uso Matlab y probé varias cosas. Parece que una atenuación de dB muy baja, de 3 dB está bien con los filtros FIR. Por ejemplo, usé eso:

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

Sin embargo, este filtro hace una deriva de CC al comienzo de los datos y no quisiera perder estos primeros puntos de datos.

He leído en sus páginas que una idea inteligente es diseñar un filtro de paso bajo que luego reste de los datos reales. Lo hice con un filtro equiripple y funcionó, pero dejó una elevación de línea de base. No quiero ejecutar ahora la eliminación promedio ya que este es el siguiente paso en el protocolo de análisis.

¿Alguna sugerencia?

forsker_for_dsp
fuente
1
Entonces, ¿el problema es solo la respuesta inicial del filtro? ¿Son estos datos pregrabados los que pueden anteponerse con ceros o es en tiempo real?
Endolith
El enfoque de paso bajo y resta también sufrirá el problema que está viendo. El problema es que cada filtro tiene retraso. Los filtros con límites agudos como el que desea pueden tener retrasos muy largos. No estoy seguro de por qué harías una eliminación promedio a continuación; la ganancia de CC del filtro que mostró es cero, por lo que no habrá un promedio apreciable para eliminar (excepto por el período transitorio al comienzo de la salida debido al retraso del filtro).
Jason R

Respuestas:

6

t=0

NNNg(t)=g(t)=f(t)N muestras de la salida, y el golpe DC debería haber desaparecido.

t=0

rtollert
fuente
6

Echa un vistazo a la función filtfilt. Da respuesta de fase cero y una respuesta de paso perfecta. Especialmente, la propiedad de respuesta escalonada del filtrado filtfilt puede resolver su problema.

niaren
fuente
0

Hice el truco que me explicó el señor rtollert y pensé que era lo mejor que podía hacer.

Si sigue el camino del muestreo continuo / compensación de hardware, entonces la eficiencia puede hacer que se interese en los bloqueadores de CC como lo describen Randy Yates y Richard Lyons en dsp Tips & Tricks March 2008

Chip Wrangler
fuente
-1

No te importa el valor DC absoluto, ¿correcto?

¿Por qué no simplemente agregar un desplazamiento estático a sus datos para que el primer punto de datos esté en cero?

Claro, tendría que agregar el desplazamiento a cada punto de datos, pero evitaría por completo los grandes problemas de respuesta escalonada que tiene con el filtro.

Efectivamente, el filtro se inicia inicializado a cero. Por lo tanto, cuando comienzan sus datos, el filtro ve un gran escalón de cero a cualquier nivel de CC que tenga.

Simplemente agregue desplazamiento para eliminar el escalón.

Nombre falso
fuente
-1

¿Por qué no hacer remoción promedio? El paso posterior que lo hace "nuevamente" simplemente no tiene efecto (sería restar cero).

ladkkasdöla
fuente
Esto es más una consulta y no una respuesta a la pregunta. Podría haber sido apropiado como comentario en algún momento, aunque la pregunta es tan antigua que parece inútil en este momento.
Sam Maloney