Memorandums

知覚・認知心理学の研究と教育をめぐる凡庸な日々の覚書

PsychToolBox 0 インストール、特徴、使用の留意点

2005-06-22 | PsychToolBox
PsychToolBox 0 インストール、特徴、使用の留意点

 PsychToolBoxについては下記のサイトを直接参照する方がよいが、初心者の学習の便を考慮して簡単に特徴とインストールなどの際の留意点をあげておく。
 Psychophysics Toolbox(以下、PsychToolBox)は、MATLAB環境で動作する心理学実験プログラム、特に感覚知覚の精神(心理)物理学的実験のプログラムを作成するための関数のライブラリ(ToolBox)である。PsychToolBox自体はフリー(無料)であるが、MATLABはやや高額である。ただし、学生であれば、1万円ほどでStudent Versionを購入できるはずで、当面これで十分だろう。MATLABについて詳しくは別項を参照してほしい。
 さて、PsychToolBoxの特徴は、まず心理学実験に必要充分な動作精度をもつプログラムを、比較的短期間に作成することが可能である点にある。基礎的なエンジンはC言語で作られているが、PsychToolBoxでプログラムを作成する側は、当面C言語を知っている必要はない。作業自体をみれば、表面的にはむしろ80年代のBasicに近いといっても良いかもしれない。実行もMATLABがそもそもインタプリタ型であるから、結果を容易に確認することができる。プログラミング経験者ならば、数週間でPsychToolBoxおよびMATLABの学習と目的の実験プログラムを書くことが可能、とされている。
 心理実験に有用なサンプルが付属していることも学習、プログラミングを助けてくれる(George Sperling も指摘しているとおり)。近年の視覚研究に欠かせないGratingの作成や、基礎的な精神物理学的測定法、反応時間の測定なども用意されているので、これらを組み合わせることからプログラミングを始めることができる。
 Mac版とWindow版があり、コードにおいては両者はほぼ共通するので互換性の点でもメリットがある。ここではMac版をインストールすることを例に、具体的に留意点をあげておこう。Mac版にはOS9とOSX用がダウンロード可能になっているが、OSX環境下でもOS9環境とX11を使うことができれば、OS9用のPsychtoolbox Mac 2.55 (12 March 2005) を利用することができる。OSX用は開発途上のようだ。
 この場合,OSXのHDの中のApplications(OS9)フォルダにMATLABフォルダをおき、さらにその中のtoolboxフォルダ内にpsychtoolboxファルダをおくことに留意しておきたい。さらにこのpsychtoolboxにパスを設定することを忘れずに。pathの設定はmenu barからFile-->set pathで可能。
インストールが終了したら、まずはMATLABのコマンドプロンプトから
>>MovieDemo
と入力して動作を確認してみよう。以下、
>>help psychdemos
でサンプルのリストを確認できるので、ファイル名を直接入力すれば実行を確認できる。また例えば、
>>edit MovieDemo
でコードを見る(編集する)ことができる。
 なお、MATLAB自体の具体的な操作は、下記の入門サイトなどを参照のこと。

References
Psychophysics Toolbox: Use Matlab to do vision research
By David Brainard, Denis Pelli and Allen Ingling
http://psychtoolbox.org/

Introduction to MATLAB
Kawatani Lab. at Fukui Univ.
http://feedback.mech.fukui-u.ac.jp/matlab/matlab0.htm

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MATLAB 2 プログラムの作成

2005-06-22 | MATLAB
MATLAB 2 プログラムの作成

 MATLAB では複数のコマンドを集めてプログラムを作成することができる。
プログラムは大別して,スクリプト(Script)とファンクション(Function) に分けることができる。

<スクリプト>
 MATLAB では % 以降の文はコメントとして見なされる。これは MATLAB のプログラムにおいては,重要な意味を持つ。MATLAB はオンラインヘルプ機能により指定し た関数の使用法等を確認することができるが,実は最初のコメント文がその関数のヘルプとして画面上に表示される。 したがって,プログラムを作成した本人がそれに対するヘルプを簡単に作成することができる。

 プログラムをテキストエディタで作成して,適当なファイル名でセーブ。 ファイル名の拡張子は必ず .m でなければならない。このために,MATLAB ではプログラムのことを M-file (エムファイル)と呼ぶ。ちなみに,ファンクションの場合も同様。したがって, エムファイルはスクリプトとファンクションの総称といえる。
 実行方法は簡単。MATLAB のプロンプトに対して,拡張子を除くファイル名を入力する。

