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

https://www.brainproducts.com/support-resources/how-to-assess-trigger-signal-properties-and-adjust-settings-correctly-in-mr-experiments/

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']

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