本文介绍脑机接口实验需要的代码,使用MATLAB实现(哈工大被禁用MATLAB,且用且珍惜,国产软件加油,科研加油)
心理物理学工具箱版本3(PTB-3)是一组免费的Matlab和GNU Octave函数,用于视觉和神经科学研究。 它使合成和显示精确控制的视觉和听觉刺激以及与观察者互动变得容易。
g.tec是Christoph Guger和GünterEdlinger于1999年在奥地利创立的g.tec医学工程。 g.tec开发并生产用于侵入式和非侵入式记录的高性能脑计算机接口和神经技术。
安装过程请根据说明指导一步一步操作即可,这里不再说明,下面来给出几个代码的范例。
psychtoolbox
创建窗口显示文字
clear all;
[wptr,wrect]=Screen('OpenWindow',1,0,[50,50,1500,720]);%创建一个窗口
DrawFormattedText(wptr,'Dong 2020nniHarbour.','center','center',255);%文字内容和格式
WaitSecs(2);%显示2s
Screen('Flip',wptr);%显示到屏幕上
Screen('CloseAll');%关闭窗口
声音刺激
clc;
InitializePsychSound(1);
[waveform,Fs] = audioread('di.wav');
numChannels = size(waveform, 2);
pahandle = PsychPortAudio('Open', 2, [], 1, Fs, numChannels);
PsychPortAudio('FillBuffer', pahandle, waveform' );
startTime = PsychPortAudio('Start',pahandle,1);
WaitSecs(1);%做一个延时,否则下一句代码执行,会立即停止声音的播放
PsychPortAudio('Close');%可有可无,最好有
绘制矩形
%% 画矩形
PsychDefaultSetup(2);
[window, windowRect] = PsychImaging('OpenWindow', 0,0,[0,0,1920,1200]);
%矩形参数设置
[xCenter, yCenter] = RectCenter(windowRect);
baseRect = [0 0 200 200];
centeredRect = CenterRectOnPointd(baseRect, xCenter, yCenter);
rectColor = [1 0 0];
Screen('FillRect', window, rectColor, centeredRect);
%在屏幕上显示以上内容
Screen('Flip', window);
%按键终止程序
KbStrokeWait;
sca;
按键
%% 根据按下的上下箭头反馈对应的文字
%% keyboard arrow
%初始化ptb
PsychDefaultSetup(2);
[wptr, windowRect] = PsychImaging('OpenWindow', 0,0,[0,0,1920,1200]);
%设置按键
upKey = KbName('UpArrow');
downKey = KbName('DownArrow');
%操作提示
feedbacktext='up:↑ down:↓nnwhen screen is blacknselect in 2 seconds';
justSaySomething(wptr, feedbacktext);
WaitSecs(2);
Screen('Flip',wptr);
%两秒钟时间做出按键选择
t=GetSecs;
while GetSecs<t+2
[keyIsDown,secs, keyCode] = KbCheck;%获取按键
if keyCode(upKey)
justSaySomething(wptr, 'up');
WaitSecs(1);
Screen('Flip',wptr);
elseif keyCode(downKey)
justSaySomething(wptr, 'down');
WaitSecs(1);
Screen('Flip',wptr);
end
end
%结束语
DrawFormattedText(wptr,'Dong 2020nniHarbour.','center','center',255);%文字内容和格式
WaitSecs(1);%1秒钟的展示
%关闭窗口
Screen('CloseAll');
g.tec
% MATLAB API V1.16.00
%说明:API使用手册提供的demo中是使用while函数,当采集到指定长度的脑电信号之后停止,因为matlab本身是一行一行代码完成的,那么在实际和范式结合的时候,不能满足同时呈现范式以及采集当前刺激下脑电的记录,因此使用timer函数进行信号的采集
clc;
%初始化PTB设置,因为懒得写延时的代码,用的PTB的waitsecs函数
PsychDefaultSetup(2);
%因为用到timer,初始化全局变量
global gds_interface
global eegdata
gds_interface = gtecDeviceInterface();
eegdata = [];%初始化空矩阵用于存放eegdata
%端口设置
gds_interface.IPAddressHost = '127.0.0.1';
gds_interface.IPAddressLocal = '127.0.0.1';
gds_interface.LocalPort = 50224;
gds_interface.HostPort = 50223;
%连接设备
connected_devices = gds_interface.GetConnectedDevices();
%确认设备为USBamp
gusbamp_config = gUSBampDeviceConfiguration();
gusbamp_config.Name = connected_devices(1,1).Name;
gds_interface.DeviceConfigurations = gusbamp_config;
%获取可用通道数目
available_channels = gds_interface.GetAvailableChannels();
%设置采样率和扫描数
gusbamp_config.SamplingRate = 256;
gusbamp_config.NumberOfScans = 8;
%通道设置,滤波等
for i=1:size(gusbamp_config.Channels,2)
if (available_channels(1,i))
gusbamp_config.Channels(1,i).Available = true;
gusbamp_config.Channels(1,i).Acquire = true;
% do not use filters
gusbamp_config.Channels(1,i).BandpassFilterIndex = 49;
gusbamp_config.Channels(1,i).NotchFilterIndex =2;
% do not use a bipolar channe
gusbamp_config.Channels(1,i).BipolarChannel = 0;
end
end
%应用以上设置
gds_interface.DeviceConfigurations = gusbamp_config;
gds_interface.SetConfiguration();
%设置定时器,用于连续读取缓冲区的脑电信号
t=timer('Name','geteegdata','TimerFcn',{@geteegdata},'Period',0.3,'ExecutionMode','fixedSpacing');
%开始采集(缓冲区开始读取)
gds_interface.StartDataAcquisition();
%计时器开始工作,记录脑电
start(t);
WaitSecs(4);%4s
%停止计时器
stop(t);
%缓冲区停止获取数据
gds_interface.StopDataAcquisition();
%删除计时器
delete(t);
%解除设备占用
delete(gds_interface);
clear gds_interface;
clear gusbamp_config;
%save eegdata; %保存脑电数据以离线处理
%画图看一下
plot(eegdata(:,1));%通道1的
xlabel('channel 1');
ylabel('a');
%计时器回调函数
function geteegdata(~,~)
global gds_interface
global eegdata
global data
[~ , data] = gds_interface.GetData();
eegdata=[eegdata;data];
end
psychtoolbox官网和gtec都有提供demo,更多的学习查看demo即可,祝科研顺利
图片来自g.tec官网
https://www.gtec.at/www.gtec.atpsychtoolbox网站:
Psychtoolbox-3 - Overviewpsychtoolbox.org