Aller au contenu principal

Guide : Prétraitement des Spectres

Un spectre brut issu d'un télescope n'est pas directement utilisable pour le Machine Learning. Ce guide explique comment le pipeline AstroSpectro nettoie, normalise et prépare chaque spectre pour l'extraction de features.

Le Module SpectraPreprocessor

Toute la logique de prétraitement est encapsulée dans la classe SpectraPreprocessor. Le pipeline principal orchestre le traitement en appelant les méthodes de cette classe pour chaque spectre du lot.

Le processus se déroule en deux étapes principales.

Étape 1 : Chargement Robuste du Spectre

La première étape consiste à lire le fichier .fits.gz et à en extraire les informations essentielles : la longueur d'onde, le flux, et l'inverse de la variance (une mesure de l'incertitude).

  • Extraction des Données : Le flux (l'intensité lumineuse) et l'inverse de la variance sont extraits de la matrice de données du fichier FITS.
  • Reconstruction Adaptative de la Longueur d'Onde : Les relevés comme LAMOST n'utilisent pas toujours la même méthode pour stocker l'axe des longueurs d'onde. Notre preprocessor est robuste et sait gérer plusieurs formats :
    • Il cherche d'abord les mots-clés COEFF0 et COEFF1 pour reconstruire une échelle log-linéaire.
    • Si cela échoue, il cherche une colonne de données loglam.
    • Cette flexibilité garantit que le pipeline peut traiter des spectres de différentes campagnes d'observation sans modification.
src/pipeline/preprocessor.py - Exemple simplifié de chargement
def load_spectrum(self, hdul):
# La logique réelle est plus complexe pour gérer plusieurs formats
header = hdul[0].header
data = hdul[0].data

flux = data[0]
invvar = data[1]

loglam = header['COEFF0'] + np.arange(len(flux)) * header['COEFF1']
wavelength = 10**loglam

return wavelength, flux, invvar

Étape 2 : Normalisation du Flux

Les étoiles ont des brillances intrinsèques et des distances très différentes. Pour les comparer sur une base équitable, il est essentiel de normaliser leurs spectres.

  • Méthode : Le pipeline applique une normalisation simple mais robuste en divisant l'ensemble du flux par sa valeur médiane.
  • Objectif : Cette opération ramène le "continuum" (le niveau de base du spectre) à une valeur proche de 1.0. Cela permet d'atténuer les différences de magnitude absolue et de se concentrer sur la forme et la profondeur relatives des raies spectrales, qui sont les véritables signatures physiques du type d'étoile.
src/pipeline/preprocessor.py - Normalisation
def normalize_spectrum(self, flux):
median_flux = np.median(flux)
if median_flux > 0:
return flux / median_flux
return flux

Visualisation de l'Impact

Avant / Après Normalisation

L'image ci-dessous illustre l'effet de la normalisation. À gauche, deux spectres bruts d'étoiles de magnitudes différentes. À droite, les mêmes deux spectres après normalisation. On peut maintenant comparer directement la forme de leurs raies.

alt text

(Conseil : Crée une petite image simple montrant deux spectres avant/après normalisation avec Matplotlib et sauvegarde-la dans static/img/)


Pistes d'Amélioration Futures

Le prétraitement actuel est conçu pour être rapide et robuste. La Roadmap du projet prévoit des améliorations futures comme : Un ajustement plus fin du continuum avec des méthodes polynomiales. Des filtres de débruitage (denoising) comme Savitzky-Golay appliqués de manière plus systématique. La correction de l'extinction interstellaire pour les analyses les plus fines.