肌电信号的包络matlab程序_实验范式(PTB)和脑电信号采集(G.TEC)代码DEMO
发布日期:2022-02-03 13:16:52
浏览次数:11
分类:技术文章
本文共 3779 字,大约阅读时间需要 12 分钟。
本文介绍脑机接口实验需要的代码,使用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);%显示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.atpsychtoolbox网站:
Psychtoolbox-3 - Overviewpsychtoolbox.org转载地址:https://blog.csdn.net/weixin_34759094/article/details/112193513 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月09日 08时24分30秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
解决 nginx: [error] open() “/usr/local/nginx/logs/nginx.pid“ failed (2: No such file or directory) 问题
2019-04-27
LeetCode-122. 买卖股票的最佳时机 II(Goland实现)
2019-04-27
LeetCode-136. 只出现一次的数字(Goland实现)
2019-04-27
go-递归实现二叉树的三种排序方式(前序、中序、后序)【详细】
2019-04-27
LeetCode-LCP 18. 早餐组合(Goland实现)
2019-04-27
C++从入门到进阶近100本书推荐电子书pdf
2019-04-28
蓝桥杯 - [2014年第五届真题]分糖果(模拟)
2019-04-28
蓝桥杯 - [2013年第四届真题]大臣的旅费(DFS)
2019-04-28
蓝桥杯 - [2013年第四届真题]带分数(全排列)
2019-04-28
蓝桥杯 - [2013年第四届真题]幸运数(模拟)
2019-04-28
蓝桥杯 - [2013年第四届真题]横向打印二叉树(排序二叉树)
2019-04-28
蓝桥杯 - [历届试题]网络寻路(枚举)
2019-04-28
牛客网 - [中南林业科技大学第十一届程序设计大赛]兑换零钱(背包问题)
2019-04-28
HDU - Robberies(01背包)
2019-04-28
HDU - 最大报销额(01背包|贪心)
2019-04-28
HDU - Coins(完全背包)
2019-04-28
JXFCZX — 砝码称重1(DFS+背包)
2019-04-28
JXFCZX — 质数和分解(完全背包)
2019-04-28
JXFCZX — 花店橱窗(动态规划)
2019-04-28
JXFCZX — 逃亡的准备(多重背包)
2019-04-28