You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中如何后台运行定时任务保障心理物理学实验时序

心理物理学实验MATLAB时序与后台响应追踪问题

我在MATLAB中开展一项心理物理学实验,刺激呈现的时序要求极为严格。已编写代码生成由1、2、3组成的序列,每个数字对应触发不同刺激的展示。当刺激2出现时,被试需在1秒内通过ResponsePixx按钮盒做出按键响应。

要求每个刺激需在前一个刺激呈现0.5秒后展示,这意味着刺激2的响应时段会与后续刺激的展示时段重叠。因此需要在后台追踪按键响应的同时,继续执行刺激序列的展示。

核心问题代码

% 创建数字序列
sequence = % 生成1×N的1、2、3序列的函数输出

for iSequence = 1:length(sequence)
   
    disp(sequence(iSequence)) % 替代实际刺激展示的占位代码
    
    if sequence(iSequence) == 2
        % 需要在等待1秒的同时继续序列展示
        % 这段时间内要运行追踪被试响应的代码
        disp("时间已过") 
    end
    
    pause(0.5)
    
end

尝试过的parfeval方案(未成功)

试过用parfeval但没达到预期——输出显示正常,但会打乱主序列的展示时序(推测是从并行池获取输出时产生延迟,我对并行处理经验有限):

delete(gcp('nocreate'))
clear 

background = parpool(1);

sequence = % createTrialSequence生成序列

for iSequence = 1:length(sequence)
    disp(sequence(iSequence))
    
    if iSequence > 1
        if sequence(iSequence - 1) == 2
            fetchOutputs(evalButton)
        end
    end
    
    if sequence(iSequence) == 2
        evalButton = parfeval(background, @trackInBackground, 1);
    end
    
    pause(0.5)
    
end

尝试过的事件监听器方案(未成功)

还试过事件与监听器,但同样会暂停序列展示(我对其原理不太熟悉,可能遗漏了关键细节):

clear
event = targetAppeared;
listener = trackTargetAppearance(event);

sequence = %createTrialSequence生成序列

for iSequence = 1:length(sequence)
    disp(sequence(iSequence))
    
    if sequence(iSequence) == 2
        event.isTarget
    end
    
    pause(0.5)
    
end


classdef targetAppeared < handle
    events
        targetEvent
    end
    methods
        function isTarget(obj)
            notify(obj, 'targetEvent')
            
        end
    end
end

classdef trackTargetAppearance < handle

    methods
        function obj = trackTargetAppearance(targetObj)
            addlistener(targetObj, 'targetEvent', @trackTargetAppearance.handleEvent)
        end
    end
    
    methods (Static)
        function handleEvent(~, ~)
            startTime = GetSecs; % 获取系统时间,来自PsychToolBox
            while GetSecs < (startTime + 1)
                continue
            end
            disp("目标响应窗口已结束")
        end
    end    
end

内容的提问来源于stack exchange,提问作者jakedoescodesometimes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 03:11:11