<ファンクション>
 MATLAB は1行目でファンクションとスクリプトの判断。 1行目に functionがあればフンクション,そうでなければスクリプト。テキストエディタで作成した後,関数名と同じファイル名でセーブ。 その際に拡張子は .m 。実行は、MATLABのプロンプトで拡張子を除くファイル名と引数を指定。

References
川谷研究室(福井大学)MATLAB入門編
http://feedback.mech.fukui-u.ac.jp/matlab/matlab0.htm
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PsychToolBox  画面制御

2005-06-22 | PsychToolBox
PsychToolBox  画面制御

screen 関数の使い方例

>>help screen
で参照。以下にその一部を転載。
------
MOVIES ARE EASY

% make movie
window=Screen(0,'OpenWindow',0);
rect=[0 0 200 200];
for i=1:100
movie(i)=Screen(window,'OpenOffscreenWindow',0,rect);
Screen(movie(i),'FillOval',255,[0 0 2 2]*(i-1));
end;
% show movie
for i=[1:100 100:-1:1] % forwards and backwards
Screen('CopyWindow',movie(i),window,rect,rect);
Screen(window,'WaitBlanking');
end;
Screen('CloseAll');
------
Screen ARGUMENTS

"windowPtr" argument: Screen 'OpenWindow' and 'OpenOffscreenWindow' both
return a windowPtr, a number that designates the window you just
created. You can create many windows. And you can obtain a windowPtr to
any of Matlab's windows. To use a window, you pass its windowPtr to the
Screen function you want to apply to that window.

"rect" argument: "rect" is a 1x4 matrix containing the upper left and
lower right coordinates of an imaginary box containing all the pixels.
Thus a rect [0 0 1 1] contains just one pixel.
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PsychToolBox 心理実験サンプル

2005-06-22 | PsychToolBox
PsychToolBox 心理実験サンプル

>>help psychdemos
によって、かなりのサンプルを参照できる。基本的なものには*印が付されている。
ただし、刺激作成、提示、反応入力、記録(出力)という実験の全体を概観するにはやや不適かと思われる。
そのためには、

>>help Psychtoolbox:PsychContributed
の中の、
>>edit MinimalExample
>>MinimalExample
を実行してみるとよい。(前者がコード画面表示、後者が実行)
刺激作成、提示(時間制御)、反応記録(RT)が簡単に概観できる。
以下に、その一部を転載(画面を3s 提示)。
%以下はコメントで実行には関係しない。またコピーとペースで改行などの情報が混入することがあり、以下をそのままテキスト編集してm-fileに(拡張子.mで)保存しても、エラーがでることがあるので、実際のサンプルを直接参照、実行してほしい。
-----
clear all;

pixelSize = 8; % You might change to 32 if 8 is not working, depending on OS9 or Windows.
[w, screenRect] = Screen(0,'OpenWindow',[],[],pixelSize); % Define your output screen as your monitor which is screen 0.
black=BlackIndex(w); % Value depends on pixelSize.
white=WhiteIndex(w); % "

scr_one = Screen(w, 'OpenOffscreenWindow',black, screenRect); % Define scr_one, a black screen not yet visible.
screen(scr_one,'FillOval',white,[10,10,90,90]); % Draw a white circle on scr_one.
screen(scr_one,'DrawText','White circle, diameter 80 pixels. Presented for 3 seconds.',10,150,white); % Draw text on scr_one.

scr_two = Screen(w, 'OpenOffscreenWindow',black, screenRect); % Same for scr_two as scr_one.
screen(scr_two,'FillRect',(black+white)/2,centerRect([0 0 100 50],screenRect)); % Draw rectangle to scr_two.
screen(scr_two,'DrawText','Middle-gray rectangle, 100 x 50 pixels. Press any key to continue.',50,200,(black+white)/2);

scr_blank = Screen(w, 'OpenOffscreenWindow',black, screenRect); % scr_blank is just a black screen.

% Scr_one for 3 seconds.
Screen(w,'WaitBlanking'); % Wait for vertical sync signal before copying screen to monitor, not necessary.
Screen('CopyWindow',scr_one,w); % Copy scr_one to monitor.
starttime1 = GetSecs; % Record CPU time at this point.
while GetSecs-starttime1 <3 % Minimal while-loop that lets almost exactly 3 seconds pass. end
finishtime1 = GetSecs;
-----
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MATLAB 0 起動と終了、特徴、購入

