查看原文
其他

letswave教程:脑电数据图形绘制、批处理以及脚本生成

喵君姐姐 行上行下 2022-04-26


Hello,这里是行上行下,我是喵君姐姐~
 
第一期我们学习了如何用Letswave进行数据的预处理和ERP分析,包括letswave7的安装、数据集导入、预处理中常见的几种降噪方法、ICA分解、ERP分析。
 
第二期我们学习了如何用letswave对单个主题进行时频分析以及对多个主题进行平均和统计分析
 
这一期,我们就来教大家学习如何用letswave绘制图形,以及对数据进行批处理,并介绍其中的脚本生成功能

温馨提示:以下阅读大概需要22分钟左右,若是需要相关软件与其他相关资料,也可直接在后台回复“letswave"获取哟~




在对单个主题和多个主题进行分析之后,我们将在本部分中介绍ERP时频图和topography图形生成
 
在本章中,我们将显示下图的生成过程。此图显示了Pz通道上P300的ERP,其topography在332 ms上TargetNontarget条件下的相应时频图显示在底部面板中。

 


1. 打开图形模块


首先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 ”,打开图形模块空白画布。


2. 创建子图


2.1 在画布中添加一条Curve,两个Image和一Topograph


2.2 对于第二张Image和topograph,启用colorbar
首先,单击Content工具栏中的按钮,选择Image3中的子图并启用colorbar


然后,在“Subfigure”中选择topograph4并启用 colorbar


2.3 调整每个子图的位置
首先单击工具栏中的Image按钮,选择“ Curve1”。将“Title”设置为“ P300 ”,字体大小设置为12,位置设置为x = 50y = 340w = 600h = 250


其次选择Image2。将“Title”设置为“ Target ”将字体大小设置为12,并将位置设置为x = 70y = 50w = 250h = 250


接着选择Image3。将“Title”设置为“ Nontarget ”,将字体大小设置为12,并将位置设置为x = 360y = 50w = 250h = 250


最后选择“ topograph4”。将“Title”设置为“ 332 ms ”,将字体大小设置为12,并将位置设置为x = 480y = 470w = 120h = 120


步骤2之后,图形将如下图所示,


3.  添加内容


首先,单击工具栏中的“Content”按钮,然后在子图中选择P300。添加一条curve,其数据源为“ Sub093 P300 target ”,通道为Pz



其次,添加一条curve,其颜色为蓝色[0,0.45,0.74],数据源为“ Sub093 P300 nontarget ”,通道为Pz



然后,添加一个line位置X1 = 0.332Y1 = -5X2 = 0.332Y2 = 10.8619



接着在子图中选择Target。将数据源设置为“ bl avg cwt bl reref ep_S 9 sp_filter ica chan_interp butt sel_chan sub093 ”,通道设置为Pz,范围从-99,启用width,并将宽度设置为0.5范围00开始。


接下来在子图中选择Nonarget。将数据源设置为“ bl avg cwt bl reref ep_S 10 sp_filter ica chan_interp butt sel_chan sub093 ”,通道设置为Pz,范围从-99,启用width,并将宽度设置为0.5范围00开始。



最后在子图中选择332 ms。将数据源设置为“ Sub093 P300 Target ”,x从0.3320.332head radius0.5shrink0.95,范围从-510.8619,以使其与P300曲线的范围相同。对于电极,将size设置为8并标记通道Pz。


步骤3之后,该图将如下图所示,



4.  设置轴参数


首先单击工具栏中的axis按钮,然后在子图中选择P300。并启用figure。在内容的列表框中选择curve1,在figure中将其名称更改为Target。在内容的列表框中选择curve2,在figure中将其名称更改为NonTarget


对于x轴,将x-lim设置为-0.51.5秒,将位置更改为origin。启用标签,并将其设置为“ Time [sec] ”。对于y轴,将位置更改为origin。启用label,并将其设置为“ Amp [\ muV] ”。



其次,在子图中选择target。对于x轴,将x-lim设置为-0.51.5秒,并将label设置为“ Time [sec] ”。对于y轴,将标签设置为“ Freq [Hz] ”。



然后在子图中选择Nontarget。对于x轴,将x-lim设置为-0.51.5秒,并将label设置为“ Time [sec] ”。对于y轴,将标签设置为“ \ muV ^ 2 / Hz ”。



步骤4之后,该图将如下图所示,



5.   导出图形


到目前为止,我们已经完成了Letswave中图形的编辑。接下来,我们需要导出图形,以便在其他软件中进行进一步的编辑。

 

单击工具箱中的“export the figure ” 按钮,将图形导出为epspdf格式。单击第二个按钮,图形另存为“ Figure1.lw_figure ”,将文件保存在工具栏中。我们可以保存该图以便下次编辑。此外,date management可以通过更改数据源以生成新图形。



在本章中,我们将显示多主题分析的图形生成。


1. 打开图形模块


