TOMORI233 / EEGApp

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

User Guide

Git项目地址git@github.com:TOMORI233/EEGApp.git

1. MATLAB PTB与App设置

  1. 安装**MATLAB 2020b及以上版本(MATLAB 2022a**对部分cell类型的运算不兼容,可能会遇到意料之外的问题,不推荐),以及在附加功能中安装以下工具包:

Signal processing toolbox

  1. 本项目使用需要MATLABUtils项目,Git地址git@github.com:TOMORI233/MATLABUtils.git

  2. 将**PsychtoolboxGstreamer**文件夹放在合适位置

  3. 右键 我的电脑-属性-高级系统设置-环境变量-系统变量-新建

变量名: GSTREAMER_1_0_ROOT_MSVC_X86_64

变量值: 根路径\gstreamer\1.0\msvc_x86_64\

  1. 在MATLAB中打开根路径\Psychtoolbox-3-3.xx\Psychtoolbox,打开运行SetupPsychtoolbox.m。MATLAB命令行中若无Screen()无法使用的相关提示则表明配置完成,否则检查Gstreamer的安装(可自行另外下载安装PTBGstreamer,配置方法相同)

以下针对已经打包的App:

  1. 运行for_redistribution文件夹下的MyAppInstaller.mcr完成MATLAB_runtime的本地安装(注意runtime版本,请安装用于打包*.exe的版本)

  2. 运行for_redistribution_files_only文件夹下的MyApp.exe即可

2. LTP并口设置(Neuroscan)

  1. 运行MATLAB LTP Config\InpOutBinaries_1501\Win32\InstallDriver.exe

  2. MATLAB LTP Config\文件夹下的inpoutx64.dllinpoutx64.sys文件复制或移动至C:\Windows\System32\目录下

  3. MATLAB LTP Config\下的config_io.minp.moutp.mio64.mexw64加入MATLAB的路径

  4. 在MATLAB中运行config_io.m成功则表示配置完成(失败请重启电脑)

%% Init IO
ioObj = io64();
status = io64(ioObj);

%% Output event
address = hex2dec('378'); % decimal
code = 100; % range 0~255
io64(ioObj, address, code);
WaitSecs(0.01); % PTB API for pausing
io64(ioObj, address, 0);

3. Neuracle TriggerBox设置(Neuracle)

  1. 右键以管理员身份运行Recorder-TxCSSupport_Base_4200-202101210-48cb850b\Driver下的CDM v2.12.12 WHQL Certified.exe,安装TriggerBox的USB驱动

  2. Recorder-TxCSSupport_Base_4200-202101210-48cb850b\TriggerBox下的TriggerBox.m加入MATLAB路径

  3. % 请保证TriggerBox已连接再进行测试
    %% Init triggerBox
    mTriggerBox = TriggerBox();
    
    %% Output event
    code = 100; % range 0~255
    mTriggerBox.OutputEventData(code);

4. App使用

  1. 编辑rules.xlsx,请务必按loadSounds导出的顺序填写,务必,务必,务必,务必!(强烈建议所有文件以数字1_, 2_, 3_, ...开头以便按一定顺序读取,对于超过10的请使用001, 002, ..., 100, 101, ...开头,MATLAB读取文件的文件名排序为数字-大写字母-小写字母)