2005-06-22 | MATLAB
MATLAB 0

MATLABの起動と終了、特徴、購入

これらについては以下のサイトを参照。
工学系のサイトなので、心理学専攻者は適宜読み飛ばしてよい。
行列の学習が必要ならば、川谷研究室サイトにその講義資料がある。

References
川谷研究室(福井大学)MATLAB入門編
http://feedback.mech.fukui-u.ac.jp/matlab/matlab0.htm
MATLABホームページ
http://www.cybernet.co.jp/matlab/
志賀研究室(岐阜大学)MATLABの使い方
http://www.ykt.info.gifu-u.ac.jp/shiga/matlab/

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MATLAB1 行列、代入、変数

2005-06-22 | MATLAB
MATLAB 1
MATLAB初心者の教育・学習用にその基礎について下記サイトをもとにメモを残す。PsychToolBoxについて(インストール、心理実験サンプル、解説)は別項で。

◎行列、代入、変数

例1-1)
>> A=[0 0 1 0;0 0 0 1;0 0 -240 0;0 36.39 890.32 -0.022];
>> B=[0;0;90;-333.87];
>> C=[1 0 0 0;0 1 0 0];
>> D=[0;0];

配列宣言不要

行列の代入に関する注意点
1.行列の入力は [ から始まり ] で終了
2.入力は行の順に。1行の終了記号は ; (セミコロン) 。上の例では,行列 B が縦ベクトルとなる。
3.各要素の区切り記号は,コンマ(,) もしくは1つ以上のブランク
4.入力が終了した時点(] が入力された時点) で,各行の要素数が一致しない場合には, 対応するエラー表示が行われ,その変数に行列は代入されない。
5.要素を持たない空行列を aa=[]; により作成することができる。
6.] の後に単に CRキーを押すと代入結果がエコーバックされる。もし, エコーバックが不要な場合には ; (セミコロン) を入力

MATLAB の出力形式について
 MATLAB における演算はすべて倍精度で行われるが,演算結果はデフォルトでは スケーリングされた5桁表示が使用される。

行列要素の参照、代入
 行列の要素の参照は A(i,j) により行う。たとえば,
>> AA=[0 1;-3 -4];
>> AA(2,1)
この場合,行列 AA の2行1列目の要素(-3)が表示される。また,行列の要素への代入は
>> AA(1,1)=5.0;
で行える。なお,この際に,指定する位置が行列の大きさを越える場合には,自動的にその行列が拡大されて代入が行われる。 たとえば,
>> AA(3,5)=3

AA =

0 1 0 0 0
-3 -4 0 0 0
0 0 0 0 3
この結果からもわかるように,拡大された要素には 0 が代入される。
代入した変数は MATLAB のワークスペースという領域に保存される。
なお、
>>who
>>whos
で、ワークスペース内の変数(行列)の内容を表示できる。

変数名についての注意事項
デフォルトでは MATLAB は大文字と小文字の区別。たとえば,Aa,aA,aa,AA はいずれも異なる変数と見なされる。
変数名として最初にアルファベットでその後にアルファベット,数字,アンダースコアを利用できる。 なお,最初の19文字のみが有効。
MATLAB には予約語の概念がない。

プログラムを利用した行列の作成方法
 行列のサイズが大きい場合には,プログラム(スクリプト)を利用して入力すると 入力ミスに対しても対応が容易となる。
 例1-2)
適当なテキストエディタで次のプログラムを入力し

A=[0 0 1 0
0 0 0 1
0 0 -240 0
0 36.39 890.32 -0.022];

makea.m にセーブ。拡張子を .m としなければならないことに注意。
MATLAB 上でこのプログラムを実行する
>> makea
と行列 A がワークスペースに作成される。


References
川谷研究室(福井大学)MATLAB入門編
http://feedback.mech.fukui-u.ac.jp/matlab/matlab0.htm
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MinimalExample : PsychToolBox

