Tengo algunos datos de microscopía que están contaminados por un artefacto de latido que me gustaría eliminar. Los datos consisten en una gran serie temporal de imágenes capturadas a ~ 60Hz.
Aquí hay un pequeño clip de ejemplo en forma GIF:
Tomé la intensidad de píxel promedio a lo largo del tiempo y calculé el periodograma usando el método de Welch:
Como puede ver, hay un pico agudo a ~ 1.8Hz que probablemente corresponderá a la frecuencia cardíaca (~ 108 latidos / min). También hay un montón de picos armónicos en múltiplos enteros de 1.8Hz. Es probable que la frecuencia cardíaca exacta varíe de un conjunto de datos a otro, pero puedo especificar un rango biológicamente plausible como se muestra en el área sombreada en el periodograma.
Lo que me gustaría poder hacer es:
- Detecta automáticamente la frecuencia fundamental correspondiente al latido del corazón y todos sus armónicos.
- Filtre los datos para eliminar el fundamental y todos los armónicos.
Por el momento puedo resolver el punto 1 de manera muy cruda al encontrar el pico más grande en el periodograma, luego multiplicarlo por donde es el número estimado de picos armónicos, pero estoy seguro de que debe haber Ser un mejor método que este truco.
Con respecto al punto 2, me encontré con esta pregunta que menciona el uso de un filtro de peine para eliminar un fundamental y todos sus armónicos. ¿Es este el mejor método para usar? Una consideración importante es que tendré que aplicar el filtro a cada píxel de series de tiempo en una gran matriz, por lo que un método computacionalmente eficiente sería altamente deseable.
Datos de ejemplo
fuente
Respuestas:
Su método no es tan malo para un primer intento.
Sin embargo, el siguiente método tiende a funcionar mejor:
La razón principal por la que esto funciona mejor es el paso 4. Cualquier hipótesis incorrecta para una frecuencia de tierra fallará horriblemente cuando intente ajustar los picos alrededor de la ubicación de los armónicos predichos. Digamos que tienes un pico a 2 Hz. Esta podría ser la frecuencia del suelo o un primer armónico. Cuando prueba la "primera hipótesis armónica", es decir, si la frecuencia de tierra es realmente 1 Hz, ajusta la parábola a los datos alrededor de 1,2,3,4,5 ... Hz. Si esa hipótesis es incorrecta, obtienes basura alrededor de 1,3,5 Hz. Si es correcto, puede encontrar picos cerca de 1.1 Hz, 2.2, 3.3, 4.4 y 5.6, lo que sugiere que la frecuencia de tierra real es 1.12 Hz.
fuente
Estás buscando sustracción espectral iterativa . Aquí hay información general de un libro de Análisis de contenido de Alexander Lerch.
fuente
Recomendaría una autocorrelación en su periodograma. Puede construir filtros de muesca o pico negativo basados en múltiplos de la frecuencia fundamental que produce la correlación.
Este código me ayudó a crear una buena gráfica de autocorrelación (cepstrum es otro buen método cuando los armónicos tienen más poder que el fundamental) http://note.sonots.com/SciSoftware/Pitch.html
fuente
Puede tomar un promedio local en el DFT para encontrar los latidos del corazón. Si cierto punto en este grupo es mayor
threshold
y el mayor valor en algún rango a su alrededor, entonces es un latido o un armónico.Podrías usar los índices de latidos ubicados previamente y unirlos linealmente. Si eso no es demasiado crudo para ti.
¿Cuál es el propósito de esta parte de la operación? ¿Es este un análisis médico que requiere la ausencia del latido del corazón para buscar otros (tal vez) datos ocultos? ¿O es esto solo por estética?
Me imagino que un filtro de peine será algo incontrolable. Se requerirá un ajuste cuidadoso del parámetro de retroalimentación. Podría ser viable.
EDITAR: ¿Requiere un algoritmo de detección de tono? Escribí uno de estos hace unos años ignorando los términos (cercanos a) DC y encontrando el primer máximo local. Luego, usando los contenedores a ambos lados, podría usar una interpolación cuadrática y encontrar la ubicación de la frecuencia máxima con mayor precisión que la resolución permitida por las frecuencias de los contenedores.
¿Sería más preciso utilizar armónicos? Probablemente solo agregaría una oportunidad para errores. Aunque puede intentar obtener un valor para lo fundamental con este método y encontrar el máximo en doble, triple, etc. y luego usar un método similar al anterior:
Si vetas el paso cuadrático y solo tomas el máximo local, no obtendrás una frecuencia precisa y subir los armónicos ayudaría.
fuente
.gif
("pequeño" es un término relativo aquí).