这一期,我们就来教大家学习如何用letswave绘制图形,以及对数据进行批处理,并介绍其中的脚本生成功能。温馨提示:以下阅读大概需要22分钟左右,若是需要相关软件与其他相关资料,也可直接在后台回复“letswave"获取哟~在对单个主题和多个主题进行分析之后,我们将在本部分中介绍ERP、时频图和topography图形生成。在本章中,我们将显示下图的生成过程。此图显示了Pz通道上P300的ERP,其topography在332 ms上,Target和Nontarget条件下的相应时频图显示在底部面板中。
1. 打开图形模块
· 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 ”,打开图形模块空白画布。
2. 创建子图
2.1 在画布中添加一条Curve,两个Image和一个Topograph。2.2 对于第二张Image和topograph,启用colorbar。首先,单击Content工具栏中的按钮,选择Image3中的子图并启用colorbar。然后,在“Subfigure”中选择topograph4并启用 colorbar。首先,单击工具栏中的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。
3. 添加内容
首先,单击工具栏中的“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。
4. 设置轴参数
首先,单击工具栏中的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 ”。
5. 导出图形
到目前为止,我们已经完成了Letswave中图形的编辑。接下来,我们需要导出图形,以便在其他软件中进行进一步的编辑。
单击工具箱中的“export the figure ” 按钮,将图形导出为eps或pdf格式。单击第二个按钮,将图形另存为“ Figure1.lw_figure ”,将文件保存在工具栏中。我们可以保存该图以便下次编辑。此外,date management可以通过更改数据源以生成新图形。
1. 打开图形模块
· avg merge_epoch Sub001 P300 Nontarget· avg merge_epoch Sub001 P300 Target单击“ Figure-> General Figure creator ”,以打开图形模块空白画布。
2. 创建子图
首先,将图形的宽度和高度设置为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定位。3. 添加内容
首先,单击工具栏中的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。
4. 设置轴参数
首先,单击工具栏中的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] ”。
在这一部分中,我们将对单个主题重新做时域分析。与上一教程中的逐步操作不同,本部分将使用批处理对数据进行分析。
注意:在每步操作中,不需要点击“Run”,需在所有操作处理完毕后,再点击“Run”运行。
1. 数据导入
下载教程数据集,解压缩rawdata1.zip文件,共有三个文件,分别是sub093.eeg,sub093.vhdr和sub093.vmrk。
打开Matlab,在Matlab的命令窗口中输入“ letswave7 ”以打开Letswave7。将letwave的路径设置为数据集的文件夹。
在管理器模块的菜单中选择“file->import->import EEG / MEG datafiles” ,然后将弹出导入数据对话框。按下add files按钮以添加文件sub093.eeg。2.删除无用的通道
在管理器模块的数据列表中选择数据集“ sub093 ”,然后单击“ edit”->“arrange signals”->“rearrange or delete epochs,channels,indexes”。在批处理模块中,按add all按钮以将所有通道添加到左侧列表框中。然后选择通道IO,然后按“ delete”按钮删除通道IO。
3. 过滤
单击左侧的selection,然后在菜单中选择“process- >frequency analysis and filters-> Butterworth filters”,并将low cutoff frequency(Hz)设置为0.05Hz。 注意:从此步骤开始,批处理中的操作将有所不同。我们从批处理模块而不是管理器模块中调用Butterworth过滤器。
4. 坏电极插值替换
单击左侧Butterworth filters,然后选择“edit->electrodes->interpolate channel using neighbouring electrodes”。在“ channel to interpolate:channels for”列表框中选择通道P1,然后单击“ find closest electrodes ”按钮。5. 计算ICA矩阵
单击左侧chan interp,然后选择“ process”->“spatial filters(ICA / PCA)->compute ICA matrix ”。选择decide by user,并将组件编号设置为40。6.人工识别成分
首先,单击左侧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,无需在此处设置任何选项。7.分段
首先,单击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。8. 重新参考
首先,单击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”。
9. 基线校正
单击reference,然后在批处理模块中选择“process”- >“baseline ”->“baseline correction”。左侧出现baseline correction选项,保留基线校正的默认设置。
10. 平均
首先,单击baseline correction,然后在批处理模块中选择“process”- >“arrange”->“compute arrange,std,median across epoch”。左侧出现average_epoch选项。保留基线校正的默认设置。为此,我们已经完成了分配批处理的工作。下一步骤将介绍运行批处理。11. 运行批处理
在“ 人工识别成分 ”步骤中,我们仍然手动在右侧面板中以橙色选择comp 1,comp 2,然后单击OK按钮。
测试中的所有处理都需要2分钟以上的时间,其中计算ICA矩阵的步骤非常耗时。结果将与逐步操作的结果完全相同。
12. 批处理操作的输入/输出
整个批处理过程分为四个阶段,每个阶段都有不同的颜色。每个会话都从load步骤开始。
实际上,自动添加load操作的目的是指定系统的输入数据集。在每个步骤中,必须弄清楚处理的输入和输出。在分步操作中,输入是选定的数据集,输出是添加了前缀的新数据集。
Letswave7自动添加load操作以要求用户指定输入数据集。当然用户还可以通过选择“ File-> load ” 来手动添加load操作。13. 中间数据集和前缀
在Letswave7中,每个步骤都会生成一个带有前缀的新数据集。有时,中间数据集没有用,但却占据了硬盘。此外,对这些中间数据集的读/写操作将很耗时。
在这种情况下,我们可以设置prefix为空,并检查了保存复选框的中间步骤的selection,butterworth filters,chan_interp,reference,baseline correction。
注意:将前缀设置为空实际上是在替换输入数据集。请注意,一旦保存了结果,它将覆盖原始数据集。 注意:每个会话的最终结果都需要保存。否则,所有处理都是徒劳的,因为没有结果保存在硬盘驱动器上。
由于数据集的名称已更改,因此我们需要在load操作的步骤中相应地删除错误数据集并为输入添加正确的数据集。通过单击“Run”按钮,批处理将比以前更快,中间数据集不再存在。
除了图形用户界面(GUI),脚本可能是Letswave7中最常用的功能。脚本为用户提供了更大的脑电图处理自由度,但是还要求用户具有更扎实的编程基础,这使得没有相关背景的研究人员难以使用。Letswave7致力于解决这个问题。1. 批处理脚本
在Letswave7中,系统通过运行相应的Matlab脚本来运行批处理。完成处理流程后,已经自动生成了相应的Matlab脚本。用户可以单击批处理模块中的“ script ”按钮以获取完整的脚本。
2. 单步操作脚本
在批处理的每个步骤中,也可以使用右下角的“script ”按钮来获得用于单步操作的脚本,从而可以切实减少用户对教程的依赖。即使没有扎实的Matlab编程背景的用户也可以编写高质量的脚本来进行批处理EEG信号处理。在Letswave7中,我们提供了具有丰富的函数库FLW_。该库中所有函数的语法都是统一的。对于操作的第一步,我们只需要定义选项,然后调用相应的FLW函数即可。option=struct('XXX',xxx,'XXX',xxx); lwdata= FLW_XXX.get_lwdata(lwdata,option);该选项中的参数设置与GUI中的参数选择相同。只需注意函数的输入和输出是单个数据集还是多个数据集即可。3. 轻松访问数据
通过单击管理器模块右侧菜单中的“ send to workplace”,可以轻松访问每个数据集,该数据集将在Matlab工作区中显示为变量,名称为“ lwdata ”。然后,基于脚本的用户可以在Matlab中对数据集进行自己的操作。
操作后,用户还可以通过单击管理器模块右侧菜单中的“ read from workplace ”,以Letswave格式保存数据集。同样,其他信息也很容易在其他模块中访问,例如事件信息,通道名称和有关平均值,最大值和最小值的统计结果。4. 数据导入和图形生成脚本
不仅批处理模块中的操作,其他操作(如数据导入和图形生成)也都可以脚本化。因此,从数据导入到预处理,时间/频率分析和统计分析,再到最终图形生成,EEG信号信号分析的整个过程可以轻松,快速地编写为脚本。例
在这里,我们重复对P300数据集的数据分析,以演示在Letswave7中使用脚本的情况。
脚本1数据导入
将Letswave路径切换为“ rawdata1 ”。打开数据导入对话框,然后选择数据集“ Sub093.eeg”。除了单击按钮Run之外,我们还可以单击按钮script来获取用于数据导入的脚本script1。
在Matlab中运行script1,我们还可以通过单击Run按钮直接加载数据集“ Sub093” 。
脚本2单主题分析
打开之前保存的批处理“ P300 .lw_script ” 。除了单击按钮Run之外,我们还可以单击按钮script来获取用于单个主题分析的脚本script2。在Matlab中运行script2,我们也可以完成单主题分析。
脚本3单主题分析(已编辑)
熟悉Letswave脚本和Matlab编程后,就可以将这两个脚本组合到script3并对其进行编辑以提高效率,并更改数据集的名称以进行进一步的多主题分析。在Matlab中运行script3,对于时域分析,我们可以得到平均结果“ Sub093 P300 Target ”和“ Sub093 P300 Nontarget ”,对时频域分析可以得到“ cwt Sub093 P300 Target ”和“ cwt Sub093 P300 Nontarget ”。
单个主题的脚本4 图形
选择数据集“ Sub093 P300 nontarget.lw6”,“ Sub093 P300 target.lw6”,“ cwt Sub093 P300 target.lw6”,“ cwt Sub093 P300 nontarget.lw6”。我们可以按照单主题分析图形进行制作。单击按钮script以获取用于生成图形的脚本script4。在Matlab中运行script4,我们可以得到类似的图形,但是图例的位置需要调整。
脚本5 多主题分析
Letswave的路径切换到“ rawdata2 ”,重复平均和统计分析的操作。在通过String操作进行编辑并添加for循环之后,我们可以拥有用于多主题分析的脚本script5。在Matlab中运行script5,我们可以得到与之前多主题的平均与统计分析完全相同的结果。
总结:通过以上教程,我们学习了如何运用letswave进行图形生成、批处理以及脚本生成。
至此为止,我们关于letswave的教程就结束啦!这些只是基本的操作步骤,具体的方法和参数还是要根据自己的实验目的来设置,希望本次教程能帮助到大家~
PS: 后台回复“Letswave”可获得安装包、原文教程以及其他资料等内容。
排版:华华