2005-06-21 | PsychToolBox
MinimalExample.m is now part of the OS9 and Windows Psychtoolbox in
the PsychContributed folder.
% MinimalExample.m
% To: psychtoolbox@yahoogroups.com
% From: Daniel Shima <daniel.shima@vanderbilt.edu>
% Date: Thu, 27 Jun 2002 15:52:41 -0500
% Subject: [psychtoolbox] minimal example for new users
%
% I do not know where one can find full tutorials for learning to use
% Matlab or the Psychtoolbox, but here's a program
% called MinimalExample.m which I have used to introduce people to the
% basics of opening screens, drawing stuff (i.e., stimuli) to them,
% displaying them for discrete amounts of time, and collecting keyboard
% responses and response times. Something upon which to build.
%
% Also see MovieDemo.
%
% And review the web tutorial, which among other things suggests typing
% "help PsychBasic" and "help PsychDemos" in Matlab for an introduction to
% core commands and routines.
% web http://www.psychtoolbox.org/tutorial.html ;
%
% Hope that helps.
%
% web http://groups.yahoo.com/group/psychtoolbox/message/1151 ;

References
Daniel Shima/psychtoolbox] DONATE MinimalExample.m
http://groups.yahoo.com/group/psychtoolbox/message/3457 (要登録)
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Psychophysics Toolbox Sample

2005-06-21 | PsychToolBox
刺激フレームに対応した反応記録の試み

% travelling dot
white=255;
[w,wRect]=Screen(0,'OpenWindow',white);
srcRect=[0,0,100,100];
dstRect=CenterRect(srcRect,wRect);
dotRect0=CenterRect([0 0 12 12],srcRect);
[dot offRect]=Screen(w,'OpenOffscreenWindow',white,dstRect);
Screen(dot,'FillOval',black,dotRect0);

white=255;
black=0;

d0=OffsetRect(offRect,0,0);

rightKey = KbName('right');
leftKey = KbName('left');
escapeKey = KbName('esc');
bb=[];
while 1
[a,b,keyCode] = KbCheck;
if keyCode(rightKey)
for i=1:300
dotRect=OffsetRect(d0,i,0);
Screen(w,'WaitBlanking')
Screen('CopyWindow',dot,w,offRect,dotRect);
[a,b,keyCode] = KbCheck;
if keyCode(leftKey)
bb=[bb i];
end
FlushEvents('keyDown');
end
end
if keyCode(escapeKey)
break;
end
end

FlushEvents('keyDown');
Screen('CloseAll');

Reference
Yahoo.com/Groups/psychtoolbox (要メンバー登録)
Subject: how to register a single key press
http://groups.yahoo.com/group/psychtoolbox/message/3507
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ワークスペース内の変数のセーブとロード (MATLAB)

2005-06-21 | MATLAB
下記のサイトより (一部省略)
----------------
save を利用して変数をセーブする際に,ファイル名の指定だけで作成された matファイルは バイナリ形式で作成されますのでテキストエディタでその内容の確認は行えません。また, 実験などで作成したアスキー形式のテキストデータをロードすることもできません。 そのような場合に使用するオプションが -ascii です。
>> save 'A.mat' A -ascii
これによりファイル名 A.mat に行列 A の内容が次のようにアスキー保存されます。なお,ファイル名を指定するときに 拡張子 .mat をつける必要があることに注意してください。

References
川谷研究室(福井大学)MATLAB入門編
http://feedback.mech.fukui-u.ac.jp/matlab/matlab0.htm
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Diary 機能(MATLAB入門編)

2005-06-21 | MATLAB
>> diary 'filename'
と入力すると,以降の MATLAB への入力ならびにコマンドウインドウ上に表示される MATLAB からの出力がすべて指定のファイル filename に書き込まれます。なお,ファイル名を指定する際に, 必要に応じて,拡張子を適当に指定してください。また,ファイルがすでに存在する場合には 上書きではなくそれに追加されます。そして,
>> diary off
とすることで,この書き込みが終了します。
References
川谷研究室(福井大学)MATLAB入門編
http://feedback.mech.fukui-u.ac.jp/matlab/matlab0.htm
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

社会構成主義と心理学

2005-06-21 | Psychology
 杉万(下記参照)によれば、いわゆる「社会的構成主義」は、広義の生理的因果メカニズムの追求に対するアンチテーゼとしての意味をもつ、とされているようだ。しかし、私見では少なくとも現代の知覚研究においては、現象は脳身体系と外界との関係の中で科学的メカニズムによって説明されようとしているのではないか。したがって、彼の「心を内蔵した肉体」という批判は一面的であるように思う。

References
杉万俊夫 「心理学論の新しいかたち」(誠信書房、近刊)
http://www.users.kudpc.kyoto-u.ac.jp/~c54175/research/theoretical_study/T-012.htm
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

article

2005-06-13 | Research: V. Interp.
Discussion

