肌电信号的包络matlab程序_实验范式(PTB)和脑电信号采集(G.TEC)代码DEMO
发布日期:2022-02-03 13:16:52 浏览次数:11 分类:技术文章

本文共 3779 字,大约阅读时间需要 12 分钟。

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);%显示2sScreen('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%初始化ptbPsychDefaultSetup(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

g.tec

% MATLAB API V1.16.00%说明:API使用手册提供的demo中是使用while函数,当采集到指定长度的脑电信号之后停止,因为matlab本身是一行一行代码完成的,那么在实际和范式结合的时候,不能满足同时呈现范式以及采集当前刺激下脑电的记录,因此使用timer函数进行信号的采集clc;%初始化PTB设置,因为懒得写延时的代码,用的PTB的waitsecs函数PsychDefaultSetup(2);%因为用到timer,初始化全局变量global gds_interfaceglobal eegdatagds_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();%确认设备为USBampgusbamp_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;    endend%应用以上设置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

转载地址:https://blog.csdn.net/weixin_34759094/article/details/112193513 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:transferto的流这么关闭_吃透Java IO:字节流、字符流、缓冲流
下一篇:angular 标准目录结构_jhipster生成的目录结构

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月09日 08时24分30秒