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?
Respuestas:
fuente
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.
fuente
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
fuente
Intenté algo que funcionó bien, para el amplificador especificado. el código de matlab está aquí: https://sites.google.com/site/marialstavrinou/home/dc-offset-removal-filter-in-matlab .
fuente
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.
fuente
¿Por qué no hacer remoción promedio? El paso posterior que lo hace "nuevamente" simplemente no tiene efecto (sería restar cero).
fuente