肌电信号的包络matlab程序_实验范式(PTB)和脑电信号采集(G.TEC)代码DEMO

本文提供MATLAB中处理肌电信号包络的代码示例,以及使用G.TEC设备进行脑电信号采集的DEMO。介绍了如何在MATLAB环境下创建窗口、显示文字、播放声音、绘制图形和处理按键输入。同时,推荐通过psychtoolbox和G.TEC的官方demo进行进一步学习。
摘要由CSDN通过智能技术生成

48b5f9917b9f4a4b0781b88afda408eb.png

本文介绍脑机接口实验需要的代码,使用MATLAB实现(哈工大被禁用MATLAB,且用且珍惜,国产软件加油,科研加油)

心理物理学工具箱版本3(PTB-3)是一组免费的Matlab和GNU Octave函数,用于视觉和神经科学研究。 它使合成和显示精确控制的视觉和听觉刺激以及与观察者互动变得容易。

773d0207680cc60e0379fe97537bf39c.png
g.tec是Christoph Guger和GünterEdlinger于1999年在奥地利创立的g.tec医学工程。 g.tec开发并生产用于侵入式和非侵入式记录的高性能脑计算机接口和神经技术。

6f94a5044b5bc7c1f3851511a50060f1.png

安装过程请根据说明指导一步一步操作即可,这里不再说明,下面来给出几个代码的范例。

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.at

psychtoolbox网站:

Psychtoolbox-3 - Overview​psychtoolbox.org
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值