Hello,这里是行上行下,我是喵君姐姐~
第一期我们学习了如何用Letswave进行数据的预处理和ERP分析,包括letswave7的安装、数据集导入、预处理中常见的几种降噪方法、ICA分解、ERP分析。
第二期我们学习了如何用letswave对单个主题进行时频分析以及对多个主题进行平均和统计分析。
这一期,我们就来教大家学习如何用letswave绘制图形,以及对数据进行 批处理,并介绍其中的 脚本生成功能。
在对单个主题和多个主题进行分析之后,我们将在本部分中介绍ERP、时频图和topography图形生成。
在本章中,我们将显示下图的生成过程。此图显示了Pz通道上P300的ERP,其topography在332 ms上,Target和Nontarget条件下的相应时频图显示在底部面板中。
首先,在rawdata1文件夹中,选择数据集:
Sub093 P300 Nontarget
Sub093 P300 Target
bl avg cwt bl reref ep_S 9 sp_filter ica chan _interp butt sel_chan sub093
bl avg cwt bl reref ep_S 10 sp_filter ica chan _interp butt sel_chan sub093
单击“ Figure-> General Figure creator ”,打开图形模块空白画布。
1.2.1 在画布中添加一条Curve,两个Image和一个Topograph。
1.2.2 对于第二张Image和topograph,启用****colorbar。
首先,单击Content工具栏中的按钮,选择Image3中的子图并启用colorbar。
然后,在“Subfigure”中选择topograph4并启用 colorbar。
1.2.3 调整每个子图的位置
首先,单击工具栏中的Image按钮,选择“ Curve1”。将 “Title” 设置为“ P300 ”,字体大小设置为12,位置设置为x = 50,y = 340,w = 600 和 h = 250。
其次,选择Image2。将 “Title” 设置为 “ Target ”,将字体大小设置为12,并将位置设置为x = 70,y = 50,w = 250和h = 250。
接着,选择Image3。将 “Title” 设置为“ Nontarget ”,将字体大小设置为12,并将位置设置为x = 360,y = 50,w = 250和h = 250。
最后,选择 “ topograph4”。将 “Title” 设置为“ 332 ms ”,将字体大小设置为12,并将位置设置为x = 480,y = 470,w = 120和h = 120。
步骤2之后,图形将如下图所示,
首先,单击工具栏中的 “Content” 按钮,然后在子图中选择P300。添加一条curve,其数据源为“ Sub093 P300 target ”,通道为Pz。
其次,添加一条curve,其颜色为蓝色 [0,0.45,0.74],数据源为“ Sub093 P300 nontarget ”,通道为Pz。
然后,添加一个line,位置 X1 = 0.332,Y1 = -5,X2 = 0.332 和 Y2 = 10.8619。
接着,在子图中选择Target。将数据源设置为“ bl avg cwt bl reref ep_S 9 sp_filter ica chan_interp butt sel_chan sub093 ”,通道设置为Pz,范围从 -9 到 9,启用width,并将宽度设置为0.5,范围从0到0开始。
接下来,在子图中选择Nonarget。将数据源设置为“ bl avg cwt bl reref ep_S 10 sp_filter ica chan_interp butt sel_chan sub093 ”,通道设置为Pz,范围从 -9 到 9,启用width,并将宽度设置为0.5,范围从 0 到 0 开始。
最后,在子图中选择332 ms。将数据源设置为“ Sub093 P300 Target ”,x从0.332到0.332,head radius为0.5,shrink为0.95,范围从 -5 到 10.8619, 以使其与P300曲线的范围相同。对于电极,将size设置为8,并标记通道 Pz。
步骤3之后,该图将如下图所示,
首先,单击工具栏中的axis按钮,然后在子图中选择P300。并启用figure。在内容的列表框中选择curve1,在figure中将其名称更改为Target。在内容的列表框中选择curve2,在figure中将其名称更改为NonTarget。
对于x轴,将x-lim设置为 -0.5到1.5秒,将位置更改为origin。启用标签,并将其设置为“ Time [sec] ”。对于y轴,将位置更改为origin。启用label,并将其设置为“ Amp [\ muV] ”。
其次,在子图中选择target。对于x轴,将x-lim设置为 -0.5至1.5秒,并将label设置为“ Time [sec] ”。对于y轴,将标签设置为“ Freq [Hz] ”。
然后,在子图中选择Nontarget。对于x轴,将x-lim设置为 -0.5至1.5秒,并将label设置为“ Time [sec] ”。对于y轴,将标签设置为“ \ muV ^ 2 / Hz ”。
步骤4之后,该图将如下图所示,
到目前为止,我们已经完成了Letswave中图形的编辑。接下来,我们需要导出图形,以便在其他软件中进行进一步的编辑。
单击工具箱中的 “export the figure ” 按钮,将图形导出为eps或pdf格式。单击第二个按钮,将图形另存为“ Figure1.lw_figure ”,将文件保存在工具栏中。我们可以保存该图以便下次编辑。此外,date management可以通过更改数据源以生成新图形。
首先,在rawdata1文件夹中,选择数据集
avg merge_epoch Sub001 P300 Nontarget
avg merge_epoch Sub001 P300 Target
单击“ Figure-> General Figure creator ”,以打开图形模块空白画布。
首先,将图形的宽度和高度设置为1000和400。
其次,添加标题为P300,字体大小为12,位置x = 80,y = 70,w = 870和h = 300的curve。
然后,添加标题为0 ms,字体大小为12,位置x = 100,y = 180,w = 120和h = 120的topograph。
接着,添加标题为332 ms,字体大小为12,位置x = 230,y = 180,w = 120和h = 120的topograph。
最后,添加标题为500 ms,字体大小为12的topograph,在content面板中启用colorbar,并将位置x = 630,y = 180,w = 120和h = 120定位。
首先,单击工具栏中的content按钮,然后在子图中选择P300。添加一条width为3的curve,数据源为“ avg merge_epoch Sub001 P300目标 ”,通道为Pz。
其次,添加一条curve,其颜色为蓝色 [0,0.45,0.74],width 为 3,topograph为Dshed,数据源为“ Sub093 P300 nontarget ”,通道为Pz。
然后,添加一个face opacity为0.25,edge opacity为0,位置x = 0.196,y = -2,w = 0.516和h = 14的rect。并在curve1和curve2上方对rect进行排序。
接着,添加一个line,width 为 1,line style为dshed,位置X1 = 0,Y 1 = -2,X 2 = 0和Y2 = 1.2。
接下来,添加一个line,width 为 1,line style为dshed,位置X1 = 0.332,Y 1 = -2,X 2 = 0.332和Y2 = 11.3。
然后,添加一个line,width 为 1,line style为dshed,位置X1 = 0.5,Y1 = -2,X 2 = 0.5和Y2 = 2.8。
紧接着,在子图中选择0 ms。将数据源设置为“ avg merge_epoch Sub001 P300 Target ”,x从0到0,head radius为0.5,shrink为0.95,范围从 -2 到 12, 以使其与P300曲线的范围相同。对于电极,将大小设置为 8, 并标记通道 Pz。
再然后,在子图中选择332 ms。将数据源设置为“ avg merge_epoch Sub001 P300 Target ”,x从0.332到0.332,head radius为0.5,shrink为0.95,范围从 -2 到 12,以使其与P300曲线的范围相同。对于电极,将大小设置为 8 ,并标记通道 Pz。
最后,在子图中选择500ms。将数据源设置为“ avg merge_epoch Sub001 P300 Target ”,将x设置为0.5到0.5,head radius设置为0.5,shrink为0.95,范围从 -2 到 12 以使其与P300曲线的范围相同。对于电极,将大小设置为8,并标记通道Pz。
步骤3之后,该图将如下图所示,
首先,单击工具栏中的axis按钮,然后在子图中选择P300。并启用Box和Legend。
其次,在内容的列表框中选择curve1,在figure中将其名称更改为Target。在内容的列表框中选择curve2,在figure中将其名称更改为NonTarget。
接着,对于x轴,将x-lim设置为 -0.5 至 1.5 秒。启用 grid 和 label,将label设置为“ Time [sec] ”。
最后,对于y轴,启用grid和label,将label设置为“ Amp [\ muV] ”。
步骤4之后,该图将如下图所示。
在这一部分中,我们将对单个主题重新做时域分析。与上一教程中的逐步操作不同,本部分将使用批处理对数据进行分析。
注意: 在每步操作中,不需要点击 “Run”,需在所有操作处理完毕后,再点击 “Run” 运行。
下载教程数据集,解压缩rawdata1.zip文件,共有三个文件,分别是sub093.eeg,sub093.vhdr和sub093.vmrk。
打开Matlab,在Matlab的命令窗口中输入“ letswave7 ”以打开Letswave7。将letwave的路径设置为数据集的文件夹。
在管理器模块的菜单中选择 “file->import->import EEG / MEG datafiles” ,然后将弹出导入数据对话框。按下add files按钮以添加文件sub093.eeg。
在管理器模块的数据列表中选择数据集“ sub093 ”,然后单击 “ edit”->“arrange signals”->“rearrange or delete epochs,channels,indexes”。在批处理模块中,按add all按钮以将所有通道添加到左侧列表框中。然后选择通道IO,然后按 “ delete” 按钮删除通道IO。
单击左侧的selection,然后在菜单中选择 “process- >frequency analysis and filters-> Butterworth filters”,并将low cutoff frequency(Hz) 设置为0.05Hz。
注意: 从此步骤开始,批处理中的操作将有所不同。我们从批处理模块而不是管理器模块中调用Butterworth过滤器。
单击左侧 Butterworth filters,然后选择 “edit->electrodes->interpolate channel using neighbouring electrodes”。在 “ channel to interpolate:channels for” 列表框中选择通道P1,然后单击 “ find closest electrodes ” 按钮。
单击左侧chan interp, 然后选择 “ process”->“spatial filters(ICA / PCA)->compute ICA matrix ”。选择decide by user,并将组件编号设置为40。
首先,单击左侧ICA,然后在批处理模块中选择 “ process”->“spatial filters(ICA / PCA)->apply ICA / PCA spatial filters”。左侧显示两个选项,即 load 和 apply filter。
其次,单击load,然后单击add并添加数据集“ ica chan_interp butt sel_chan sub093 ”。点击标签apply filter,无需在此处设置任何选项。
首先,单击 apply filter,然后在批处理模块中选择 “process->epoch segmentation->segment relative to events(one file per code)”。左侧又出现了两个选项,分别是load和segmentation。
其次,单击load,然后单击add并添加数据集“ sp_filter ica chan_interp butt sel_chan sub093 ”。
接着,单击segmentation,选择事件代码S 9和S 10,并将epoch开始时间和持续时间设置为 -1 和 3。
首先,单击segmentation,在批处理模块中选择 “process”- >“reference signals”->“reference ”。左侧又出现了两个选项卡,即load和reference。
其次,单击load,然后单击add并添加数据集“ ep_S 9 sp_filter ica chan_interp butt sel_chan sub093 ”和“ ep_S 10 sp_filter ica chan_interp butt sel_chan sub093 ”。
然后,单击该选项卡rereference,选择TP9和TP10作为新参考在左侧的列表框中,在右侧框中点击 “select all”。
单击reference, 然后在批处理模块中选择 “process”- >“baseline ”->“baseline correction”。左侧出现baseline correction选项,保留基线校正的默认设置。
首先,单击baseline correction, 然后在批处理模块中选择 “process”- >“arrange”->“compute arrange,std,median across epoch”。
左侧出现average_epoch选项。保留基线校正的默认设置。
为此,我们已经完成了分配批处理的工作。下一步骤将介绍运行批处理。
通过点击 “Run” 按钮,我们可以运行整个批处理。
在 “ 人工识别成分 ” 步骤中,我们仍然手动在右侧面板中以橙色选择comp 1,comp 2,然后单击OK按钮。
测试中的所有处理都需要2分钟以上的时间,其中计算ICA矩阵的步骤非常耗时。结果将与逐步操作的结果完全相同。
整个批处理过程分为四个阶段,每个阶段都有不同的颜色。每个会话都从load步骤开始。
实际上,自动添加load操作的目的是指定系统的输入数据集。在每个步骤中,必须弄清楚处理的输入和输出。在分步操作中,输入是选定的数据集,输出是添加了前缀的新数据集。
Letswave7自动添加load操作以要求用户指定输入数据集。当然用户还可以通过选择“ File-> load ” 来手动添加load操作。
在Letswave7中,每个步骤都会生成一个带有前缀的新数据集。有时,中间数据集没有用,但却占据了硬盘。此外,对这些中间数据集的读/写操作将很耗时。
在这种情况下,我们可以设置prefix为空,并检查了保存复选框的中间步骤的selection,butterworth filters,chan_interp,reference,baseline correction。
注意: 将前缀设置为 空 实际上是在替换输入数据集。请注意,一旦保存了结果,它将覆盖原始数据集。
注意: 每个会话的最终结果都需要保存。否则,所有处理都是徒劳的,因为没有结果保存在硬盘驱动器上。
由于数据集的名称已更改,因此我们需要在load操作的步骤中相应地删除错误数据集并为输入添加正确的数据集。通过单击 “Run” 按钮,批处理将比以前更快,中间数据集不再存在。
除了图形用户界面(GUI),脚本可能是Letswave7中最常用的功能。脚本为用户提供了更大的脑电图处理自由度,但是还要求用户具有更扎实的编程基础,这使得没有相关背景的研究人员难以使用。Letswave7致力于解决这个问题。
在Letswave7中,系统通过运行相应的Matlab脚本来运行批处理。完成处理流程后,已经自动生成了相应的Matlab脚本。用户可以单击批处理模块中的 “ script ” 按钮以获取完整的脚本。
在批处理的每个步骤中,也可以使用右下角的 “script ” 按钮来获得用于单步操作的脚本,从而可以切实减少用户对教程的依赖。即使没有扎实的Matlab编程背景的用户也可以编写高质量的脚本来进行批处理EEG信号处理。
在Letswave7中,我们提供了具有丰富的函数库FLW_。该库中所有函数的语法都是统一的。对于操作的第一步,我们只需要定义选项,然后调用相应的FLW函数即可。
option=struct('XXX',xxx,'XXX',xxx); lwdata= FLW_XXX.get_lwdata(lwdata,option);
该选项中的参数设置与GUI中的参数选择相同。只需注意函数的输入和输出是单个数据集还是多个数据集即可。
通过单击管理器模块右侧菜单中的“ send to workplace”,可以轻松访问每个数据集,该数据集将在Matlab工作区中显示为变量,名称为“ lwdata ”。然后,基于脚本的用户可以在Matlab中对数据集进行自己的操作。
操作后,用户还可以通过单击管理器模块右侧菜单中的“ read from workplace ”,以Letswave格式保存数据集。
同样,其他信息也很容易在其他模块中访问,例如事件信息,通道名称和有关平均值,最大值和最小值的统计结果。
不仅批处理模块中的操作,其他操作(如数据导入和图形生成)也都可以脚本化。因此,从数据导入到预处理,时间/频率分析和统计分析,再到最终图形生成,EEG信号信号分析的整个过程可以轻松,快速地编写为脚本。
例
在这里,我们重复对P300数据集的数据分析,以演示在Letswave7中使用脚本的情况。
将Letswave路径切换为“ rawdata1 ”。打开数据导入对话框,然后选择数据集 “ Sub093.eeg”。除了单击按钮Run之外,我们还可以单击按钮script来获取用于数据导入的脚本script1。
在Matlab中运行script1,我们还可以通过单击Run按钮直接加载数据集 “ Sub093” 。
打开之前保存的批处理“ P300 .lw_script ” 。除了单击按钮Run之外,我们还可以单击按钮script来获取用于单个主题分析的脚本script2。在Matlab中运行script2,我们也可以完成单主题分析。
熟悉Letswave脚本和Matlab编程后,就可以将这两个脚本组合到script3并对其进行编辑以提高效率,并更改数据集的名称以进行进一步的多主题分析。
在Matlab中运行script3,对于时域分析,我们可以得到平均结果“ Sub093 P300 Target ”和“ Sub093 P300 Nontarget ”,对时频域分析可以得到“ cwt Sub093 P300 Target ”和“ cwt Sub093 P300 Nontarget ”。
选择数据集 “ Sub093 P300 nontarget.lw6”,“ Sub093 P300 target.lw6”,“ cwt Sub093 P300 target.lw6”,“ cwt Sub093 P300 nontarget.lw6”。我们可以按照单主题分析图形进行制作。
单击按钮script以获取用于生成图形的脚本script4。在Matlab中运行script4,我们可以得到类似的图形,但是图例的位置需要调整。
Letswave的路径切换到“ rawdata2 ”,重复平均和统计分析的操作。在通过String操作进行编辑并添加for循环之后,我们可以拥有用于多主题分析的脚本script5。
在Matlab中运行script5,我们可以得到与之前多主题的平均与统计分析完全相同的结果。
总结:通过以上教程,我们学习了如何运用letswave进行图形生成、批处理以及脚本生成。
至此为止,我们关于letswave的教程就结束啦!这些只是基本的操作步骤,具体的方法和参数还是要根据自己的实验目的来设置,希望本次教程能帮助到大家~
PS: 本文首发于公众号 行上行下,公众号后台回复 “Letswave” 可获得安装包、原文教程以及其他资料等内容。