PSYCHTOOLBOX 工具箱及 MATLAB 编程实例 冯成志编著 電子工紫出版社
前 言 PSYCHTOOLBOX(PTB)是免费的可在MATLAB和Gmu/Octave环境下运行的函数库,能 够使我们很方便地精确控制视觉和听觉刺激的呈现和同步,并且能够简化与用户的交互操作。 PSYCHTOOLBOX的目前版本为3.0,可在MATLAB7.x或Octave3.2.x上运行,开发人员将不 再针对旧版本进一步开发和提供支持。实验程序开发的方法之一是利用简易的开发工具,如 E-Prime、.Affect.、Inquisit、Super-Lab等:一是利用诸如C或Pascal等可以对硬件设备实施底层 控制的语言。前者相对而言简单易学,不需要太多的编程经验,后者则需要具有丰富的编程经验 和熟悉硬件参数。诸如BASIC、Lis即、MATLAB等高级解释性语言,缺少对硬件进行精密控制的 能力,而PSYCHTOOLBOX则提供了从高级语言到硬件底层控制间的接口,可以读取显示顿缓 存和颜色检查表中的信息,可以与垂直行扫描进行同步,支特毫秒级的计时,能够使用OnGL 开发三维的图形程序,进行颜色空间转换(如从RGB到HSL),实现QUEST算法等,它是介于 上述两种开发方法的一种中间状态,有些实验软件系统提供了封装的实验程序,但在设计和开发 新的实验程序方面往往捉襟见肘、不够灵活,或者是费了半天的周折终于实现了某个环节(功能) 程序的可读性大大降低。这就需要借助于MATLAB等高级编程语言来达到特定的实验目的。 即使你先前使用其他高级编程语言,也有充分的理由让你转向MATLAB+PTB的学习, MATLAB提供了丰富的高级函数进行数学运算和绘图操作:对于数组(矩阵)和图像的操作简 易至极,而无须像其他高级语言那样过度依赖for、while、do、loop等循环来操作。在开发过程 中,可以直接在命令窗口中实时查看数据和检查运算结果,这一点也是其他高级语言不可比拟的。 就功能和效率而言,MATLAB+PTB的组合足以击败任何一款实验开发工具。 对于初学者而言,PTB提供了大量的演示程序,通过help PsychDemos可以获取示例程序 列表,直接在命令窗口中输入程序名就能够查看演示效果。借助于本教程,可以帮助初学者 一步步地快速上手。 目前PSYCHTOOLBOX在全世界范围内已经有超过I3万人次的下载量,你可以登录 htp作ech.groups,yahoo.com/group/psychtoolbox/messages/加入PTB用户社群,也可以向以下邮件地址 psychtoolbox-.subscribe(@yahoogroups.com发送封空白邮件来订阅来自用户社群的消息,如果遇到问 题还可以在论坛上提问,来自世界各地的爱好者以及专业的软件技术人员可以帮你解决问题。另外, 本书所附实例程序及实用工具可在华信教育资源网(http:/www.heedu.com.cn)上直接下载,使用 方法可参见下载后的光盘使用说明文档。 由于作者水平有限,加之时间仓促,恳请读者进行批评指正,也欢迎使用本教材的同仁提出 宝贵意见。 冯成志 fengchengzhi@suda.edu.cn 2013年5月31日 :1
目 录 第1章MATLAB基础知识 4.4程序(M文件)的运行 4.31 1.1启动与退出 w1 4.5函数参数的处理方式. .32 1.2 MATLAR界面组成 45.1默认处理 32 1.3命令的执行 4.52合令行输入 34 1.4获取帮助信息 4.53对话框设置参数 .35 第2章数据类型, ,7 45.4 参数值的记忆与存取 35 2.1 数值型 4.55函数的返回参数 .36 +7 2.2字符型 10 4.5.6可变数目的输入输出参 .37 2.3 日期时间型 4.6 函数的类型4 .39 2.4单元 4.6.1主函数 11 .39 25结物. 12 4.62 子函数 39 463承函场间的围用光系. 30 第3章 MATLAB编程基础 .14 46.4函数的调用顺序 3.1常数与常量 1 32恋量 第5章实验设计常用MATLAB函数 43 3.3 变量类型.。 5.1矩阵数组操作类函数, 43 33.1局部变量 5.11 数组排序:som 332 全局变量 5 512数组行排第.or0u .44 33.3水久变量 5.13矩阵转, .15 .44 3.4关字. 5.14 矩阵左右上下翻转 运算符 .16 45 35.1算术运算符: 5.15 矩阵水平/垂直拼接 3.5.2关系运算符 horzcat/vertcat. .45 353逻辑运算符, .20 5.1.6数组的重复:repmat .46 35.4逻辑运算函数 21 51.7 数组维数变更:reshape 46 3.6过程控制 5.1.8获取数组维数:sze ,A7 .22 3.6.1if条件语句 22 5.1.9获取矩阵长度:1eng 47 36.2 switch条件语句 .24 5.1.10获取数组元素数:ume 48 3.63for循环语句 5.1.11 .25 获取数组的维度数:ndims .48 3.6.4 while循环语句 5.1.12两个常用矩阵:omcs2cros 8 3.65y错误控制语句 .27 5.1.13生成等间隔向量:linspace .49 51.14生成网格:meshgrid .49 第4章程序设计 29 5.2 判图断类函数 ·49 4.1M文件的建立 52.1是否为空:isempty .49 4.2 脚本示例. 30 522 是否为列向量 iscolumn 43函数示例 30 52.3 是否为浮点数:isfloat .50
524 是否为整数: isinteger 51 5.51字符转数值:s2num 12 52.5是否为罗辑值:islogical.51 55.2字符转双精度数:str2 double.73 S.2.6是否为非数值:isnan .52 5.53非负整数转字符:char .73 527 是香无穷大:isinf 52 5.5.4数值转换字符:um2st 528是否为行向量,is0w. .52 5.5.5数值转换单元:tm2ee1. .74 5.29是否为向量:isvector 55.6整数转换成字符:n2s如 1A 5.2.10是杏为数值:isnumeric· 53 5.5.7 结构转单元:struct2ccll: 13 5.2.11是否相等:iseual. .53 5.5.8单元转结构:cell2 struct .75 52.12 是否为字符 ischar 54 559 单元转矩阵:cel2mat 76 5213是否为字母.isletter 多 5.6路径操作类函数 76 52.14是否为空格:isspace .54 5,6.1获取MATLAB安装目录 5.2.15是否为集合元素:ismember matlabroot 5.3字符操作类函数. ,55 5.6.2获取当前工作路径:pwd 76 3 创建空格: blanks 55 5.63改变当前目录:cd 77 5.32 格式化为字符:printf.55 5.6.4 文件或路径列表:dir.77 5.3.3 转换为大小写:upper/lower 56 5.65显示当前目录下的文件列表:s.78 5.34 去除首尾空格:strtrim 5.6.6 获取工具箱目录:toolboxdir 53.5夫除属部容格:deblank .57 567创6建目录:nkdir+: .79 53.6字符替换:rc印. 568删除目录:mdr .79 53.7 字符查找:findstr/strfind· S.6.9拉圾箱控制开关:recycle .80 53.8格式化读取:sscanfstrread .57 5.6l0获取系统临时日录tempdir.80 53.9执行字符表达式 60 5.611 取指定路径下的文件 5.3.10子串提取:st0水6】 FileFromFolderFolderFromFolder81 53.11字符比较:stremp//strcmpi/ 5.6.12添加路径至搜索路径中 stmcmp/strncmpi addpath 5.3.12字符拼接:streat//strvcat 62 5.6.13从搜索路径列表中移除某路径: 5.4随机操作类函数 63 82 5.4.1介于0.11间的均匀分布随机 5.6.14 获取搜索路径分隔符:a山hsD.82 浮点数:nd 63 5.6.15获取文件名分隔符:filesep .82 54.2介于,]间的均匀分布随机 5.6.16 拆分文件的路径和名称信息: 数数:and出 .65 fileparts. .83 5.43 正态分布随机数: randn 66 5.617 组合全路径文件名:fc .83 5,4.4设置随机数种子:sCd.68 5.7 文件操作类函数.83 5.4.5通过随机数流来控制随机数种子: 57.1打开文件:fopen 3 RandStream 68 5.72 关闭文件:fclose 5.4.6随机排列:randperm 70 5.7.3诗取一讲制数根:e3d 84 547重置随机数流:res 70 574 写入文件:wnie .85 5.4.8随机排列数组或矩阵:Shuffle.71 5.7.5 读取一行:feetl 5.4.9随机抽样Sample .71 57.6读取一行:fgets“ R6 54.10随机抽样:RandSample 72 57.7格式化数据读取:camf 86 5.5转换操作类函数 5.78格式化数据输出:fprintf.86 .VI
5.7.9 文件操作错误信息:ferror .89 第8章PSYCHTOOLBOX函数介绍, 103 5.7.10文件尾判断:eof .90 8.1窗口操作类函数. .104 5.7.11 文件指针定位:sek .00 8.L.1创律主页面:Open Window.104 5.7.12 获取文件指针位置:el 90 8.12 创建缓冲页面 5.7.13 文件指针复位:frewind .90 Openoffscreen Window .106 57.14获取临时文件名 .90 81.3创建纹理缓冲:MakeTexture106 5.7.15 文件或目录的移动、更名: 8.1.4 页面切换:Flip 106 .01 8.l.5绘结束指今:DrawingFinished.107 57.16文件或目录复制 copyfile 91 81.6 关闭页面:C1os .107 5.7.17定位文件或函数:which.92 8.1.7 关闭所有页面:CloseAll/sca.108 5.7.18检查文件/目录变量等是否存在 8.1.8选择目标缓冲区: exist 108 5.7.19将结构数组写入文件 8.2矩形操作类函数.108 93 821 矩形拼接:AdjoinRect- .108 5.7.20从文本中读取结构数组 8.2.2矩形对齐:alignRect.109 ReadStructsFromText 93 8,2.3创建矩形阵列:ArrangeRects-110 5.7.21 文件比较:visdiff .93 8.2.4矩形据中至某矩形:CenterRect.11 5.7.22显示文件内容:type -94 8.2.5矩形居中至某点:CenterRectOnPoint 5.723设置/获取文件或目录的属性 fileattrib 94 82.6矩形重叠区域:ClipRec 112 第6章PSYCHTOOLBOX的安装 82.7矩形缩放(正放负的: .06 6.1 PSYCHTOOLBOX简介 96 GrowRec 112 8.2.8矩形缩放(正缩负放幻 6.2 PSYCHTOOLBOX安装 .96 621系统要求与配置 .112 6.22版本检查与卸载 9 8.2.9矩形缩放(比例缩放) .112 62.3安装新版本的 PSYCHTOOLBOX 98 82.10 矩形是否为空IsEmptyRect .112 8211某点是否在矩形内:sinRect.113 第7章PSYCHTOOLBOX常用数据类型.101 8.212矩形平移:O压etRect. .113 7.1额色 -101 8.2.1 获取矩形中心:RectCenter/ 7.2 矩形结构 10 WindowCenter .112 73窗口句柄 .101 82.14 获取矩形中心:ReetCenterd14 74 时间单位 101 8.2.15获取矩阵的边界矩形: 7.5 反应方式 101 RectOfMatrix 114 76 立木, 101 82.16获取矩形的高度:RectHeight.114 7.7 图片 8.2.17获取矩形的宽度:RectWidth.114 7.8 音频 +102 82.18 获取矩形的宽和高:RectSize.l15 79 -102 8.2.19 获取矩形的左边坐标: 7.10 键盘扫描码 102 Rectleft. -115 7.11鼠标按钮值 +102 8.2.20 获取矩形的右边坐标 RectRight. .115 I