脑电实验中会有“提取epoch”这个操作,epoch是从连续的脑电信号中提取一些特定时间窗口的信号,这个时间片段被锁定到某个事件(例如刺激)中。
提取完epoch后,可以先进行叠加平均再计算指标,也可以先计算指标再进行叠加平均。二者在叠加平均这一步代码上的区别就是加载的文件格式不同,前者加载的是.set文件,后者加载的是.mat文件。
下面以我实验的项目为准,介绍第二种(先计算指标再叠加平均)。
首先,在提取epoch那步,得到了1800个epoch,经指标计算(Hermes工具包算的COH指标)得到一个mat文件,该文件打开后包含1800个32*32*513single,也即指标对每个epoch进行了计算。(这里“32*32*513single”,是一个三维矩阵,我对其先进行了降维操作,再叠加,再平均。)
【步骤】
第一步:对 32*32*513single 的矩阵进行降维。
n = 1;
mat_COH = zeros(32,32); % 定义一个空矩阵
A = load('D:\...\T4.mat');
for i = 1:1800 % 32*32*513single变成32*32并且保存
mat_COH = A.indexes.COH.data{1,i};
coh = mean(mat_COH, 3); % 降维
save(['D:\...\降维\avg_',num2str(n),'.mat'], 'coh'); # 保存了1800个32*32的矩阵
n = n+1;
end
第二步:叠加平均
for i=1:15 % 叠加的次数。一共1800个矩阵,每120个叠加一次,需要叠加15次。
avg = zeros(32,32,120); % 定义一个三维空矩阵
for j=1:120 % 每120个叠加一次
B = load(['D:\...\降维\avg_',num2str((i-1)*120 + j),'.mat']);
avg(:,:,j) = B.coh(:,:); % 叠加
end
coh = mean(avg, 3); % 平均
save(['D:\...\每120平均_15个人\avg_',num2str(i),'.mat'], 'coh');
end
【注】在叠加那一步, “先叠加平均再计算指标”的话,加载的set文件也是这种三维数据,代码是 “avg_S6(:,:,j) = data_S6(:,:,(i-1)*120 + j)”,前面是三维后面也是三维,却可以直接叠加?俺不懂。