首先,在rawdata1文件夹中,选择数据集
· avg merge_epoch Sub001 P300 Nontarget
· avg merge_epoch Sub001 P300 Target
单击“ Figure-> General Figure creator ”,以打开图形模块空白画布。


2. 创建子图


首先将图形的宽度和高度设置为1000400

其次添加标题为P300,字体大小为12,位置x = 80y = 70w = 870h = 300curve



然后添加标题为0 ms,字体大小为12,位置x = 100y = 180w = 120h = 120topograph


接着添加标题为332 ms,字体大小为12,位置x = 230y = 180w = 120h = 120topograph


最后添加标题为500 ms,字体大小为12topograph,在content面板中启用colorbar,并将位置x = 630y = 180w = 120h = 120定位



3.  添加内容


首先单击工具栏中的content按钮,然后在子图中选择P300。添加一条width3curve,数据源为“ avg merge_epoch Sub001 P300目标 ”,通道为Pz



其次添加一条curve,其颜色为蓝色[0,0.45,0.74]width3topographDshed,数据源为“ Sub093 P300 nontarget ”,通道为Pz


然后添加一个face opacity0.25edge opacity0,位置x = 0.196y = -2w = 0.516h = 14rect。并在curve1curve2上方对rect进行排序。


接着添加一个line,width1line styledshed,位置X1 = 0Y 1 = -2X 2 = 0Y2 = 1.2


接下来添加一个line,width1line styledshed位置X1 = 0.332Y 1 = -2X 2 = 0.332Y2 = 11.3


然后添加一个line,width1line styledshed位置X1 = 0.5Y1 = -2X 2 = 0.5Y2 = 2.8


紧接着在子图中选择0 ms。将数据源设置为“ avg merge_epoch Sub001 P300 Target ”,x从00head radius0.5shrink0.95,范围从-212,以使其与P300曲线的范围相同。对于电极,将大小设置为8并标记通道Pz


再然后在子图中选择332 ms。将数据源设置为“ avg merge_epoch Sub001 P300 Target ”,x从0.3320.332head radius0.5shrink0.95,范围从-212以使其与P300曲线的范围相同。对于电极,将大小设置为8并标记通道Pz


最后在子图中选择500ms。将数据源设置为“ avg merge_epoch Sub001 P300 Target ”,将x设置为0.50.5head radius设置为0.5shrink0.95,范围从-212以使其与P300曲线的范围相同。对于电极,将大小设置为8并标记通道Pz


步骤3之后,该图将如下图所示,



4.  设置轴参数


首先单击工具栏中的axis按钮,然后在子图中选择P300。并启用BoxLegend

其次在内容的列表框中选择curve1,在figure中将其名称更改为Target。在内容的列表框中选择curve2,在figure中将其名称更改为NonTarget

接着对于x轴,将x-lim设置为-0.51.5秒。启用gridlabel,将label设置为“ Time [sec] ”。

最后对于y轴,启用gridlabel,将label设置为“ Amp [\ muV] ”



步骤4之后,该图将如下图所示。



在这一部分中,我们将对单个主题重做时域分析。与上一教程中的逐步操作不同,本部分将使用批处理对数据进行分析。

注意:在每步操作中,不需要点击“Run”,需在所有操作处理完毕后,再点击“Run”运行。


1. 数据导入


下载教程数据集,解压缩rawdata1.zip文件,共有三个文件,分别是sub093.eegsub093.vhdrsub093.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”。左侧显示两个选项,即loadapply 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)”左侧又出现了两个选项,分别是loadsegmentation


其次,单击load,然后单击add并添加数据集“ sp_filter ica chan_interp butt sel_chan sub093 ”。



接着单击segmentation,选择事件代码S 9S 10,并将epoch开始时间和持续时间设置为-13


8. 重新参考


首先单击segmentation在批处理模块中选择“process”- >“reference signals”->“reference ”。左侧出现了两个选项卡,即loadreference


其次单击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,选择TP9TP10作为新参考在左侧的列表框中,在右侧框中点击“select all”。


9. 基线校正


单击reference然后在批处理模块中选择“process”- >“baseline ”->“baseline correction”。左侧出现baseline correction选项,保留基线校正的默认设置。


10. 平均


首先baseline correction然后在批处理模块选择“process”- >“arrange”->“compute arrange,std,median across epoch
左侧出现average_epoch选项。保留基线校正的默认设置。


为此,我们已经完成了分配批处理的工作。下一步骤将介绍运行批处理。

11. 运行批处理


通过点击“Run”按钮,我们可以运行整个批处理。
“ 人工识别成分 ”步骤中,我们仍然手动在右侧面板中以橙色选择comp 1comp 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”可获得安装包、原文教程以及其他资料等内容。



版:华华


脑电数据采集指导手册
Analyer脑电数据处理指导手册
eeglab脑电数据预处理指导手册
Letswave教程:脑电数据预处理与叠加平均

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存