# How can I compute inter-trial coherence?

Inter-trial coherence is a measure of phase consistency over trials. It is not a connectivity measure, as it does not relate the phase in one channel to that of another channel. You can compute it following frequency decomposition of your data. You can use cfg.method=’mtmfft’, ‘mtmconvol’ or ‘wavelet, but in either case you should use cfg.output=’fourier’. Here is an example

```
cfg = [];
cfg.numtrl = 100
data = ft_freqsimulation(cfg); % simulate some data
cfg = [];
cfg.method = 'wavelet';
cfg.toi = 0:0.01:1;
cfg.output = 'fourier';
freq = ft_freqanalysis(cfg, data);
% make a new FieldTrip-style data structure containing the ITC
% copy the descriptive fields over from the frequency decomposition
itc = [];
itc.label = freq.label;
itc.freq = freq.freq;
itc.time = freq.time;
itc.dimord = 'chan_freq_time';
F = freq.fourierspctrm; % copy the Fourier spectrum
N = size(F,1); % number of trials
% compute inter-trial phase coherence (itpc)
itc.itpc = F./abs(F); % divide by amplitude
itc.itpc = sum(itc.itpc,1); % sum angles
itc.itpc = abs(itc.itpc)/N; % take the absolute value and normalize
itc.itpc = squeeze(itc.itpc); % remove the first singleton dimension
% compute inter-trial linear coherence (itlc)
itc.itlc = sum(F) ./ (sqrt(N*sum(abs(F).^2)));
itc.itlc = abs(itc.itlc); % take the absolute value, i.e. ignore phase
itc.itlc = squeeze(itc.itlc); % remove the first singleton dimension
```

Finally we can plot it, just like a regular time-frequency representation

```
figure
subplot(2, 1, 1);
imagesc(itc.time, itc.freq, squeeze(itc.itpc(1,:,:)));
axis xy
title('inter-trial phase coherence');
subplot(2, 1, 2);
imagesc(itc.time, itc.freq, squeeze(itc.itlc(1,:,:)));
axis xy
title('inter-trial linear coherence');
```

### Reference

Delorme A, Makeig S. *EEGLAB: an open source toolbox for analysis of single-trial EEG dynamics including independent component analysis.* J Neurosci Methods. 2004 Mar 15;134(1):9-21. pdf