稳态视觉诱发电位(SSVEP)识别| Task-Related Component Analysis, TRCA

本文主要是介绍稳态视觉诱发电位(SSVEP)识别| Task-Related Component Analysis, TRCA,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

声明:转载自https://blog.csdn.net/weixin_42765703/article/details/105604481,感谢博主详尽的分析,最近正在看,学习一下

Note: 没事搬一下砖,重温一下TRCA的计算过程。在知网上检索过SSVEP的硕博论文,发现到2020了更多的仍然是关于CCA及其改进方法的介绍(可能是因为标准CCA毕竟不需要训练,而且计算速度较快),所以我还是只有看期刊上的推导公式。这里我简单谈谈TRCA在SSVEP处理上的实现过程,有不对的地方恳请各位指正。
已有基础仅仅是来找代码的可以直接转Masaki Nakanishi的TRCA仓库。

前言

Task-Related Component Analysis(TRCA)是目前SSVEP识别最流行的方法之一,在此方法提出之前多用CCA或是MSI进行频率识别,这些方法最大的好处就是不需要受试者的训练数据。随着联合频相刺激的SSVEP范式提出,如何有效利用SSVEP的相位信息变得很重要,但标准的CCA和MSI是没有利用到相位信息的(因为人工构造的正余弦参考信号没有包含相位项)。如果能够有效的利用相位信息,那么SSVEP的识别必然会提升较大的幅度,这也是为什么subject independent template的引入能够显著提高识别能力的原因。但是这又导致了另外的一个问题,那就是需要训练数据集了!毕竟要在ACC和ITR上妥协嘛~
Masaki Nakanishi 等人率先将TRCA方法引入到SSVEP识别上来1,而该方法最早是于2013年Hirokazu Tanaka 等人提出并应用于NIRS的识别上2 3。 该方法的能够通过最大化每个task中神经影像数据的复现性(reproducibility),从而提取任务相关成分。对于SSVEP这种time-locked的信号,该方法非常合适。在SSVEP中即最大化多个trial之间的复现性,从而提高信噪比,抑制自发脑电活动。下面的介绍我均以SSVEP中的说法为例,给出的示意图来自这三篇参考文献。

算法

建立信号模型

首先,我们认为一个多通道的EEG信号x(t)\in R^{Nc}是由任务相关(task-related)信号s(t)\in R和任务无关信号n(t)\in R组合而成的,即
线性生成模型
其中,
分别表示混合系数。以单通道的EEG信号为例,在连续的三个trial(蓝色部分)中可以图示为
信号模型图示
可以看到,任务相关部分在trial之间保持着不变性,而任务无关部分在trial之间是变化的。它们两者存在着这样一个性质,即s^{(i)}之间的协方差为一正常数,而s^{(i)}n^{(i)}之间的协方差为0。
我们希望从EEG信号中仅得到任务相关的成分s(t),这样即能增加信号的信噪比。首先我们对多通道的EEG信号进行加权求和,表示为一个线性一维模型
在这里插入图片描述
为了达到我们所期待的目标,使得估计的任务相关成分
,那么就必须使0。如果我们得到了这样的一个解,那么多通道的EEG信号经过线性加权求和后,便能够得到在多个trial之间具有高度相关性的y(t),表示为下图
在这里插入图片描述
蓝色部分表示不同的trial,可以看到原本trial之间变化较大的N通道EEG信号,经过处理后得到的y ( t ) y(t)y(t)在trial之间相关性较高。这里的w i w_iwi​即空间滤波器,这个过程可以表示为
,接下来的问题就是如何对W WW求解!可以通过两个类似的求解方法实现:协方差最大化(CovMax)或相关性最大化(CorrMax)。

Correlation maximization(CorrMax)

定义来自k-th trial的EEG信号和其估计的任务相关成分为,同理来自l-th trial的信号分别为,它们之间的相关性可以通过皮尔逊相关系数公式求解
相关系数
在实际应用过程中,我们需要找到的是所有trial可能的组合中使相关系数之和最大的解,所以我们的目标函数为
CorrMax
上式即为Correlation maximization(CorrMax)。为了对系数进行约束,我们使y(t)的方差归一化到1(注:这里的N表示channel)
参数约束
其中,

采用CorrMax计算并没有什么问题,但是它的解并不是封闭解析的,最重要的是它只能得到一个任务相关成分!所以在SSVEP识别的过程中,并没有采用该方法,而是使用下面所述的最大化trial之间的协方差。

Covariance maximization(CovMax)

