-
Notifications
You must be signed in to change notification settings - Fork 43
/
trca.m
40 lines (39 loc) · 1.29 KB
/
trca.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
function W = trca(eeg)
% Task-related component analysis (TRCA). This script was written based on
% the reference paper [1].
%
% function W = trca(eeg)
%
% Input:
% eeg : Input eeg data
% (# of channels, Data length [sample], # of trials)
%
% Output:
% W : Weight coefficients for electrodes which can be used as
% a spatial filter.
%
% Reference:
% [1] H. Tanaka, T. Katura, H. Sato,
% "Task-related component analysis for functional neuroimaging and
% application to near-infrared spectroscopy data",
% NeuroImage, vol. 64, pp. 308-327, 2013.
%
% Masaki Nakanishi, 22-Dec-2017 / Updated:28-Jan-2019
% Swartz Center for Computational Neuroscience, Institute for Neural
% Computation, University of California San Diego
% E-mail: [email protected]
[num_chans, num_smpls, num_trials] = size(eeg);
S = zeros(num_chans);
for trial_i = 1:1:num_trials-1
x1 = squeeze(eeg(:,:,trial_i));
x1 = bsxfun(@minus, x1, mean(x1,2));
for trial_j = trial_i+1:1:num_trials
x2 = squeeze(eeg(:,:,trial_j));
x2 = bsxfun(@minus, x2, mean(x2,2));
S = S + x1*x2' + x2*x1';
end % trial_j
end % trial_i
UX = reshape(eeg, num_chans, num_smpls*num_trials);
UX = bsxfun(@minus, UX, mean(UX,2));
Q = UX*UX';
[W,~] = eigs(S, Q);