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
preprocessorest robuste et sait gérer plusieurs formats :- Il cherche d'abord les mots-clés
COEFF0etCOEFF1pour 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.
- Il cherche d'abord les mots-clés
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.
def normalize_spectrum(self, flux):
median_flux = np.median(flux)
if median_flux > 0:
return flux / median_flux
return flux
Visualisation de l'Impact
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.

(Conseil : Crée une petite image simple montrant deux spectres avant/après normalisation avec Matplotlib et sauvegarde-la dans static/img/)
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.