这里和CorrMax不同的仅是将trial之间相关系数的求解变为计算协方差矩阵。类似地,计算两个trial之间的协方差
协方差
多个trial之间的协方差之和为我们的目标函数,该公式为Covariance maximization(CovMax)
CovMAX
上式中对称矩阵S SS可以表示为
S
和CorrMax中一样,我们需要引入对y(t)的归一化约束,我们的约束优化问题转变为Rayleigh–Ritz特征值问题
Rayleigh–Ritz
根据Rayleigh–Ritz理论,最佳的系数向量
可以通过求解的特征向量得到。的特征向量为一N维的向量矩阵,每一维对应一特征值,并且按特征值大小降序排列。特征值的大小表示了按其对应的特征向量对信号进行空间滤波后,y(t)在trial之间的task consistency。在SSVEP识别过程中,仅使用了最大特征值对应的特征向量。

MATLAB代码

以上,我们已经知道了TRCA的原理,也知道了具体的求解方法——CovMax。
下面进行实际代码操作的时候还是先梳理一下整个SSVEP识别过程:
首先我们需要明白,CovMax的计算要用到已有的trial数据,表明了TRCA需要受试者训练数据。我们利用受试者某一刺激n的训练数据,通过TRCA得到对应的空间滤波器w n w_nwn​;利用w n w_nwn​分别对test trial X和训练集平均信号χ ˉ n \bar\chi_nχˉ​n​进行空间滤波;然后计算两者的皮尔逊相关系数;最后找到最大相关系数对应的刺激频率即可。多说一句,目前类别数较多时,SSVEP的识别主要是根据相关系数来的,各方法的改进之处在于如何找到一个更好的空间滤波器w n w_nwn​。下面是TRCA和ensemble TRCA的流程图。
TRCA和ensemble TRCA

TRCA

