1 / 17

Accurate Timing

Matlab Class 7 Hristiyan Kourtev & Xiaotao Su, Ph.D. Visual Psychophysicist & IT Group Leader Rutgers Center for Cognitive Science (RuCCS). Accurate Timing. GetSecs is a psychtoolbox function that provides highly accurate timing.

fell
Download Presentation

Accurate Timing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Matlab Class 7Hristiyan Kourtev &Xiaotao Su, Ph.D.Visual Psychophysicist & IT Group LeaderRutgers Center for Cognitive Science (RuCCS)

  2. Accurate Timing • GetSecs is a psychtoolbox function that provides highly accurate timing. • It returns the number of seconds since the machine has started up • To test precision on your machine, type:GetSecsTick Command Window: a = GetSecs GetSecs – a GetSecs – a GetSecs – a GetSecs – a

  3. KbCheck • KbCheck is used to check if a key is being pressed and to find out what key is being pressed. • Returns three values • [key_press, secs, key_code]=KbCheck

  4. KbCheck • KbCheck is used to check if a key is being pressed and to find out what key is being pressed. • Returns three values • [key_press, secs, key_code]=KbCheck Vector representing all of the input keys. Elements in the vector are set to 1 if pressed or 0 if not Time that this test took place (This is from GetSecs function) 1 or 0 depending on if there was a key press

  5. Speed Test Game disp('NOW!'); timer = GetSecs; while 1 [key_is_down, secs, key_code] = KbCheck; if(key_is_down) break end end elapsed_time = secs - timer; disp(['Your time was ', num2str(elapsed_time)]); end %speed_test.m %tests your reaction time WaitSecs(1); disp('Ready?'); num_sec_to_start = rand*5+1; WaitSecs(num_sec_to_start); too_soon = 0; timer = GetSecs; while ((GetSecs-timer)<num_sec_to_start) ... && (~too_soon) [too_soon, secs, keyCode] = KbCheck; if(too_soon) break; end end if(too_soon) disp('you pressed the key too early'); else

  6. Task 1 • Make it so if someone presses a key too early, the program give a message and exits. (Tip:first remove WaitSecs • [key_press, secs, key_code]=KbCheck Vector representing all of the input keys. Elements in the vector are set to 1 if pressed or 0 if not Time that this test took place (This is from GetSecs function) 1 or 0 depending on if there was a key press

  7. Speed Test Game disp('NOW!'); timer = GetSecs; while 1 [key_is_down, secs, key_code] = KbCheck; if(key_is_down) break end end elapsed_time = secs - timer; disp(['Your time was ', num2str(elapsed_time)]); end %speed_test.m %tests your reaction time WaitSecs(1); disp('Ready?'); num_sec_to_start = rand*5+1; WaitSecs(num_sec_to_start); too_soon = 0; timer = GetSecs; while ((GetSecs-timer)<num_sec_to_start) ... && (~too_soon) [too_soon, secs, keyCode] = KbCheck; if(too_soon) break; end end if(too_soon) disp('you pressed the key too early'); else

  8. What key was pressed? • The third returned value is a vector representing all the keys with 1’s for pressed keys and zeros for keys that aren’t pressed • To find the value of the key, use: key_name = KbName(key_code); This will return a string corresponding to that key_code

  9. Simple program to find key mapping names % get_key_name.m %find out what the name of the key is WaitSecs(1); KbWait; [key_is_down, secs, key_code] = KbCheck; name = KbName(key_code); disp(name);

  10. KbName works the other way around as well As you have seen: • key_name = KbName(key_code); You can also do the following: • return_key = KbName(‘return’); • esc_key = KbName(‘esc’); • up_key = KbName(‘up’); And this will get you the index of the element in the key_code vector that corresponds to that key

  11. key_code vector when esc is pressed esc’s key code is 27 key_code vector: Values: Indexes So, key_code(27) is 1

  12. Exit on esc %exit_on_esc.m esc_key = KbName('esc'); i = 0; while 1 i = i+1 [key_is_down, secs, key_code] = KbCheck; if(key_code(esc_key)) break; end end disp('Good Bye');

  13. Moving Dot %moving_dot.m clear all; screen_setup; up_key = KbName('up'); down_key = KbName('down'); left_key = KbName('left'); right_key = KbName('right'); esc_key = KbName('esc'); shape = [20, 20, 100, 100]; color = [255, 0, 255]; tic whiletoc<10 Screen(window, ‘FillOval', … color, shape); flip; [key_is_down, secs, key_code] … = KbCheck; if(key_code(esc_key)) break end end clear screen;

  14. Task 2 • Draw a circle • Make it so the arrow keys will move the circle • Make sure the circle cannot go outside of the boundaries of the screen.

  15. Task 3 - color differentiation (part 1) • Take subject name • screen_setup • trial loop (start with 5)color = [rand*255, rand*255, rand*255] • put circles 1-4 on the screen • one of the four circles will be slightly off (start with +/-50), color from the others on one of the three color dimensions (randomly chose dimension); careful that your deviation doesn’t go >255 or <0 • The subject will click on the circle they feel is different • record data (whatever would be useful) • if the subject was right in the last loop, the amount the color is off is cut in half, otherwise, increase by half • save trial data to csv tip: make a function to determine if the cursor is in a shape function is_in = in_shape(vect, mouse_x, mouse_y)

  16. Task 3 - color differentiation (part 2) Further additions: • allow the subject to press 1 - 4 to select a circle (using KbCheck) • put numbers in the circles Hint: You need to use the following commands: Screen('TextFont', window, fontName*);Screen('TextSize', window, fontSize**); Screen('DrawText', window, textString, x, y, textColor);*fontName can be “Arial”, “Verdana” or other *fontSize can be any number. Start with around 20 and adjust as needed

  17. Deploying Matlab Programs on other machines • The Matlab Builder/Deploytool – ‘deploytool’ • The Matlab Component Runtime (MCR) • Creating a standalone version of a Matlab program (Windows) • Creating a standalone version of a Matlab program (OSX) • The .NET Builder and deploying to the web

More Related