[FieldTrip] trial-based time-series via lcmv beamforming?

Andreas Wilmer andreas.wilmer at uni-muenster.de
Fri Feb 11 17:57:36 CET 2011


dear fieldtrip-users,


actually my first active post in the fieldtrip newsgroup. first i'd  
like to thank the community and especially the developers of fieldtrip  
for their great support&help!

i am interested in a trial-based(!) time-domain data-set in the source  
space of MEG data for further connectivity analysis. i decided to use  
a beamformer (lcmv) to recover the neuronal activity by using  
snythetic data-sets (for testing and verification). the synthetic data- 
set consists of 3 correlated sources with up to 300 trials and a  
length of 720 datapoints (=1.2s at 600Hz) and many trials of   
uncorrelated noisy sources.

i implemented the dipole simulation in the following way:
1) i used customized data with time dependent (time-delayed) phase  
correlations as source waveforms and added randomly located  
uncorrelated dipoles as disturbances and spontaneous brain processes.
next, i simulated the data in sensor-space and did an lcmv beamforming
-> works fine (a priori known connectivity can be recovered).

2) in the next step i repeated the simulation and added 10% rms as  
additive (delta-correlated) measurement noise to the data in the  
sensor-space to model thermal noise.
-> in this case the beamformer reconstruction fails totally...

3) i averaged the data in sensor-space to get rid of the thermal noise  
and used the cov to recover every single trial, but in this case the  
beamformer cannot deal with brain-noise...
-> this didn't work either..

MY QUESTION IS: is this a conceptual problem of beamforming, that one  
cannot recover a trial-based time-series or did i commit a crude error  
in reasoning/programming?
do you think a bootstrapping for calculating the cov might make sense,  
i.e. i could calculate the cov for each trial by averaging over just a  
few trials (eg 10 randomly chosen trials) to reduce the uncorrelated  
noise in sensor space without loosing all the information to suppress  
the brain-noise?
which other inverse methods can recover source activity in time-domain  
on trial level?
eg MNE seems only to work on average over trials?

so many questions.. thank you in advance for your help!


with best wishes,
andreas


__________________________________
Dipl.-Phys. Andreas Wilmer

Institut für Allgemeine Psychologie
Westfälische Wilhelms-Universität Münster
AE Prof. Dr. Markus Lappe
Fliednerstraße 21
D 48149 Münster

fon: 		+49 (251) 83 34175
email: 	andreas.wilmer at uni-muenster.de






my code on beamforming
two further remarks:
a) i didn't apply a normalization of the virtual channels because i am  
interested in phase measures - normalizing the amplitudes won't have  
any effect on the results
b) narrow band filtering didn't work with my (broad band) data

%-----------------------------------------------------------------
%estimating filter/cov

cfg                     = [];
cfg.channel             = {'MEG'};
cfg.keeptrials          = 'yes';
cfg.bpfrq               = [1 150];

cfg.covariance          = 'yes';            %trial/stimulus window
cfg.covariancewindow    = [0 1.2];          %complete data

dataCov = ft_timelockanalysis(cfg,dataSensor);

%-----------------------------------------------------------------
%beamforming

cfg                     = [];
cfg.method              = 'lcmv';
cfg.lcmv.fixedori       = 'yes';

cfg.vol          	= dataHead;
cfg.grid.pos     	= gridposition;
cfg.lambda       	= '5%';
cfg.projectnoise 	= 'yes';
cfg.keepfilter   	= 'yes';
cfg.keeptrials   	= 'yes';

[dataVc] = ft_sourceanalysis(cfg,dataCov);

%---------------------------------------------------------------
%reconstructing source data

trialN     = size(dataSensor.trial,2);
[sensN tN] = size(dataSensor.trial{1});
srcN 	   = length(dataVc.inside);

for i=1:srcN,
     m = dataVc.inside(i);
     if ~isempty(dataVc.avg.filter{m}),
         fprintf('beamforming source %d/%d\n',i,srcN);

         %beamforming
         for j = 1:trialN,
             dataVc.trial(j).mom{m} =... 						 
dataVc.avg.filter{m}*dataSensor.trial{j};
         end

     end
end


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20110211/fbddb6fa/attachment-0001.html>


More information about the fieldtrip mailing list