<span style="color:#000000"><code>function [w] = TRCA(eeg)
% -------------------------------------------------------------------
% Task-related component analysis[1].extract task-related components 
% by maximizing the reproducibility during the task period.
%
% Input:         
%   eeg : input eeg training data
%         (# channels, # points, # trials)
% Output:  
%   W: w means eigenvectors corresponding to max eigenvalues
%
% 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.
% --------------------------------------------------------------------
[num_chans, num_smpls, num_trials]  = size(eeg);
S = zeros(num_chans);
for trial_i = 1:1:num_trials-1x1 = squeeze(eeg(:,:,trial_i));x1 = bsxfun(@minus, x1, mean(x1,2));for trial_j = trial_i+1:1:num_trialsx2 = squeeze(eeg(:,:,trial_j));x2 = bsxfun(@minus, x2, mean(x2,2));S = S + x1*x2' + x2*x1';end % end trial_j
end % end trial_i
UX = reshape(eeg, num_chans, num_smpls*num_trials);
UX = bsxfun(@minus, UX, mean(UX,2));
Q = UX*UX';
[V,~] = eigs(S, Q);
w = V(:,1);
end %end function
</code></span>

对上述程序做简要解释

  • 输入参数eeg为三维的信号矩阵,表示受试者某一刺激频率的训练数据;
  • 输出参数为得到的空间滤波器w;
  • CovMax的关键在于Q − 1 S Q^{-1}SQ−1S的求解;
  • Q矩阵来自于对所有trial进行横向联结(# channel, # points*trials);
  • w仅取了最大特征值对应的特征向量。

Classification

<span style="color:#000000"><code>% -------------------------------------------------------------------------
% Main for task-related component analysis
%
% Dataset (Sx.mat):
%   A 40-target SSVEP dataset recorded from a single subject. The stimuli
%   were generated by the joint frequency-phase modulation (JFPM) 
%     - Stimulus frequencies    : 8.0 - 15.8 Hz with an interval of 0.2 Hz
%     - Stimulus phases         : 0pi, 0.5pi, 1.0pi, and 1.5pi
%     - # of channels           :Oz
%     - # of recording blocks   : 6
%     - Data length of epochs   : 1.5 [seconds]
%     - Sampling rate           : 250 [Hz]
%     - Data format             : # channels, # points, # targets, # blocks
% 
% See also:
%   TRCA.m
% -------------------------------------------------------------------------clear all
close allload ('Freq_Phase.mat')
load('subject1.mat')
eeg = subject1;
[N_channel,~, N_target, N_block] = size(eeg);%% ------------classification-------------
tic
% LOO cross-validation
for loocv_i = 1:N_blockTestdata = squeeze(eeg(:, :, :, loocv_i));Traindata = eeg;Traindata(:, :, :, loocv_i) = [];for targ_i = 1:N_targetaver_Traindata(:, :, targ_i) = squeeze(mean(squeeze(Traindata(:,:,targ_i,:)),3));end % end targ_i% labels assignment according to testdatatruelabels=freqs;N_testTrial=size(Testdata, 3);for trial_i=1:N_testTrialcoefficience = zeros(1,length(truelabels));for targ_j=1:length(freqs)             % compute spatial filter wn using training datawn = TRCA(squeeze(Traindata(:,:,targ_j,:)));% compute correlation between test and averaged training dataweighted_train = wn'*aver_Traindata(:,:,targ_j);weighted_test = wn'*Testdata(:,:,trial_i);coefficienceMatrix = corrcoef(weighted_test,weighted_train);coefficience(targ_j) = coefficienceMatrix(1,2);end % end targ_i% target detection[~, index] = max(coefficience);outputlabels(trial_i) = freqs(index);end % end trial_itrueNum = sum((outputlabels-truelabels)==0);acc(loocv_i) = trueNum/length(truelabels);fprintf('The %d-th CV accuracy is: %.4f, samples: %d/%d\n',loocv_i,...acc(loocv_i),trueNum, N_testTrial)
end % end looCv_i
t=toc;
% data visualization
fprintf('\n-----------------------------------------\n')
disp(['total time: ',num2str(t),' s']);
fprintf('6-fold CV average accuracy is: %.4f\n',mean(acc))
</code></span>

对上述程序做简要解释

  • 采用的数据为清华benchmark dataset数据,导入的是对受试者1进行1.5s数据截取和滤波后的数据;
  • 该数据包含6 blocks,故进行了6次LOO;
  • 该数据为40类,8~15.8Hz;
  • 完整可执行程序见我的TRCA仓库。

运行结果为

<span style="color:#000000"><code>The 1-th CV accuracy is: 0.9250, samples: 37/40
The 2-th CV accuracy is: 0.9750, samples: 39/40
The 3-th CV accuracy is: 1.0000, samples: 40/40
The 4-th CV accuracy is: 0.9250, samples: 37/40
The 5-th CV accuracy is: 0.9750, samples: 39/40
The 6-th CV accuracy is: 0.9500, samples: 38/40-----------------------------------------
total time: 53.7772 s
6-fold CV average accuracy is: 0.9583
</code></span>

以上,是我关于TRCA的总结。看到这里如果有疑问欢迎下方留言,如果有什么见解麻烦不吝赐教,一起交流学习~

References

  1. Nakanishi M, Wang YJ, Chen XG, Wang YT, Gao XR, Jung TP (2018) Enhancing detection of ssveps for a high-speed brain speller using task-related component analysis. Ieee Transactions on Biomedical Engineering 65:104-112.
  2. Tanaka H, Katura T, Sato H (2013) Task-related component analysis for functional neuroimaging and application to near-infrared spectroscopy data. NeuroImage 64:308-327.
  3. Tanaka H, Katura T, Sato H (2014) Task-related oxygenation and cerebral blood volume changes estimated from NIRS signals in motor and cognitive tasks. NeuroImage 94:107-119.

这篇关于稳态视觉诱发电位(SSVEP)识别| Task-Related Component Analysis, TRCA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/336925

相关文章

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

计算机视觉工程师所需的基本技能

一、编程技能 熟练掌握编程语言 Python:在计算机视觉领域广泛应用,有丰富的库如 OpenCV、TensorFlow、PyTorch 等,方便进行算法实现和模型开发。 C++:运行效率高,适用于对性能要求严格的计算机视觉应用。 数据结构与算法 掌握常见的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、搜索、动态规划等),能够优化代码性能,提高算法效率。 二、数学基础

Clion不识别C代码或者无法跳转C语言项目怎么办?

如果是中文会显示: 此时只需要右击项目,或者你的源代码目录,将这个项目或者源码目录标记为项目源和头文件即可。 英文如下:

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

【python计算机视觉编程——7.图像搜索】

python计算机视觉编程——7.图像搜索 7.图像搜索7.1 基于内容的图像检索(CBIR)从文本挖掘中获取灵感——矢量空间模型(BOW表示模型)7.2 视觉单词**思想****特征提取**: 创建词汇7.3 图像索引7.3.1 建立数据库7.3.2 添加图像 7.4 在数据库中搜索图像7.4.1 利用索引获取获选图像7.4.2 用一幅图像进行查询7.4.3 确定对比基准并绘制结果 7.

参会邀请 | 第二届机器视觉、图像处理与影像技术国际会议(MVIPIT 2024)

第二届机器视觉、图像处理与影像技术国际会议(MVIPIT 2024)将于2024年9月13日-15日在中国张家口召开。 MVIPIT 2024聚焦机器视觉、图像处理与影像技术,旨在为专家、学者和研究人员提供一个国际平台,分享研究成果,讨论问题和挑战,探索前沿技术。诚邀高校、科研院所、企业等有关方面的专家学者参加会议。 9月13日(周五):签到日 9月14日(周六):会议日 9月15日(周日

【python计算机视觉编程——8.图像内容分类】

python计算机视觉编程——8.图像内容分类 8.图像内容分类8.1 K邻近分类法(KNN)8.1.1 一个简单的二维示例8.1.2 用稠密SIFT作为图像特征8.1.3 图像分类:手势识别 8.2贝叶斯分类器用PCA降维 8.3 支持向量机8.3.2 再论手势识别 8.4 光学字符识别8.4.2 选取特征8.4.3 多类支持向量机8.4.4 提取单元格并识别字符8.4.5 图像校正