Básicamente entendí cómo funciona la corrección Rubberband / Baseline.
- El espectro dado se divide en rangos (N).
- Se determinan los puntos más bajos en cada rango.
- La línea de base inicial se construye a partir de esos puntos.
- Ahora todos los puntos en el espectro se dibujan por la diferencia entre el punto más bajo en el rango actual y el punto más bajo en la línea de base.
Sin embargo, hay algunos matices que no sé cómo manejar. Por ejemplo, ¿qué pasa si uno de los puntos está exactamente en el borde entre dos rangos, etc.
Además, tengo que poder demostrar que el algoritmo que estoy escribiendo es sólido y puede ser referenciado por otros trabajos o artículos científicos.
Si alguien pudiera darme alguna referencia, estaría muy complacido.
frequency-spectrum
preprocessing
チ ー ズ パ ン
fuente
fuente
Respuestas:
Esto se puede hacer fácilmente en
R
oPython
. Hay funciones bien probadas disponibles, por lo que no tiene que preocuparse por los límites o matices. Además, ambos son gratuitos y populares entre los científicos.Solución para R
Hay un paquete especial para manejar datos espectrales, llamado hyperSpec . La corrección de la línea base de la banda elástica ya está implementada allí (función
spc.rubberband
). Todos los detalles están resaltados en la documentación. El uso es bastante simple:Solución para Python
No existe (según mi leal saber y entender) una solución lista para usar para python, pero puede usar la
scipy.spatial.ConvexHull
función para encontrar índices de todos los puntos que forman un casco convexo alrededor de su espectro. Supongamos que el espectro está contenidox
y lasy
matrices:La matriz
v
contiene índices de los puntos de vértice, dispuestos en la dirección CCW, por ejemplo[892, 125, 93, 0, 4, 89, 701, 1023]
. Tenemos que extraer la parte dondev
está ascendiendo, por ejemplo, 0-1023.Ahora la línea de base se corrige así:
fuente
Puede haber muchas técnicas. Tu idea me parece buena.
Otras dos ideas:
Haga una FFT de sus datos y filtre las frecuencias más bajas. Esto también elimina las modulaciones de línea de base. Ciertamente, debe encontrar el ancho de filtro correcto a mano o de una suposición educada de los datos.
Utilice las funciones de coseno con múltiples longitudes de onda largas y realice un ajuste lineal a sus datos. También puede lanzar los picos a través de un filtro simple o ponderando los puntos de datos con su intensidad de señal.
fuente
Solución en python usando el algoritmo Modpoly e Imodpoly.
Biblioteca de Python para corrección / eliminación de línea de base. Tiene el algoritmo Modpoly e IModploy que puede devolver resultados corregidos de línea de base cuando ingresa los valores originales como una lista de Python o series de pandas y especifica el grado polinómico. Instalar la biblioteca como
pip install BaselineRemoval
. Debajo hay un ejemplofuente
[EDITAR 2018/03/24] Desde la respuesta, se han registrado varios usos en datos espectrales
Si sus picos espectrales son relativamente finos, y casi positivos por encima de una línea de base con un comportamiento más de baja frecuencia, sugiero probar BEADS (Estimación y Denoising de línea de base con dispersión ) , un algoritmo basado en la escasez de datos y Algunos de sus derivados. Funciona bien con datos cromatográficos. El código de Matlab está disponible , y la página BEADS reúne códigos R o C ++ y usos conocidos . Aquí puede encontrar usos para espectros Raman, espectro astronómico de galaxia hiperespectral, espectroscopía de absorción de rayos X (XAS), difracción de rayos X (XRD) y mediciones combinadas de XAS / XRD.
fuente