国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Matlab鍵盤鼠標(biāo)輸入學(xué)習(xí)及PsychToolBox對(duì)刺激反應(yīng)結(jié)果的保存

這篇具有很好參考價(jià)值的文章主要介紹了Matlab鍵盤鼠標(biāo)輸入學(xué)習(xí)及PsychToolBox對(duì)刺激反應(yīng)結(jié)果的保存。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.Matlab鍵盤鼠標(biāo)輸入學(xué)習(xí)

包括鍵盤監(jiān)聽KbWait KbCheck、鼠標(biāo)監(jiān)聽GetMouse

%反應(yīng)錄入
%Mouse & Keyboard
ListenChar(1);
%設(shè)置0將不能監(jiān)聽鍵盤輸入
%設(shè)置1或者不設(shè)置任何值則可以監(jiān)聽鍵盤輸入
%設(shè)置2可以監(jiān)聽鍵盤輸入但是抑制命令行輸出

%電腦中鍵盤的編碼
edit KbName %kbNameResult = KbName(arg) 
KbName('UnifyKeyNames');
space = KbName('space');    %鍵位與數(shù)字一一對(duì)應(yīng)
a = KbName(40);

							%使用while監(jiān)聽鍵盤
while(1)
    format long;
    disp(GetSecs);          %使用每個(gè)操作系統(tǒng)上最高精度的實(shí)時(shí)時(shí)鐘。
end

%KbWait KbCheck
help KbWait
%[secs, keyCode, deltaSecs] = KbWait([deviceNumber][, forWhat=0][, untilTime=inf])
%等待直到任何鍵按下,并選擇性地返回時(shí)間(以秒為單位)和鍵盤狀態(tài)的 keyCode向量
a = GetSecs;
[secs,keyCode,deltaSecs] = KbWait();
%顯示輸入的鍵位
KbName(find(keyCode==1));

help KbCheck
KbCheck
[keylsDown,secs,keyCode,deltaSecs] = KbCheck;
%      keyIsDown      1 if any key, including modifiers such as <shift>,
%                     <control> or <caps lock> is down.
%      secs           Time of keypress as returned by GetSecs.
%      keyCode        A 256-element logical array.  Each bit
%                     within the logical array represents one keyboard key. 
%                     If a key is pressed, its bit is set, othewise the bit 
%                     is clear. To convert a keyCode to a vector of key  
%                     numbers use FIND(keyCode). To find a key's keyNumber 
%                     use KbName or KbDemo
ListenChar(1); %1對(duì)應(yīng)命令行顯示 2對(duì)應(yīng)命令行不顯示
while(1)
    [K_down,secs,K_code] = KbCheck;
    if(K_down)
        disp(KbName(find(K_code==1)));
        if(K_code(space))
            break;
        end
    end
end 
%獲取鼠標(biāo)
help GetMouse
%[x,y,buttons,focus,valuators,valinfo] = GetMouse([windowPtrOrScreenNumber][, mouseDev])
%x y為鼠標(biāo)當(dāng)前向量值 button為鼠標(biāo)上按鈕數(shù)量 
figure
x = [];
y = [];
while(1)
    [x(end+1),y(end+1),buttons] = GetMouse;%獲取鼠標(biāo)現(xiàn)在位置
    plot(x,1000-y);                        %由于屏幕中位置0在上方 與matlab繪制y軸相反 用1000減去y得到反轉(zhuǎn)值
    if(find(buttons==1))                   %左鍵退出
        break;
    end
    WaitSecs(0.1);                         %每隔0.1秒繪制一下
end

如圖為鼠標(biāo)繪制的圖像:
kbcheck device number,Matlab,腦機(jī),matlab,PsychToolBox

2.PsychToolBox設(shè)置反應(yīng)收集

之前的代碼參考上一篇文章:Psychtoolbox使用Screen時(shí)間控制以幀隨機(jī)播放圖片
在反應(yīng)收集部分添加鍵盤輸入項(xiàng),對(duì)應(yīng)保存結(jié)果。被試者對(duì)圖片刺激進(jìn)行判斷給出反應(yīng)結(jié)果。
被試者反應(yīng)結(jié)果(鍵位、匹配結(jié)果、反應(yīng)時(shí)間)呈現(xiàn)如圖:
kbcheck device number,Matlab,腦機(jī),matlab,PsychToolBox

