Informations

Comment débruiter et se débarrasser de la tendance 1/f d'un PSD dans une expérience de synchronisation EEG

Comment débruiter et se débarrasser de la tendance 1/f d'un PSD dans une expérience de synchronisation EEG

J'apprécierais votre aide les gars.

J'analyse actuellement une expérience où j'ai entraîné des participants à ces fréquences :

Condition 1 : 4,16 Hz-8,33 Hz
Condition 2: 2,77 Hz-8,33 Hz
Condition 3 : 2,4 Hz

Pour chaque condition, j'ai réussi 8 essais de 26 secondes à Fs = 500Hz. J'analyse les données à l'aide de FieldTrip et de certaines boîtes à outils dans Matlab. j'ai calculé le Puissance et PSD à l'aide de pwelch fonction après avoir traité les données dans Fieldtrip.

Je veux mes données en unités dB et je me débarrasse de la tendance $1/f^gamma$ où $0< gamma<2$ (Demanuele et al., 2007)

J'ai 2 problèmes :

1) Je ne sais pas comment supprimer correctement la tendance 1/f car je ne comprends pas comment l'article que je mentionne le fait (voir ci-dessous) dans le domaine fréquentiel (j'ai essayé d'ajuster $1/f^gamma$ avec le meilleur $gamma$, en utilisant le lsqcurvefit fonction. En utilisant le medfilt1 avec la commande 15 me donne les meilleurs résultats. Bien que je pense qu'il devrait y avoir un meilleur moyen, cela peut aussi être défendu sur un article).

"le spectrogramme d'un canal EEG a été calculé. La médiane sur toutes les fenêtres temporelles a ensuite été trouvée pour chaque point de fréquence. Ainsi, un graphique de la valeur médiane du PSD pour chaque fréquence a été obtenu. La même procédure a été répétée pour tous les canaux EEG. Ensuite, la médiane globale des courbes PSD médianes de tous les canaux a été calculée. La même chose a été faite pour chacune des conditions « tâche » et « repos ». La moyenne a ensuite été calculée dans toutes les conditions et cela a été utilisé comme courbe de normalisation ."


ÉDITER J'ai pensé qu'il pourrait être utile de fournir le code que j'ai fait. Désolé pour les inefficacités que vous pouvez trouver puisque je ne suis pas développeur :

% Choisissez le sujet charger matfiles/Subject05 % charger subject5 où (channel,samples,trial,condition) est une matrice 4D samples = numel(subject5(1,:,1,1)); % nombre d'échantillons % Nombre d'échantillons par fenêtre, moins il y a de fenêtres, meilleure résolution en fréquence et pire résolution temporelle. J'ai essayé différentes fenêtres. nsc = étage (échantillons/4,5); nov = étage(nsc*0,75); % de chevauchement de 75 % fr = 0,5 : 0,05 : 15 ; % foi fs = 500 ; % fréquence d'échantillonnage % initialize variable medps = zeros(291,28,21,3) ; % conditions de boucle pour cond = 1 : longueur(sujet5(1,1,1,:)) % essais de boucle pour essai = 1 : longueur(sujet5(1,1,:,cond)) % canaux de boucle pour chan = 1 : length(subject5(:,1,trial,cond)) % calcule le spectrogramme pour chaque canal, essai et condition % donne t(temps) et ps (estimation PSD pour chaque fréquence et temps en unités d'amplitude^2/Hz) [~, ~,t,ps] = spectrogramme(sujet5(chan,:,trial,cond),hamming(nsc),nov,fr,fs); % calcule la médiane au fil du temps par canal, essai et condition medps(:,chan,trial,cond) = median(ps,2) ; end end end %Calculez la médiane sur les canaux par essai et condition medchan = median(medps,2) ; %cela produit la matrice freqx1channelxtrialsxcond medchan = permute(medchan,[1 3 4 2]); % obtenir 4D en 3D % Calculer la médiane sur les essais par condition medtrial = median(medchan,2) ; medtrial = permute(medtrial,[1 3 2]); %Obtenir une matrice 2D freqxcond %Mean sur les conditions est notre courbe de normalisation normalizationCurve = mean(medtrial,2) ;

2) Une fois que j'ai transformé les données en unités dB (c. J'ai étudié le SNR mais je ne sais vraiment pas comment l'appliquer ici. La seule chose que j'ai faite et qui n'enlève toujours pas tout le bruit, c'est le medfilt1 mentionné en 1).

J'espère que l'un d'entre vous ayant de l'expérience dans ce domaine pourra m'aider à résoudre ce problème !


Apparemment, l'article que vous mentionnez évalue simplement la médiane du spectre EEG. Disons que pour tous vos canaux, vous obtenez une matrice PSD 3D, avec la dimension 1 le nombre de canaux, la dimension 2 les fenêtres temporelles et la dimension 3 les fréquences. En pseudocode, l'article calcule M = median(median(PSD,2),1), puis supprime la tendance avec CorrectionedPSD = PSD - M. Ce qui est en fait assez simple.