Matlab与BrainVision脑电信号录制软件的并口通信

Matlab中可以使用io64包向并口发送数据。
io64是一个可以用作并口通信的包,其使用方法在官网有清楚的介绍。此文写作时io64包的官网挂了,可以使用互联网档案馆-io64官网20180309002101归档

下文中BrainVision脑电信号记录软件简称为Recorder。

在Matlab通过io64与Recorder的通讯过程中,信号使用并口发送,程序向Recorder发送一次Marker的通信过程如下(由测试经验得出,无官方文档):

  1. 拉高并口电平,即发送数据信号,如代码io64(ioObj, address, singal);
  2. 等待一段时间,这段时间可能与Recorder刷新率有关;
  3. 拉低并口电平,即结束此次数据发送,代码io64(ioObj, address, 0);

Recorder记录到Marker的时间是接收到第一步程序发出的电信号的时间。发送的信号最大为8个比特位,即十进制数字区间[0, 255]。

第二步等待一段时间仅仅是为了确保Recorder成功接收到了信号,建议最短不要低于0.001(测试经验所得,无文档,可能与并口线长度等有关)。

第三步拉低电平是为了结束一次数据发送,理论上第一步与第三步之间的时间(即第二部的等待时间)可以很长,测试过程中等待2秒无异常。因此第三步拉低电平的信号可以在结束一个trial之后发送,以免影响到实验过程中trial的onset或者response时间。

如果不进行第三步拉低电平的操作,Recorder虽然能够正常显示下一次发送的Marker,但是在Marker日志中会出现伪信号导致的异常Marker。

综上,给出两个demo。由于第二种没有额外等待时间的影响,因此记录各时间节点时不需要花太多精力考虑时间误差的问题。

1. 发送信号结束后开始trial

address = hex2dec('D010');
ioObj = io64();
status = io64(ioObj);
    
for i = 0:1e10
    marker =  mod(i, 9) + 1;
    
    io64(ioObj, address, marker);
    WaitSecs(0.004);
    io64(ioObj, address, 0);

    % Trial start
    WaitSecs(2);
       
end

2. 拉高电平后开始trial,结束trial后拉低电平

address = hex2dec('D010');
ioObj = io64();
status = io64(ioObj);
    
for i = 0:1e10
    marker =  mod(i, 9) + 1;
    
    io64(ioObj, address, marker);

    % Trial start
    WaitSecs(2);

    io64(ioObj, address, 0);   
end

一些使用Psychtoolbox-3的注意事项

注意本文中使用的是Psychtoolbox-3

1. 要求安装GStreamer

注意:

  1. GStreamer版本要求为1.18
  2. 通过installer安装的Psytoolbox有能力自动搜索GStreamer并将其添加到Matlab的path中,若使用免安装版,需要手动添加GStreamer的目录到path
Requires 64-Bit GStreamer 1.18 MSVC on Microsoft Windows for both Matlab and Octave. GStreamer 1.18 recommended on macOS.
Point out need for GStreamer 1.18 instead of GStreamer 1.20 more clearly.

GStreamer安装异常的结果包括但不限于:

  1. 文字字号错误
  2. 文字显示不全
  3. 衬线字体基线(baseline)对齐异常

2. add path有关

./Psychtoolbox/PsychBasic/目录中包含了不同编译环境生成的.mex文件,手动添加Psychtoolbox目录到Matlab的path后,./Psychtoolbox被添加到了最高层级,实际需要手动将./Psychtoolbox/PsychBasic/目录下与当前操作系统匹配的目录移到最顶层。

-

主动断贷名单.

感觉这就是会引起国内系统性金融风险的星星之火了。可能比08次贷危机严重得多。要见证历史了吗

Install Python 3.10 from compiling source code under CentOS 7

  ...
  817  sudo mkdir /usr/local/openssl11
  818  cd /usr/local/openssl11
  819  sudo ln -s /usr/lib64/openssl11 lib
  820  sudo ln -s /usr/include/openssl11 include
  ...
  900  cd Python-3.10.5/
  901  ls
  902  ./configure --enable-optimizations --with-openssl=/usr/local/openssl11
  903  sudo make altinstall

or find and edit code about ssl, cotent is as follow.

  902  vim Modules/Setup 
 OPENSSL=/usr/local/openssl11
 _ssl _ssl.c \
     -I$(OPENSSL)/include -L$(OPENSSL)/lib \
     -lssl -lcrypto

Try to find my ego.

塔尖仍旧记得 这拥抱极美好
爱有千斤重 重过无涯的铁路
你那手指再笨拙再粗
肌肤也被你修补
从前那一位 永未能做到
是你去唤醒我 努力才能被爱慕
但回头目睹你 为我好自己不好
我这幸运儿合着眼睛
只得你沉重身影
如果这记忆非爱情
连天都不会太高兴
莫非可终身美丽
才值得勾勾手指发誓
对你不止感激敬礼
当你知己才是虚伪
莫非多一分秀丽
才值得分享我的一切
给我自信 给我地位
这叫幸福 不怕流逝
任他们多漂亮 未及你矜贵
记忆无论再轻 轻不过脉搏声
靠你的手臂 抱我人潮中畅泳
我这幸运儿幸运到
一转身找的到你
来为我打气
如果可抱起这爱情
连天都会替我高兴
莫非可终身美丽
才值得勾勾手指发誓
对你不止感激敬礼
当你知己才是虚伪
莫非多一分秀丽
才值得分享我的一切
给我自信 给我地位
这叫幸福 不怕流逝
任他们多漂亮 未及你矜贵
因有自信 所以美丽
使我自卑都放低
在半空之中亲你 不管身世

----林夕