Traitement et analyse de données EEG sous MATLAB

Configuration et importation des données

Avant de commencer, assurez-vous d'avoir installé les boîtes à outils suivantes :

% 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

  1. Étude du sommeil : détection des ondes lentes (0.5-4 Hz) et des fuseaux (12-16 Hz) avec des algorithmes de scoring.
  2. Détection d'épilepsie : identification des pointes-ondes via filtrage morphologique.
  3. Interface cerveau-machine : extraction de caractéristiques par CSP pour l'imagerie motrice.

Étiquettes: EEG MATLAB EEGLAB FieldTrip RIDE

Publié le 3 juillet à 07h19