[FieldTrip] Beamforming: Scalp vs. Source mismatch
Pomper, Ulrich
Ulrich.Pomper at charite.de
Fri Sep 6 16:42:00 CEST 2013
Dear fieldtrip community,
In my data I found a disconcerting mismatch between EEG scalp topographies and corresponding beamforming solutions, both on the subject and group average level.
I understand that there might not be a perfect match between source and scalp, but I would expect at least a little resemblance.
As an example, the link below features topos and source plots from an event-related beta-band decrease after a short tactile stimulation to the left index finger.
Further below you can find the code I used for the beamforming. (Note that the topos were created from the ft_freqanalysis command within the beamforming script, so baseline and poststimulus data are exactly the same for both source and scalp-level data).
Eight out of 13 subjects show practically no match between source and scalp. On the group average level, the source solution shows a left-anterior decrease which seems not present in the scalp data. Also, the right heispheric decrease at the scalp shifts from central to more posterior sites, which doesn't fit with it beeing of somatosensory origin anymore.
I’d appreciate any comments on my data, as well as suggestions on how to proceed to get a more trustworthy source solution to my beta-band decrease.
Cheers,
Ulrich
Exemplary plots: https://www.dropbox.com/s/git4w8u3a901l3w/source_vs_scalp.pdf
% Beamforming code %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
foi = 20;
tapsmofreq = 5;
toi_pre = [-.4 -.2];
toi_post = [.15 .35];
lambda = '5%';
%% cut data and append for common filters
cfg = [];
cfg.toilim = toi_pre;
dataPre = ft_redefinetrial(cfg, data);
cfg.toilim = toi_post;
dataPost = ft_redefinetrial(cfg, data);
dataAll = ft_appenddata([], dataPre, dataPost);
%% Calculate common CSD
cfg = [];
cfg.method = 'mtmfft';
cfg.output = 'powandcsd';
cfg.tapsmofrq = tapsmofreq;
cfg.foilim = [foi foi];
freqAll = ft_freqanalysis(cfg, dataAll);
%% Calculate CSD for seperate conditions
cfg = [];
cfg.method = 'mtmfft';
cfg.output = 'powandcsd';
cfg.tapsmofrq = tapsmofreq;
cfg.foilim = [foi foi];
freqPre = ft_freqanalysis(cfg, dataPre);
cfg = [];
cfg.method = 'mtmfft';
cfg.output = 'powandcsd';
cfg.tapsmofrq = tapsmofreq;
cfg.foilim = [foi foi];
freqPost = ft_freqanalysis(cfg, dataPost);
%% Source Analysis
cfg = [];
cfg.method = 'dics';
cfg.frequency = foi;
cfg.grid = lf_126;
cfg.vol = vol;
cfg.dics.projectnoise = 'no';
cfg.dics.lambda = lambda;
cfg.dics.keepfilter = 'yes';
cfg.dics.realfilter = 'yes';
sourceAll = ft_sourceanalysis(cfg, freqAll);
%% apply common filter to seperate conditions
cfg.grid.filter = sourceAll.avg.filter;
sourcePre = ft_sourceanalysis(cfg, freqPre);
sourcePost = ft_sourceanalysis(cfg, freqPost);
%% Relchange from baseline
sourceDiff = sourcePost;
sourceDiff.avg.pow = (sourcePost.avg.pow - sourcePre.avg.pow) ./ sourcePre.avg.pow;
More information about the fieldtrip
mailing list