Guttman. & Kellman. (2004) p.1811
contour completion 120 ms
cf. Ringach & Shapley (1996) contour processing 117 ms , global integration + (140-200) ms

parallel processing of real and interpolated contour
<--- lower level network model (eg., Field et al., 1993; Yen & Finkel, 1998)
<---> higher-order operator (eg., Heitger, von der Heydt, Peterhans, Rosenthaler, & Kuebler, 1998)

References
Ringach & Shapley (1996) Vis. Res, 36,3037-3050.
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

kbDemo in PsychDemos

2005-06-11 | PsychToolBox
キーボードからの入力(およびキーコード取得)と反応時間計測のサンプル with MATLAB

% 3. Wait for a key with KbWait.
WaitSecs(0.5);
fprintf('?n3 of 4. Testing KbWait: hit any key. Just once.?n');
startSecs = GetSecs;
timeSecs = KbWait;
[keyIsDown,t,keyCode] = KbCheck;
% The initial 1 in the fprintf is needed. Otherwise '5%' won't print.
fprintf(1,'"%s" hit at time %.3f s?n',KbName(keyCode),timeSecs-startSecs);
FlushEvents('keyDown'); % discard all the chars from the Event Manager queue.
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MovieDemo in PsychDemos

2005-06-10 | PsychToolBox
MovieDemo (PsychDemos in PsychToolBox)
50行ほど(+%コメント)の画面制御の基本サンプル
------------------
The movie was shown twice, running over by 8 frames in the first and 3
frames in the second showing. The first showing may have been jerky, due
to interruptions. The second showing used Rush, at priority 0.5, to
minimize interruptions, to make the movie run smoothly. See
MovieTearDemo and Rush.
-------------------

% Open a window
screenNumber=0;
pixelSize=8;
[window,windowRect]=Screen(screenNumber,'OpenWindow',[],[],pixelSize);
n=300;
% n=min(windowRect(RectBottom),2*round((Bytes*2-1e6)^0.33/2)); % make movie as big as memory will allow.
rect=[0 0 n n];
rect2=AlignRect(rect,windowRect,RectRight,RectBottom);

waitSecs(1); % Give display a moment to recover from the change of pixelSize

% Make a movie by drawing disks into 1+n/2 offscreen windows.
black=BlackIndex(window);
for i=1:(1+n/2)
w(i)=Screen(window,'OpenOffscreenWindow',[],rect);
w(n+2-i)=w(i);
r=[0 0 2 2]*(i-1);
Screen(w(i),'FillOval',black,r);
end

% Show the movie, first forwards, then backwards.
Screen(window,'TextSize',24);
Screen(window,'DrawText','Showing movie at priority 0 ...',10,30);
HideCursor;
for i=1:length(w)
Screen(window,'WaitBlanking');
s(i)=GetSecs;
Screen('CopyWindow',w(i),window,rect,rect2);
end
s=diff(s);
frames1=sum(s)*FrameRate(screenNumber)-length(s);

% Show the movie again, now using Rush to minimize interruptions.
loop={
'for i=1:length(w);'
'Screen(window,''WaitBlanking'');'
's(i)=GetSecs;'
'Screen(''CopyWindow'',w(i),window,rect,rect2);'
'end;'
};
priorityLevel=MaxPriority(screenNumber,'WaitBlanking');
Screen(window,'FillRect');
Screen(window,'DrawText',sprintf('Showing movie at priority %g ...?n',priorityLevel),10,30);
i=0;Screen('Screens'); % Make sure all Rushed variables and functions are in memory.
Rush(loop,priorityLevel);
s=diff(s);
frames2=sum(s)*FrameRate(screenNumber)-length(s);
ShowCursor;

% Close the on- and off-screen windows
Screen('CloseAll');

if round(frames1)==0 & round(frames2)==0
s=sprintf('Success! The movie was shown twice. Both showings were frame-accurate.');
else
s=sprintf('The movie was shown twice, running over by %.0f frames in the first and %.0f frames in the second showing.',frames1,frames2);
end
s=sprintf('%s The first showing may have been jerky, due to interruptions. The second showing used Rush, at priority %g, to minimize interruptions, to make the movie run smoothly. See MovieTearDemo and Rush.',s,priorityLevel);
fprintf('%s?n',WrapString(s));

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

article

2005-06-10 | Research: V. Interp.
Results
Dot localization:
imprecision & error in location as a function of SOA

データ確認、ANOVA
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする