Eprime连接BrainVision Recorder打标导出数据流程
Eprime
我们这里使用并口代码通信,需要提前了解电脑有没有并口卡
https://support.pstnet.com/hc/en-us/articles/229359787-DEVICE-Parallel-Port-Device-17150
并口通信
博主这里没用ui设置打标,需要在ui里设置的同学可以看一下下面这篇文档
DEVICE: How To Send Markers Through a Parallel Port [25286]
这里只讲使用inline脚本通信,参考下面这篇文档
INFO: Legacy Methods to Send Markers to an External Device [17212]
1、查找电脑端口号

确定并口号为3FF8,记住它,写代码要用
2、代码编写
很简单,但注意值范围需要在0~255,因为只有8个引脚
Dim n As Integer 'n的范围是0~255,因为只有8bit
WritePort &H3FF8, n
Sleep 10 '持续一段时间电平
WritePort &H3FF8, 0 '清0

ps.清0的作用是,recorder这类打标检测的是上升沿或下降沿,只检测跳变,不检测持续的信号,如果不清0,很容易导致部分标签之间没有跳变从而漏标签
从技术底层来说,脑电采集卡(如 BrainAmp)和录制软件(Recorder)监测的是并口 8 个数据引脚中任意一位电平的变化(Transition)。
recorder里设置的是上升沿(high active):
只要这 8 位二进制数中有一个位(Bit)从 0 变到了 1,系统就会认为“有新信号进来了”,进行打标。
recorder里设置的是下降沿(low active):
有一位从1变0打标就可以正常接收
WritePort函数的作用是直接修改计算机硬件端口(Parallel Port / IO Port)的电压状态。
物理本质: 并行端口(通常是针脚)有 8 个数据位。
WritePort实际上是在告诉计算机的 I/O 控制器:“请将这些针脚的电压拉高(约 5V,代表 1)或者拉低(0V,代表 0)”。非阻塞/瞬间完成: 当你执行
WritePort(address, 1)时,计算机的 CPU 发出指令,硬件控制器接收指令并改变针脚电压。这个动作是瞬间完成的(通常在微秒级别)。状态的“锁存”特性: 一旦你改变了电压,除非你再次发送
WritePort(address, 0)指令,否则硬件针脚会永久维持这个电平。这就是为什么你不需要在WritePort之后立刻做别的,针脚依然保持高电平。
但不知道是不是eprime对语法有另作处理吗,其实我发现就算设置的是上升沿,发只有下降沿的数字也不会出现标签丢失的情况...(31->27 00011111->00011011标签也不会丢失)不过保险起见,大家还是尽量加上清0逻辑吧
26.6.26
博主发现是recorder会计算同一事件标记的组合值的变化,只要它收到的组合值变了,就能打上标


https://pressrelease.brainproducts.com/trigger-code-design/#trigger-plan-1
BrainVision Recorder接收
1、运行eprime的主机的并口线需要插到支持trigger in的放大器上
2、打开digital port settings 把type全改成相同类型(因为我们是按十进制打的标,想直观看清楚打的标正确与否最好改成一样的类型,最后读取是按类型计算的十进制值)

3、记录
-
原始文件生成:记录结束后,Recorder 会在指定的
Raw Data文件夹下生成三个核心文件(缺一不可):-
.vhdr(Header):文本文件,包含通道名、采样率等元数据。 -
.vmrk(Marker):关键文件,存储了所有标签及其对应的时间点。 -
.eeg(Data):二进制文件,存储实际的电压数值
-
4、使用python第三方库读标签验证
import mne
# 读取原始数据
raw = mne.io.read_raw_brainvision("your_file.vhdr", preload=True)
# 打印所有标签的原始描述和时间戳
print(raw.annotations.description)
# 输出类似: ['m 1', 'm 27', 'm 29', 'm 30', ..., 'm 28']
更多推荐

所有评论(0)