% 生成声音时按一定顺序
% 文件命名 ord_param1-param1Val_param2-param2Val_...
% ord 001, 002, ..., 249, 250
ord = arrayfun(@(x) strrep(x, ' ', '0'), num2str((1:250)'));
for index = 1:length(nSounds)
    filename = [ord(index, :), '_param1-', num2str(param1Val), '_param2', num2str(param2Val), '_', otherParamsNameValue, '.wav'];
    audiowrite(filename, y{index}, fs);
end

% 使用rulesGenerator.m根据文件名自动生成rules.xlsx
% 将pID=2的rules强制拼接至原rules.xlsx表格下(新增原来不存在的列)
% 在rules.xlsx中可以单独编辑某个声音的重复次数和间隔
ITI = 5;
pID = 2;
nRepeat = 40;
rulesGenerator(fullfile("sounds", num2str(pID)), ...
			   "rules.xlsx", ...
			   pID, ...
			   "测试父节点", "测试子节点1", ...
			   "passive", ...
			   "Test Phase1", ...
			   ITI, ...
			   nRepeat, ...
			   "forceOpt", "on");
  1. 将声音刺激文件放进对应sounds\{pID}\数字命名的文件夹下
  2. 命令行输入mainApp打开主界面
  3. 编辑被试信息:带*号为必填项
  4. 编辑刺激参数:请反复确认默认播放设备的采样率以及触发方式,默认为None即无触发,可选触发方式包括:LTP、COM和TriggerBox
  5. 在nodetree中勾选需要完成的protocol
  6. 可选:在有行为的实验中打开实时行为查看窗口
  7. 开始记录,同时自动将参数保存在数据存储路径和本项目根目录下的config.mat
  8. 完成一个protocol的记录,自动保存数据为[pID].mat,手动/自动进入下一阶段。保存的内容包括:trial数据(onset, offset, soundName, push, key,时间为系统时间,可用datestr(t, "yyyy-mm-dd HH:MM:SS.FFF")转为时间戳,单位:sec)、pID、rules、protocol名。同时在该目录下也会保存一个config.mat
  9. 自动/手动(强制)结束记录

5. 注意事项:

  1. rules.xlsx未指定的nRepeat的声音,将默认使用设置界面中的nRepeat,其中文件名带Control的为界面中的nRepeat/3(指定了则不会/3) 文件名带Control将不再影响次数,请在相应rules.xlsx中对nRepeat进行设置。

  2. 可以在参数设置中勾选强制以将该重复次数应用于所有声音。

  3. pID应小于10000(父节点的NodeData为10000+i,其中i为父节点序号)。

  4. 建议把自己的protocol对应的rules建一个文件夹放在rules\路径下,如rules\offset MSTI\

  5. 每个人分配100个可用pID,请在sounds\文件夹下创建自己pID\的声音文件夹,请勿越界使用。分配关系如下:

主试 可用pID范围
XHX 100~199
HQY 200~299
ZYY 300~399
SPR 400~499
  1. 在有行为的实验中,请保证ISI > sound duration + choiceWin + 0.5,否则在Miss时可能会出现到下一个trial的计时不准。

6. Update Log

请将每次更新内容置顶写在这里,标注日期、修改者和兼容性(Incompatible/Compatible),对每条修改请标注修改类型(Add/Modify/Delete/Debug)。若为Incompatible,请给出修改方案。

  • 2023/08/14 by XHX - Incompatible

    Type Target Content
    Modify & Debug rulesGenerator.m ISI重命名为ITI,如果处理程序用到了请注意。
  • 2023/08/01 by XHX - Compatible (重要更新)

    Type Target Content
    Add & Modify behaviorPlotApp.mlapp, mainApp.mlapp, activeFcn.m, generalProcessFcn.m, rulesGenerator.m 增加实时查看行为结果的子App,可以在主界面中按实时行为查看按钮打开,需要在rules.xlsx中通过processFcn字段指定函数句柄以调用处理画图程序,行为处理程序可以统一使用generalProcessFcn.m,请将写好的处理程序放在根目录下的processFcn\目录下。在rulesGenerator.m中增加了固定规则字段processFcn,输入类型为函数句柄标量。
  • 2023/07/29 by XHX - Compatible

    Type Target Content
    Modify 项目结构 LTPTriggerBox的相关模块放在了根目录下的Trigger\文件夹下
    Add & Debug rulesGenerator.m 增加name-value输入参数forceOpt,当该选项被设置为"on"时,在尝试拼接失败后,强制将新增protocol的参数拼接在原始rules.xlsx中,之前存在的参数正常拼接,不存在的参数则在原本的行位置留空。选项默认"off",即首先尝试拼接,如果有冲突则新建rules_pID-[pID].xlsx对新的protocol参数单独保存。
  • 2023/07/18 by XHX - Compatible

    Type Target Content
    Modify activeFcn.m, passiveFcn.m 为了使第一个声音放出时不会出现burst,会先播放10个sample的0,并添加了100 ms的延迟再放实际声音,不影响实际给声音(参考playAudio.m
    Modify mainApp.mlapp 调整pID上限:100→10000
    Add activeFcn.m, passiveFcn.m 在完成每个protocol后,保存的*.mat内容增加了pIDrules,方便在处理时读取
  • 2023/07/03 by XHX - Compatible

    Type Target Content
    Delete playAudio.m 删除了本项目根目录下的playAudio.m,请使用MATLABUtils\toolbox API\PTB\playAudio.m,有特殊更改请创建自己名字的+xxx工具包
    Add paramsSettingApp.mlapp 添加了对COM触发的支持

About


Languages

Language:MATLAB 95.1%Language:C 4.9%