question about lcmv beamforming

Robert Oostenveld r.oostenveld at FCDONDERS.RU.NL
Wed Feb 4 14:42:01 CET 2009


Hi Floris,

On 4 Feb 2009, at 12:50, Floris de Lange wrote:
> I have a question about the beamforming procedure, which I'm carrying
> out in the time-domain using LCMV.
> The strange thing I run into is that irrespective of what data I feed
> the function, I get the same inverse solution (with sourceanalysis.m).

[...]


> Then, I run the source-analysis as follows:
> data = {};
>    for t = 1:6 % six epochs of 50 ms
>      data{t} = mradata{2};
>      data{t}.avg = data{t}.avg(:,(t-1)*30+1:t*30);
>      data{t}.time = [1:30];

you might want to do these few lines above using the redefinetrial
function prior to the timelockanalysis. But that is not related to
your question.

>    cfg = [];
>    cfg.method      = 'lcmv';
>    cfg.projectnoise = 'yes';
>    cfg.grid         = grid;
>    cfg.vol          = vol;
>    cfg.keepfilter   = 'yes';
>    cfg.lambda       = 0; %1e-29;
>        sourcet{t} = sourceanalysis(cfg,data{t});
> end
>
> I checked, and the data-avg fields from different time-windows are
> (substantially) different from each other; while the avg.pow-values in
> sourcet from different time-windows are numerically identical.

The power in LCMV beamforming is computed based on the data covariance
in your timelocked data structure. You are making subselections from
the average ERF, but the data covariance is not based on those
subselections.

> I don't understand how different data on the sensor-level can lead to
> identical source-reconstructions. But when I look in
> beamformer_lcmv.m, I see this line:
> dipout.pow(i) = trace(filt * Cy * ctranspose(filt));
> suggesting that the power at each voxel is a function only of the
> spatial filter and covariance matrix? Does this make sense?

The spatial filter is estimated from the data covariance, which in
your 6 estimates is the same. The power at a certain dipole location
is also estimated using this data covariance. The line of code you
refer to corresponds to equation 24 in the 1997 van Veen paper.
Subsequently in the beamformer_lcmv implementation, the average ERF is
projected through the filter.

> Any input very much appreciated!

Last week I discussed similar issues with Jan-Mathijs. Sofar at the
FCDC we have not really optimized the data handling for LCMV
beamforming. Markus Bauer is one of the few who had a go at it, and
for him it did not really work that well. Jan-Mathijs mentioned that
sofar we have been working with the data covariance that was estimated
based on the single trialsd, and not with th edata covariance
estimated on the average (note that the order matters for the
covariance computation and averaging). Right now I don't know the
details of your experiment and data any more, but you might want to try
   data = preprocessing(cfg)
   avg1 = timelockanalysis(cfg, data) with keeptrials=no, covariance=no
   avg2 = timelockanalysis(cfg, avg1)  with keeptrials=no,
covariance=yes
and then use avg2 which includes the covariance of the average in the
sourceanalysis.

best regards,
Robert

----------------------------------
The aim of this list is to facilitate the discussion between users of the FieldTrip  toolbox, to share experiences and to discuss new ideas for MEG and EEG analysis. See also http://listserv.surfnet.nl/archives/fieldtrip.html and http://www.ru.nl/fcdonders/fieldtrip.



More information about the fieldtrip mailing list