代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-571276.html

 global screens screenNumber win wsize flipIntv cx cy time_stamp
 
 try
     ListenChar(1);
     KbName('UnifyKeyNames');
     space = KbName('space');
     keyq = KbName('q');
     keyw = KbName('w');
     keye = KbName('e');
     
     HideCursor;
     InitializeMatlabOpenGL;
     Screen('Preference','SkipSyncTests',1);
     screens = Screen('Screens');
     screenNumber = max(screens);
     [win,wsize] = Screen('OpenWindow',screenNumber);
     cx = wsize(3)/2;
     cy = wsize(4)/2;
                                                       
     flipIntv = Screen('GetFlipInterval',win);         %我電腦屏幕刷新率為165Hz 1/165 = 0.0061 即flipIntv的值為0.0061
     Screen('FillRect',win,128);
     time_stamp = Screen('Flip',win);
     
     % 呈現(xiàn)一個(gè)視角5度的圖片
     pixs = deg2pix(5,15.5,wsize(3),50);               %計(jì)算該條件下對(duì)應(yīng)視角在屏幕中的像素?cái)?shù)
     
     %畫圖
     %首先加載圖片
     cd Screen_tutorial/images
     files = dir('*tif*');
     for i = 1:length(files)
         Image_pool{i} = imread(files(i).name);
     end
     
     %進(jìn)行一一組合一共有多少條件
     %設(shè)定SOA條件 SOA為啟動(dòng)刺激(Prime)呈現(xiàn)起到目標(biāo)刺激(Probe)呈現(xiàn)之間的時(shí)間
     %可理解為圖片呈現(xiàn)的時(shí)間
     %由于1秒、0.5秒這樣表示不能整除每幀0.0061s的時(shí)間,為保證實(shí)驗(yàn)的準(zhǔn)確性,不采用秒的方式來呈現(xiàn)圖片
     %更改采用幀數(shù)來展示圖片,這里設(shè)置了一個(gè)存儲(chǔ)時(shí)間的元胞數(shù)組SOA_pool 為了好計(jì)算 間隔專門設(shè)置成每幀所用時(shí)間
     SOA_pool = [6.1:6.1:24.4000]/1000;
     SOA_pool = time2frame(flipIntv,SOA_pool);          %調(diào)用time2frame函數(shù) 該函數(shù)將時(shí)間四舍五入取整求幀數(shù) 
     Mask_pool = 1:2;                                   %Mask_pool用來表示實(shí)驗(yàn)過程中是否有mask圖片
     
     %計(jì)算共有多少次數(shù) 遍歷所有條件
     Total_trial = length(Image_pool)*length(SOA_pool)*length(Mask_pool);
     
     %分配圖像在這么多試次的分布(隨機(jī))
     %由于matlab從1開始 取模后要加1
     Image_order = mod(randperm(Total_trial),length(Image_pool))+1;
     SOA_order = mod(randperm(Total_trial),length(SOA_pool))+1;
     Mask_order = randi(2,[1,Total_trial])-1;
     
     %秒轉(zhuǎn)化為幀
     trial_interval = 1;                                  %試次之間的間隔,單位是秒
     trial_interval = time2frame(flipIntv,trial_interval);
     fix_onset = 0.5;
     fix_onset = time2frame(flipIntv,fix_onset);
     mask_onset = 0.5;
     mask_onset = time2frame(flipIntv,mask_onset);
     word_onset = 3;
     word_onset = time2frame(flipIntv,word_onset);
     
     %預(yù)分配內(nèi)存給反應(yīng)矩陣
     response_pool = [];                                  %反應(yīng)鍵位
     RT_pool = [];                                        %反應(yīng)時(shí)間
     response_ture = [];                                  %反應(yīng)正確/錯(cuò)誤
     
     n_trial = 12;%測試使用12個(gè)對(duì)象 Total_trial太多這里不使用

     %for i = 1:Total_trial
     for i = 1:n_trial
         Screen('FillRect',win,128);%背景與注視點(diǎn)
         Screen('FillOval',win,255, [cx-5,cy-5,cx+5,cy+5]);
         time_stamp = Screen('Flip',win,time_stamp+(trial_interval-0.5)*flipIntv);
         %展示圖片
         Screen('FillRect',win,128);
         Image_Index = Screen('MakeTexture',win,Image_pool{Image_order(i)});
         Screen('DrawTexture',win,Image_Index,[],[cx-pixs,cy-pixs,cx+pixs,cy+pixs]);
         time_stamp = Screen('Flip',win,time_stamp+(fix_onset-0.5)*flipIntv);
         if(Mask_order(i))
             %呈現(xiàn)mask
             Screen('FillRect',win,128);
             masks = im2uint8(rand(50));
             Image_Index = Screen('MakeTexture',win,masks);
             Screen('DrawTexture',win,Image_Index,[],[cx-pixs,cy-pixs,cx+pixs,cy+pixs]);
             time_stamp = Screen('Flip',win,time_stamp+(SOA_pool(SOA_order(i))-0.5)*flipIntv);
         else
             %不呈現(xiàn)Mask
             Screen('FillRect',win,128);
             time_stamp = Screen('Flip',win,time_stamp+(SOA_pool(SOA_order(i))-0.5)*flipIntv);
         end
         
         %呈現(xiàn)指導(dǎo)語,提取設(shè)置好指導(dǎo)語與鍵位對(duì)應(yīng)
         Screen('FillRect',win,128);
         txt = '2 Animal';                                %對(duì)應(yīng)w鍵位
         bRect = Screen('TextBounds',win,txt);
         Screen('DrawText',win,txt,cx-bRect(3)/2,cy,255);
         txt = '1 Object';                                %對(duì)應(yīng)q鍵位
         bRect = Screen('TextBounds',win,txt);
         Screen('DrawText',win,txt,cx-bRect(3)/2,cy-bRect(4),255);
         txt = '3 Scene';                                 %對(duì)應(yīng)e鍵位
         bRect = Screen('TextBounds',win,txt);
         Screen('DrawText',win,txt,cx-bRect(3)/2,cy+bRect(4),255);
         time_stamp = Screen('Flip',win,time_stamp+(mask_onset-0.5)*flipIntv);
         
         %要求被試反應(yīng)
         start_time = GetSecs;                            %獲取最新時(shí)間
         response_pool(i) = nan;
         RT_pool(i) = nan;
         while(GetSecs-start_time<word_onset*flipIntv)    %最多等待時(shí)間 
             %被試者要在指導(dǎo)語顯示的范圍內(nèi)給出反應(yīng),在這個(gè)范圍內(nèi)獲取鍵位反應(yīng)
             [K_down,~,K_code] = KbCheck;
             if(K_down)
                 RT_pool(i) = GetSecs-start_time;         %計(jì)算并保存反應(yīng)時(shí)間
                 %Response True?
                 file_nm = (files(Image_order(i)).name);
                 response_pool(i) = find(K_code==1);      %保存鍵位
                 if(K_code(space))%space is [out]
                     sca;
                     stats.subinfo={'WZY','Male','21yrs'}; 
                     stats.trial_num=Total_trial;
                     stats.Image_order=Image_order;
                     stats.image_shown=Image_pool;
                     stats.SOAs=SOA_pool(SOA_order);
                     stats.Masks=Mask_pool(Mask_order+1);
                     stats.response={RT_pool,response_true,response_pool}; 
                     stats.docs='Masks = 1 is unmask,Masks = 2 is masked';
                     save mask_result.mat stats
                     return
                 elseif(K_code(keyq))
                     if(strcmp(file_nm(1:3),'obj'))       %取當(dāng)前圖片的前三個(gè)字母判斷是否匹配obj
                         %response true
                         response_ture(i) = 1;
                     else
                         response_ture(i) = 0;
                     end
                 elseif(K_code(keyw))
                     if(strcmp(file_nm(1:3),'ani'))        %取當(dāng)前圖片的前三個(gè)字母判斷是否匹配ani
                         response_ture(i) = 1;
                     else
                         response_ture(i) = 0;
                     end
                 elseif(K_code(keye))
                     if(strcmp(file_nm(1:3),'sce'))       %取當(dāng)前圖片的前三個(gè)字母判斷是否匹配sce
                         response_ture(i) = 1;
                     else
                         response_ture(i) = 0;
                     end
                 else
                     response_ture(i) = 0;
                 end
                 break
             end
         end
                         
         Screen('FillRect',win,128);
         time_stamp = Screen('Flip',win,time_stamp+(word_onset-0.5)*flipIntv);
     end
     time_stamp = Screen('Flip',win,time_stamp+1);
     stats.subinfo={'WZY','Male','21yrs'}; % cell記錄
     stats.trial_num=Total_trial;
     stats.Image_order=Image_order;
     stats.image_shown=Image_pool;
     stats.SOAs=SOA_pool(SOA_order);
     stats.Masks=Mask_pool(Mask_order+1);
     stats.response={RT_pool,response_ture,response_pool};
     stats.docs='Masks = 1 is unmask,Masks = 2 is masked';
     save mask_result.mat stats
     
     Screen('CloseAll');
     ListenChar(0);
 catch
     ListenChar(0);
     sca;
 end
 
 function pixs=deg2pix(degree,inch,pwidth,vdist)
    screenWidth = inch*2.54/sqrt(1+9/16);
    pix = screenWidth/pwidth;
    pixs = round(2*tan((degree/2)*pi/180)*vdist/pix);
 end
 
 function nframe = time2frame(flipIntv,duration)
    nframe = round(duration/flipIntv);
 end

