如何在matlab中安装psychtoolbox下载,已有psychtoolbox下载安装包

后使用快捷导航没有帐号?
查看: 14280|回复: 15
注册时间阅读权限10最后登录在线时间308 小时贡献值0 积分273分享好友记录日志相册UID22920
正式滴友, 积分 273, 距离下一级还需 227 积分
水晶1629 心级273 精华1主题帖子
本帖最后由 gsc07 于
00:52 编辑
3.2 Psychtoolbox-3教程之搭建实验测试平台程序
很多学心理学的同学下定决心要学Matlab其实很大一部分原因是想学如何使用Psychtoolbox-3(PTB-3)编写实验程序。但想要使用PTB-3写刺激程序,特别是稍微复杂一些的实验程序并没有想象中的那么简单。对于Matlab中一些基础的知识要掌握的比较扎实之后写起程序才能游刃有余。
可能很多童鞋一上来就拿着PTB-3的函数说明看起来,每个函数都能看懂,但PTB-3编程却有个很麻烦的地方就是很多函数使用起来并不直观,总是要先确定屏幕,打开一个窗口,然后将这个窗口的指针作为函数的传入参数放进去才能有效果。最让人不能忍的是刚开始的时候打开窗口出错了,窗口一般是不会自动关闭的。一般的做法都是ctrl+alt+del启动任务管理器,然后从应用程序中将Matlab关掉,再重新打开Matlab...如此的噩梦我经历过不少次。(虽然之后知道一些小窍门来调试,但还是挺麻烦的)
为了很好的展示这些函数,并且能给大家养成编写程序的好习惯,我这边用一些简单的方法搭建了一个PTB-3的函数测试平台或者叫做实验程序模板,其中也考虑到了一些实验程序中途出错的处理。
3.2.1 实验测试平台程序简单介绍
对于简易的实验程序,一般需要包括实验参数的设置,实验图片的预加载,实验刺激流程以及最后的数据存储。由于刚开始学习PTB-3工具箱,可以先将数据存储放到后面一些处理。所以在这个实验平台中主要集成了前三个内容。
基础平台包含四个函数,分别是
MainProgram.m
这是主程序,主要用来确定显示屏幕,打开窗口,调用初始化数据函数以及实验流程函数等等功能,也就是用来调控整个程序的。这个程序在我们学习PTB-3不需要怎么修改,只要调用就好。
程序如下:
function MainProgram(ExperimentFun,varargin)
global data
%% 判断传入参数
if nargin == 0
& & error('请传入一个实验函数!');
elseif nargin == 1
& & SetPictureFun = @(x) NaN;
elseif nargin == 2
& & SetPictureFun = varargin{1};
else
& & error('传入的参数过多!');
end
%% 清屏
clc
%% 生成实验数据
data = InitData();
%% 设置窗口参数
AssertOpenGL
scrnNum = max(Screen('Screens'));
%% 开窗口
window = Screen('OpenWindow',scrnNum,data.backgroundcolor);
Screen('BlendFunction', window, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Screen('Preference', 'TextAlphaBlending', 1);
%% 隐藏鼠标
HideC
%% 设置图片
try
& & picPoi = SetPictureFun(window);
catch ME
& & sca();
& & rethrow(ME);
end
%% 运行程序
try
& & ExperimentFun(window,picPoi);复制代码catch ME
& &sca();
& &rethrow(ME);
end
%% 显示鼠标
ShowC
%% 关闭窗口
Screen('CloseAll');复制代码(可能是由于bug,这块在一个函数框里面写不下那么多,就分成两块了,但这两块是同一个函数内的,不要分成2部分)
InitData.m
这是初始化实验数据的函数,实验的参数可以写在这个文件里面,比如实验中背景颜色,实验重复的次数,图片的大小什么的。这些内容需要写到一个变量名叫做data的结构体中。比如data.repeatTimes = 10; 这些参数在后面的写实验流程中将会用到。需要的时候可以往这个里面添加数据,不需要设置参数的时候可以不用到这个文件。
程序如下:
function data = InitData()
data.backgroundcolor = 128; % 背景颜色
%% 下面可以设置自己程序需要的参数
%...
%...复制代码
注意:在这个函数中有一个默认的参数data.backgroundcolor = 128;这个参数在Mainprogram.m中使用,是用来设置背景的颜色,所以不要删除这个参数,如果有需要,可以修改这个参数的值,其中0表示黑色,255表示白色,中间的数值表示不同的灰度。当然也可以改成彩色背景,比如data.backgroundcolor = [255,0,0]; 这个时候背景就编程红色了。后面的这个数组就是RGB颜色,具体有关色彩的表示我会在后面说。
这个函数是用来预加载图片。在PTB-3中,为了让图片呈现的更快一些,首先会先把这个图片读到内存中,并且会返回一个类似于指针的整数,在呈现的图片的时候就会用到这个东西。所以这个函数就是用来将你实验中所需要的所有图片都先放到内存中。由于这个函数是动态加载的,也就是说我们在学PTB-3的时候可能不同的实验程序,需要的图片不一样,所以这块函数也是不一样。所以这个函数可以有多个,根据需要去调用就好。下面的这个只是一个样例。这个函数的函数名可以随意取,比如SetPic1,SetPic_Demo等等,但要保证函数名要和这个m文件的文件名保持一致,并且在程序的第一行要加global data 下面就可以根据自己需要来编写了。所有需要的图片指针都必须存到一个叫picPoi的结构体中。
程序如下:
function picPoi = SetPic(window)
global data % 这个是获取实验参数的,在每个函数中都要加这么一句
% 下面这块每个方法可以不同,这块是用来做一个例子。
picture = uint8(255*rand(100,100)); % 生成一个100*100的噪音图
picPoi.rand = Screen('MakeTexture', window, picture); % 将这个噪音图放到内存中,并返回给picPoi.rand复制代码
Experiment.m
这个函数是用来编写实验流程的,也就是说图片在什么时候出现,在什么时候消失,被试的按键信息如何记录等等。这部分也就是实验程序的核心,当然我们也能在这个函数中去测试PTB-3函数。当然这个函数和SetPic一样,也是动态加载,所以可以有多个,当然要求文件名要和函数名要相同,函数的参数必须有两个,第一个是窗口指针,一个是图片指针结构体,第一行需要加 global data ,后面就自己发挥吧。这里我写个样例
程序如下:
function Experiment(window,picPoi)
global data
for i = 1:5&&% 循环五遍
& & Screen('DrawTexture',window,picPoi.rand); % 将刚才生成的噪音图片放在缓存中
& & Screen('Flip',window);&&% 将缓存中的内容呈现出来
& & WaitSecs(0.5); % 停留0.5秒(也就是呈现0.5秒)
& & Screen('Flip',window);&&% 将图片清楚掉(因为从上一个Flip之后没有往缓存中放内容,所以这里把缓存内容呈现出来,就相当于清掉之前呈现的图片)
& & WaitSecs(0.5);&&% 停留0.5秒
end复制代码
在完成了上述的几个步骤后,一个简单的实验程序就已经完成了。在完成这些内容后,只需要在command window中输入下面内容就可以看到一幅噪音图片一闪一闪的了。
MainProgram(@Experiment,@SetPic);复制代码
因为刚才我们说了Experiment这个函数和SetPic这个函数是动态加载的,所以在这里括号里面的参数就可以变了。当然如果在实验程序中并不需要加载图片,那么可以直接不写后面那个参数。
MainProgram(@Experiment);复制代码
比如你又写了一个其它的实验流程函数叫做ExpFun,将下面的程序写到一个叫ExpFun.m的文件中。
程序如下:
function ExpFun(window,picPoi)
global data
dispStr = '欢迎参加我们的实验';
[width, height] = Screen('WindowSize', window);
Rect = Screen('TextBounds', window, dispStr);
Screen('DrawText', window, dispStr, (width-Rect(3))/2, (height-Rect(4))/2);
Screen('Flip',window);
WaitSecs(5);复制代码
那么这个时候你可以选择调用这个函数
MainProgram(@ExpFun);复制代码
这样就可以看到在屏幕中央出现欢迎参加我们的实验的字样,五秒钟后跳出。
1. 可能在实验流程的函数中并没用用到data以及picPoi,这个时候matlab会出现提示将这些删了,但最好不要删,因为在这个实验平台程序中会给实验流程函数传picPoi,如果这里将这些删掉,会导致程序报错。
2. 在动态调用函数时,需要在函数名前加@,这里需要注意一下,不添加会出错。
在后面的讲解中就会围绕这个环境去将,也就是说以后会写很多很多实验流程函数,然后使用主函数去调用这些实验流程函数就可以看到效果。
附件: 你需要才可以下载或查看附件。没有帐号?
总评分:&水晶 + 1&
终于能将cnt处理后的数据写成avg文件了。。。给力哇~~
注册时间阅读权限5最后登录在线时间146 小时贡献值0 积分69分享好友记录日志相册UID30553
新滴友, 积分 69, 距离下一级还需 11 积分
水晶3791 心级69 精华0主题帖子
灰常感谢……………………
宁愿笑着流泪,不愿哭着后悔!!!
注册时间阅读权限10最后登录在线时间696 小时贡献值0 积分305分享好友记录日志相册UID737
正式滴友, 积分 305, 距离下一级还需 195 积分
水晶268 心级305 精华0主题帖子
!机会只会垂青于有准备的人!
!努力可以改变很多,比如说,命运!
注册时间阅读权限10最后登录在线时间60 小时贡献值0 积分80分享好友记录日志相册UID30656
正式滴友, 积分 80, 距离下一级还需 420 积分
水晶176 心级80 精华0主题帖子
为什么我运行不起来,总是报错
Error in ==& MainProgram at 21
window = Screen('OpenWindow',scrnNum,data.backgroundcolor);
??? Input argument &window& is undefined.
Error in ==& ExpFun at 4
[width, height] = Screen('WindowSize', window);
??? Input argument &window& is undefined.
注册时间阅读权限30最后登录在线时间69 小时贡献值0 积分148分享好友记录日志相册UID25348
水晶574 心级148 精华0主题帖子
澹宁 发表于
为什么我运行不起来,总是报错
Error in ==& MainProgram at 21
已经告诉你了啊,要定义window
注册时间阅读权限1最后登录在线时间1 小时贡献值0 积分1分享好友记录日志相册UID35225
新新滴友, 积分 1, 距离下一级还需 29 积分
水晶5 心级1 精华0主题帖子
师兄,可否发我一份 , 谢谢!
注册时间阅读权限1最后登录在线时间9 小时贡献值0 积分15分享好友记录日志相册UID21021
新新滴友, 积分 15, 距离下一级还需 15 积分
水晶118 心级15 精华0主题帖子
膜拜郭老师!
注册时间阅读权限10最后登录在线时间242 小时贡献值0 积分298分享好友记录日志相册UID33825
正式滴友, 积分 298, 距离下一级还需 202 积分
水晶837 心级298 精华0主题帖子
难得的好教程~感谢LZ的努力
try my best
注册时间阅读权限5最后登录在线时间14 小时贡献值0 积分33分享好友记录日志相册UID40717
新滴友, 积分 33, 距离下一级还需 47 积分
水晶126 心级33 精华0主题帖子
谢谢楼主的良心出品
注册时间阅读权限1最后登录在线时间0 小时贡献值0 积分1分享好友记录日志相册UID43737
新新滴友, 积分 1, 距离下一级还需 29 积分
水晶7 心级1 精华0主题帖子
谢谢大神QAQ
Medal No.1
Medal No.1
Medal No.2
Medal No.2
Medal No.3
Medal No.3
Powered by
Template By
Comsenz Inc.}

我要回帖

更多关于 psychtoolbox工具箱 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信