Психологические эксперименты с нуля.
Вслед за "бумом", повальным увлечением психологией в период 90х - начала нулевых годов наступает неизбежное охлаждение. Популярная психология, вещавшая что "лучше быть здоровым и богатым чем бедным и больным" уже не удовлетворяет людей. В то же время на Западе до $10 000 000 000 в год вкладывается в развитие нейронауки, математического моделирования психических процессов, экспериментальной когнитивной психологии. Для сравнения весь Большой Адронный Коллайдер обошелся в $8 000 000 000. Полученные разработки активно используются для решения широкого диапазона проблем, от разработки пользовательских интерфейсов планшетов и смартфонов и медицины до регулирования социально-политических процессов.
В 30-50е годы XX в. наша страна лидировала в области наук о мозге и поведении. Имена И.П. Павлова, Н.А. Бернштейна А.А. Ухтомского известны всем. Менее известно, что начиная 60х годов в СССР работали психологи, специализировавшиеся на математическом моделировании и экспериментальном изучениии психических процессов (например, Е.И. Бойко, Е.Н. Соколов, К.В. Бардин).
Возвращение нашей страны на передовые рубежи в деле изучения нервно-психической организации человека обязательно должно наступить. Однако, если Вы интересуетесь данной проблематикой уже сейчас, возникает вопрос: как начать, имея $0 в кармане (или около того)?
Если математическое моделирование требует ручки, бумаги и немного книг (таки ениги будут выложены сюда позже), экспериментатор нуждается в аппаратуре. К счастью персональный компьютер может обеспечить психофизиолога многими возможностями:
-Предъявление слов, картинок, видео- и аудио- фрагментов.
-Регистрация нажатий на клавиши клавиатуры, движения мыши.
Подобный арсенал позволяет измерять пороги восприятия, величины ощущений, временной ход обработки информации мозгом, содержимое семантической памяти и многое другое. Краткий обзор некоторых экcпериментальных процедур можно найти в книге:
А.Н. Гусев, И.С. Уточкин. Экспериментальная психология. Теория. Методы. (pdf)
Часто забываемым моментом однако является обеспечение надлежащей точности в задании амплитудных (например, яркость монитора) и особенно временнЫх характеристик эксперимента.
Рассмотрим источники погрешностей, возникающих при задании времени экспозиции стимулов и измерении временных характеристик ответных реакций.
1)Windows (лучше использовать WindowsXP пока это возможно) многозадачная операционная система. Это значит что на компьютере запущенно одновременно множество программ. Процессор делит время на кванты по 15 миллисекунд. Каждая программа получает процессор для того что бы на нем выполняться на целое число квант времени, после чего Windows отбирает процессор у данной программы для исполнения других программ. В тот самый момент когда программа управления экспериментом решит, что по протоколу эксперимента пора включить отображение картинки на экран, Windows может забрать у программы управления экспериментом процессор на неопределенный промежуток времени.
Методы уменьшения погрешности Windows:
-Выключите все посторонние программы перед экспериментом. Может помочь утилита наподобие GamePrelanucer. Это уменьшит, но не уберет погрешность.
-В Windows существуют уровни приоритета для выполняемых программ. Если в коде выполняемой программы прописана команда, повышающая ее уровень приоритета это уменьшит погрешность. Однако программы, входящие в состав Windows и драйверы все равно могут иногда отбирать процессор у программы управления экспериментом.
-Можно помесить код, выводящий изображения и регистрирующий реакции в т.н. Ring0. Программы выполняющиеся в Ring0 (это в первую очередь драйверы) имеют собственную лестницу уровней приоритета (т.н. IRQL). Если программа в Ring0 назначит себе высокий уровень приоритета, отобрать процессор у нее может только программа -диспечер потоков (примерно на 1 миллисекунду каждые 40 миллисекунд). Таким образом этот подход убирает погрешность Windows. Однако, такой код должен загружаться в Ring0 при помощи драйвера, что требует относительно более высокой квалификации в программировании.
Альтернативный подход - использовать операционные системы реального времени (QNX, Linux 2.6. rt). Эти ОС гарантируют программисту, что его программа будет выполненна вовремя.
2)Погрешность монитора. ЭЛТ мониторы не имеют временной погрешности, за исключением того, что выводимое на них изображение это светящаяся точка, бегающая по экрану. Когда электронный луч проходит над определенным пикселом, тот резко вспыхивает а затем, в течении нескольких миллисекунд угасает.
ЖК мониторы имеют 2 вида погрешностей:
-input lag. После того как сигнал поступил в монитор, внутренние процессоры монитора должны вычислить, какие электрические поля следует приложить к слою жидких кристаллов. Кристаллы под воздействием полей поворачиваются, изменяя свою способность пропускать свет. В светлых частях изображения кристаллы пропускают много света от стоящей в основании монитора лампы, а в темных - мало. Время затраченное на рассчет электрических полей (?) образует input lag, от 0 до 33 миллисекунд. Постарайтесь использовать монитор с нулевым input lag (информация - в интернет обзорах мониторов).
-время реакции пиксела. Поворот кристалов для каждого пикселя занимает время. У хороших мониторов на TN матрице это время не превышает 1-2 миллисекунд. Обратите внимание, что время перехода зависит от того,от каких яркостей к каким монитор переходит (в обзорах можно найти время перехода для разных комбинаций исходной и итоговой яркости).
Изображение как на ЖК так и на ЭЛТ монитор поступает по кадрам. Для ЭЛТ очередной кадр начинается когда луч электронов начинает отрисовывать первую строчку изображения. У ЖК изображение обычно выводится на экран по квадратикам: вначале квадратик в верхнем левом углу, затем диагональная полоса из квадратиков, примыкающих к верхнему левому углу, полоса, примыкающая к данной полосе и т.д. За отрисовкой кадра для ЭЛТ и ЖК подключенного синим VGA входом следует пауза. Следующий кадр экран берет из особой области памяти видеокарты. Следовательно, изображение стимула должно оказаться в этой области после конца отрисовки одного кадра но до начала отрисовки другого.
Раньше момент конца отрисовки кадра можно было определить используя функции Microsoft DirectX библиотеки программирования. Однако для новых nVidia видеокарт эта возможность не работает, и приходится внедрять свой код в Ring0 для считывания регистров видеокарты (это такие ячейки памяти в которых записанно текущее состояние отрисовки изображения).
Небольшие изображения можно успеть переслать в видеопамять за 8 миллисекунд, проходящих между двумя отрисовками (предполагаем, что монитор обновляется 60 раз в секунду и времена экспозиции стимулов кратны 16 миллисекундам). Большие изображения можно заранее загрузить в память видеокарты, дабы затем быстро отправить их уже внутри самой видеокарты на отрисовку. Правда только DirectX 7.0 гарантирует это, а более поздние версии не обещают