到了這里,關(guān)于Matlab鍵盤鼠標(biāo)輸入學(xué)習(xí)及PsychToolBox對(duì)刺激反應(yīng)結(jié)果的保存的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 搬家后臺(tái)式電腦開機(jī)無信號(hào)、進(jìn)不去系統(tǒng),鍵盤鼠標(biāo)沒反應(yīng)

    最近搬家遇到一個(gè)奇怪的事情。 現(xiàn)象:開機(jī)屏幕顯示無信號(hào),使用筆記本測試顯示器和線材是正常的。鍵盤鼠標(biāo)都點(diǎn)不亮,按大小寫切換無反應(yīng)。 嘗試過的方法: 1、取出顯卡,使用橡皮擦擦拭金手指。 結(jié)果:未解決,仍然開機(jī)無信號(hào)。 2、取出內(nèi)存條重新插拔。 結(jié)果: 未

    2024年02月11日
    瀏覽(16)
  • 筆記本電腦開機(jī)后,屏幕無反應(yīng),插入的鼠標(biāo)和鍵盤無燈亮起

    筆者今天的筆記本電腦突然開機(jī)后磁盤有反應(yīng),但是顯示屏和鼠標(biāo)都是未接入電源的情況。 一開始想進(jìn)入安全模式檢查一番,即開機(jī)連續(xù)按F12。第一次嘗試可以進(jìn)圖安全模式,隨后又鍵盤燈光和顯示屏亮起,顯示屏上顯示進(jìn)入安全模式,隨后一兩秒又再次再次黑屏。重復(fù)幾次

    2024年02月14日
    瀏覽(231)
  • 【Unity入門】鼠標(biāo)輸入和鍵盤輸入

    一、監(jiān)聽鼠標(biāo)輸入 GetMouseButtonUp 、GetMouseButtonDown、GetMouseButton input.GetMouseButtonDown和 input.GetMouseButtonUp 能夠分別監(jiān)聽鼠標(biāo)的按下和松開事件,GetMouseButton長按響應(yīng),值得注意的是,這三個(gè)方法需要傳入?yún)?shù),0表示左鍵,1表示右鍵,2表示中間鍵 比如我們可以在代碼中這樣寫,來

    2024年02月03日
    瀏覽(27)
  • 【Unity入門】15.鼠標(biāo)輸入和鍵盤輸入

    【Unity入門】15.鼠標(biāo)輸入和鍵盤輸入

    ? ? 大家好,我是Lampard~~ ????歡迎來到Unity入門系列博客,所學(xué)知識(shí)來自B站阿發(fā)老師~感謝 ? (1) Input類 ? ? Unity的 Input類提供了許多監(jiān)聽用戶輸入的方法 ,比如我們常見的鼠標(biāo),鍵盤,手柄等。我們可以用Input類的接口來獲取用戶的輸入信息 ? ? 下面我們會(huì)調(diào)用幾個(gè)常用的

    2024年02月09日
    瀏覽(16)
  • JAVA 鼠標(biāo)控制與鍵盤輸入控制

    該類是JDK定義的電腦系統(tǒng)的抽象類,可以用來模擬實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊與鍵盤輸入等信息 簡單實(shí)現(xiàn)一個(gè)自動(dòng)搶票代碼: InputEvent.BUTTON1_MASK 左鍵 (食指點(diǎn)擊) InputEvent.BUTTON2_MASK 中鍵 (滾輪) InputEvent.BUTTON3_MASK 右鍵(中指點(diǎn)擊) 得到的信息需要根據(jù)屏幕--顯示設(shè)置--縮放與布局的百分

    2024年02月13日
    瀏覽(26)
  • 34_輸入設(shè)備鍵盤鼠標(biāo)你得會(huì)

    34_輸入設(shè)備鍵盤鼠標(biāo)你得會(huì)

    鍵盤和鼠標(biāo)是個(gè)人計(jì)算機(jī)中常用的輸入設(shè)備。通過鍵盤可以將字母、數(shù)字、標(biāo)點(diǎn)符號(hào)等輸入計(jì)算機(jī)中,從而向計(jì)算機(jī)發(fā)出命今;鼠標(biāo)可以對(duì)屏幕上的光標(biāo)進(jìn)行定位,并通過鼠標(biāo)按鈕和滾輪對(duì)光標(biāo)所處位置的屏幕元素進(jìn)行操作。一個(gè)應(yīng)用程序應(yīng)該響應(yīng)用戶的鍵盤和鼠標(biāo)輸入事件。

    2024年01月22日
    瀏覽(15)
  • Unity Input輸入類-鼠標(biāo)鍵盤檢測

    Unity Input輸入類-鼠標(biāo)鍵盤檢測

    當(dāng)你開發(fā)Unity游戲時(shí),與用戶的輸入交互是非常重要的。Unity提供了豐富的輸入類來幫助你獲取用戶的輸入,并做出相應(yīng)的響應(yīng)。在本文中,我將會(huì)向你介紹Unity中的輸入類,包括Input、KeyCode、MouseButton和Touch等。 Input類 Input類是Unity中最基礎(chǔ)的輸入類,它可以獲取各種類型的輸

    2024年02月11日
    瀏覽(26)
  • unity3D 鼠標(biāo)鍵盤輸入

    unity3D 鼠標(biāo)鍵盤輸入

    一、鼠標(biāo)鍵盤輸入 游戲的輸入可以來自于鼠標(biāo),鍵盤,觸摸屏,游戲手柄 顯示一個(gè)Vector3類型的xyz的鼠標(biāo)位置。 Input.GetButtonDown(0):0代表鼠標(biāo)左鍵,1代表鼠標(biāo)右鍵,如果鼠標(biāo)左鍵按下返回true。 Input.GetKeyDown(\\\"space\\\"): 檢測空格是否按下。 更多操作可以查看Unity Script API( UnityE

    2024年02月10日
    瀏覽(17)
  • c++ 鍵盤/鼠標(biāo)交互+特殊輸入/輸出+窗口常用函數(shù)

    需要頭文件: 或: 函數(shù): 使用方法: 1.if(KEY_DOWN(某個(gè)鍵))或if(KEY_UP(某個(gè)鍵)) 檢測該鍵是否按下/未按下 2.keybd_event(某個(gè)鍵,0,0,0);或keybd_event(某個(gè)鍵,0,KEYEVENTF_KEYUP,0); 使該鍵是否按下/彈起(實(shí)際使用可參照下文鼠標(biāo)函數(shù)click_left()) 鍵碼表(替換“某個(gè)鍵”): 函數(shù): 使用方法: gx()或

    2024年02月09日
    瀏覽(39)
  • 【Unity】Input——檢測鼠標(biāo)、鍵盤、手柄輸入、鼠標(biāo)在屏幕上的位置等等

    【Unity】Input——檢測鼠標(biāo)、鍵盤、手柄輸入、鼠標(biāo)在屏幕上的位置等等

    Unity提供的 更方便的 控制對(duì)象的 位移和旋轉(zhuǎn)的解決方案 這個(gè)Axis是可以自定義的:

    2024年02月11日
    瀏覽(53)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包