Configuration et importation des données
Avant de commencer, assurez-vous d'avoir installé les boîtes à outils suivantes :
- EEGLAB : https://eeglab.org/
- FieldTrip : https://www.fieldtrpitoolbox.org/
- RIDE Toolbox : http://cns.hkbu.edu.hk/RIDE.htm
% Initialisation de EEGLAB
eeglab;
% Import des données (formats EDF, BrainVision Analyzer, etc.)
[EEG, ~] = pop_biosig('votre_fichier.set'); % Adapter le chemin
EEG = eeg_checkset(EEG); % Vérification de l'intégrité
Chaîne de prétraitement
1. Localisation des électrodes et re-référencement
% Chargement des positions standard (système 10-5)
eeglab('options', 'channellocations', 'standard-10-5-cap385.elp');
% Re-référencement sur la moyenne des mastoïdes
EEG = pop_reref(EEG, {'TP9','TP10'}, 'refloc', {'TP9','TP10'});
2. Filtrage et débruitage
% Filtre passe-bande 0.5-40 Hz
EEG = pop_eegfiltnew(EEG, 0.5, 40, 128, 'fir1', 0);
% Filtre coupe-bande à 50 Hz (réseau électrique)
EEG = pop_eegfiltnew(EEG, 48, 52, 128, 'fir1', 0);
% ICA pour suppression des artefacts (clignement, EMG)
[EEG, ~] = pop_runica(EEG, 'extended', 1, 'interupt', 'on');
% Suppression manuelle de la composante de clignement (ex: composante 1)
EEG = pop_subcomp(EEG, [1], 0);
3. Segmentation et correction de ligne de base
% Découpage en epochs autour de l'événement 100
EEG = pop_epoch(EEG, {100}, [-0.2 1.0], 'epochinfo', 'yes');
% Correction de la ligne de base sur les 200 ms avant le stimulus
EEG = pop_rmbase(EEG, [-0.2 0]);
4. Détection et interpolation des canaux défectueux
% Détection par LOF (nécessite NEAR Toolbox)
EEG = pop_selectbad(EEG, 'method', 'lof', 'threshold', 1.5);
% Interpolation sphérique des canaux rejetés
EEG = pop_interp(EEG, EEG.chanlocs, 'spherical');
Traitement avancé et extraction de caractéristiques
1. Décomposition RIDE (séparation des composantes cognitives)
% Ajout du chemin RIDE
addpath(genpath('chemin_vers_RIDE'));
% Paramètres de décomposition
cfg = struct();
cfg.comp.name = {'S','C','R'}; % S: lié au stimulus, C: composante centrale, R: lié à la réponse
cfg.comp.latency = [0 Inf];
% Exécution de RIDE
[EEG_RIDE, ~] = RIDE(EEG, cfg);
% Extraction des composantes par essai
EEG_RIDE = move3(EEG_RIDE);
2. Analyse temps-fréquence (ondleettes)
% Calcul des ERSP (Event-Related Spectral Perturbation)
[ersp, itc, times, freqs] = pop_ersp(EEG, 0.5, 40, 128, 0, 1.0, 'method', 'wavelet', 'wavelet', 5);
% Visualisation
figure;
contourf(times, freqs, squeeze(mean(ersp,1)), 'LineColor', 'none');
colorbar; title('Carte temps-fréquence ERSP');
3. Connectivité fonctionnelle (PLV)
% Calcul de la matrice de Phase Locking Value
[plv_matrix, ~] = pop_ft_connectivityanalysis(EEG, 'method', 'pli', 'pli_type', 'pli2_unbiased');
% Affichage du réseau
figure;
imagesc(plv_matrix);
title('Réseau de connectivité PLV');
Classification par apprentissage automatique (exemple : imagerie motrice)
% Chargement de LIBSVM
addpath(genpath('chemin_vers_LIBSVM'));
% Caractéristiques et étiquettes
caracs = [EEG.data(:,:,1)]; % Canal spécifique
etiquettes = EEG.event.latency > 0.5; % Hypothèse : imagerie après 0.5s
% Normalisation
caracs = zscore(caracs);
% Validation croisée 10-folds
cv = cvpartition(etiquettes, 'KFold', 10);
precision = zeros(cv.NumTestSets,1);
for i = 1:cv.NumTestSets
trainIdx = cv.training(i);
testIdx = cv.test(i);
modele = svmtrain(etiquettes(trainIdx), caracs(trainIdx,:), '-t 2 -c 1 -g 0.1');
[~, ~, ~, precision(i)] = svmpredict(etiquettes(testIdx), caracs(testIdx,:), modele);
end
disp(['Précision moyenne : ', num2str(mean(precision)*100, '%.2f') '%']);
Visualisation et analyse des résultats
1. Formes d'onde et cartes topographiques
% Comparaison signal brut vs corrigé
figure;
subplot(2,1,1);
plot(EEG.times, EEG.data(1,:));
title('Signal brut');
subplot(2,1,2);
plot(EEG.times, EEG.data(1,:) - mean(EEG.data(1,:)));
title('Signal corrigé (baseline soustraite)');
% Carte topographique
topoplot(squeeze(mean(EEG.data,3)), EEG.chanlocs);
2. Tests statistiques (ANOVA)
% Comparaison de puissance entre conditions
[p, tbl, stats] = anova1(squeeze(mean(ersp,1)), etiquettes);
Applications complémentaires
- Étude du sommeil : détection des ondes lentes (0.5-4 Hz) et des fuseaux (12-16 Hz) avec des algorithmes de scoring.
- Détection d'épilepsie : identification des pointes-ondes via filtrage morphologique.
- Interface cerveau-machine : extraction de caractéristiques par CSP pour l'imagerie motrice.