Технические возможности для организации психологических экспериментов.
Вслед за "бумом", повальным увлечением психологией в период 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 при помощи драйвера, что требует относительно более высокой квалификации в программировании.
2)Погрешность монитора. ЭЛТ мониторы не имеют временной погрешности, за исключением того, что выводимое на них изображение это светящаяся точка, бегающая по экрану. Когда электронный луч проходит над определенным пикселом, тот резко вспыхивает а затем, в течении нескольких миллисекунд угасает.
ЖК мониторы имеют 2 вида погрешностей:
-input lag. После того как сигнал поступил в монитор, внутренние процессоры монитора должны вычислить, какие электрические поля следует приложить к слою жидких кристаллов. Кристаллы под воздействием полей поворачиваются, изменяя свою способность пропускать свет. В светлых частях изображения кристаллы пропускают много света от стоящей в задней части монитора лампы, а в темных - мало. Время, затраченное на расчет электрических полей (?) образует input lag, от 0 до 33 миллисекунд. Постарайтесь использовать монитор с нулевым input lag (информация - в интернет обзорах мониторов).
-время реакции пиксела. Поворот кристаллов для каждого пикселя занимает время. У хороших мониторов на TN матрице это время не превышает 1-2 миллисекунд. Обратите внимание, что время перехода зависит от того,от каких яркостей к каким монитор переходит (в обзорах можно найти время перехода для разных комбинаций исходной и итоговой яркости).
Необходимо так же помнить, что яркость стоящей в задней части монитора лампы может колебаться (т.н. широтно-импульсная модуляция). Ищите мониторы без ШИМ.
Изображение как на ЖК, так и на ЭЛТ монитор поступает по кадрам. Для ЭЛТ очередной кадр начинается, когда луч электронов начинает отрисовывать первую строчку изображения. У ЖК изображение обычно выводится на экран по квадратикам: вначале квадратик в верхнем левом углу, затем диагональная полоса из квадратиков, примыкающих к верхнему левому углу, полоса, примыкающая к данной полосе и т.д. За отрисовкой кадра для ЭЛТ и ЖК подключенного синим VGA входом, следует пауза. Следующий кадр экран берет из особой области памяти видеокарты. Следовательно, изображение стимула должно оказаться в этой области после конца отрисовки одного кадра, но до начала отрисовки другого.
Раньше момент конца отрисовки кадра можно было определить, используя функции Microsoft DirectX библиотеки программирования. Однако для новых nVidia видеокарт эта возможность не работает, и приходится внедрять свой код в Ring0 для считывания регистров видеокарты (это такие ячейки памяти, в которых записано текущее состояние отрисовки изображения).
Небольшие изображения можно успеть переслать в видеопамять за 8 миллисекунд, проходящих между двумя отрисовками (предполагаем, что монитор обновляется 60 раз в секунду и времена экспозиции стимулов кратны 16 миллисекундам). Большие изображения можно заранее загрузить в память видеокарты, дабы затем быстро отправить их уже внутри самой видеокарты на отрисовку. Правда только DirectX 7.0 гарантирует это, а более поздние версии не обещают, что загрузят изображение именно в видеопамять, а не в оперативную.
3)Погрешности мыши/клавиатуры.
-Частота опроса. PS/2 клавиатуры опрашиваются несколько десятков раз в секунду, что дает высокую погрешность. PS/2 мыши (с круглым разьемом) опрашиваются до 200 раз в секунду (В WinXP это можно задать с помощью Панели управления и проверить с помощью специальных программ наподобие PS2rate). USB мыши и клавиатуры могут опрашиваться до 1000 раз в секунду (погрешность меньше 1 миллисекунды). Имеется сообщение уважаемого специалиста, что стандарт USB допускает изредка задержки до 30 миллисекунд, подтверждений этому в литературе мне найти не удалось.
-Механизм оконных сообщений. Когда Вы, к примеру, нажимаете клавишу PS/2 мыши, изменяется состояние аппаратной ячейки памяти (регистра). При этом генерируется т.н. аппаратное прерывание - сигнал процессору отвлечься от текущей работы и произвести некие вычисления, связанные с нажатием на мышь. Процессор обычно устанавливает т.н. отложенный вызов и возвращается к своим текущим делам. Отложенный вызов означает, что когда процессор переделает текущие дела, процессор начнет выполнять программу-драйвер. Выполнение драйвера через ряд промежуточных шагов приводит к генерации оконного сообщения. Оконное сообщение это сигнал, который получает Ваша программа управления экспериментом. Каждая программа постоянно получает тысячи сообщений. Сообщения выстраиваются в очередь и обрабатываются одно за другим, при этом некоторые сообщения могут вообще быть потеряны.
Уменьшить данную погрешность можно несколькими способами:
Использовать появившиеся в WinXP функции, которые позволяют прикладной программе считывать непосредственно поток данных, поступающих в USB порт, в обход механизма сообщений.
Либо, после предъявления стимула непрерывно в цикле считывать состояние регистра контроллера PS/2, отвечающего за кнопку мыши. Считывание регистров может быть произведено только программой, размещенной в Ring0. Здесь Ваш программный код получает информацию о нажатии в тот момент, когда мышь в очередной раз опрашивается и не позже.
-Дребезг контактов. Когда испытуемый нажимает на кнопку мыши или клавиатуры, необходимо время, чтобы кнопка нажалась до упора. Нажатие приводит к тому, что 2 металлических контакта внутри клавиатуры соприкасаются, и электрическая цепь замыкается. Кроме того - поскольку контакты как физические тела обладают упругостью, они могут прийти в колеблющееся движение, периодически замыкаясь и размыкаясь (т.н. дребезг). При этом, нажатием может считаться не первое замыкание. Следует использовать игровые мыши и клавиатуры, в спецификации которых указан малый ход микропереключателей, лежащих в основе кнопок, малое время прожатия кнопок (меньше 1 миллисекунды) и отсутствие дребезга. Тогда данная погрешность меньше 1 миллисекунды.
Если Вы прочли книгу Гусева и осознали возможные источники погрешностей и способы их минимизации (WinXP, выключение лишних программ и служб, хороший монитор с VGA подключением, игровая клавиатура или мышь) максимальная погрешность измерения времени реакции с помощью программы управления экспериментом составляет:
Время реакции пикселов монитора в квадратике со стимулом (1 мс.)+время которое забрал неудачно вмешавшийся диспетчер потоков (1 мс.)+время до очередного опроса USB мыши(1 мс.)+время прожатия кнопки мыши (1 мс.)=4 миллисекунды.
В настоящее время разработаны специальные среды, позволяющие конструировать и проводить психологические эксперименты. Коммерческие решения (E-Prime, Presentation) стоят тысячи $, но существуют бесплатные альтернативы:
Мы выкладываем альтернативы здесь. В каждом архиве, помимо инсталляционных файлов есть руководство (на английском), позволяющее создавать эксперименты и статьи, описывающие методику оценки погрешности временных характеристик экспериментов, возникающей при использовании данного пакета.
PEBL (Psychological Experiment Building Language). Разработан проф. Shaene T. Mueller. Используется в основном для программирования элементарных когнитивных задач в целях измерения интеллекта. Эксперименты пишутся на специальном простом языке программирования. Примеры когнитивных задач включены в комплект поставки (более 70). Момент физического вывода стимула на экран может запаздывать по сравнению с программной командой на 10-15 миллисекунд. Нажатие на клавишу обнаруживается программой максимум через 10 миллисекунд. Итого максимальная ошибка измерения времени реакции = 25 миллисекунд.
FLXLab. Автор Todd R. Haskell. Эксперименты пишутся на специальном простом языке программирования. Возможен вызов функциональности FLXLab из написанных Вами программ. Информация о временных погрешностях отсутствует, однако указанно, что вывод стимула синхронизирован с перерисовкой монитора. Вероятно заточен на психофизические эксперименты по восприятию (феномены маскировки и т.д.) Проект более не поддерживается автором.
DMDX. Автор - профессор Kennet Forster и Jonatan Forster. Эксперименты пишутся на специальном простом языке программирования. Используется в основном для психолингвистических экспериментов (измерение времени лексического решения и т.д.). Поддерживается регистрация голосовых ответов испытуемого с помощью микрофона. Запаздывание при выводе стимулов на экран 4 миллисекунды, запаздывание регистрации нажатия на кнопку 3 миллисекунды. Итого ошибка в измерении времени реакции 7 миллисекунд. Опыт использования данного комплекса нами выявил, что для задействования в программе мыши необходимо использовать английскую версию WindowsXP, или как то встроить в Windows английский DirectX (программа ищет мышь как "Mouse", видимо в реестре, а находит только "Мышь").
OpenSesame. Наиболее современная из представленных систем. Работает в Windows 7 и Windows 8, в том числе на многоядерных 64 битных системах. В Windows XP показывает максимальную ошибку в измерении времени реакции меньше 5 миллисекунд, т.е. определенный выше теоретический минимум ошибки. Имеет графический интерфейс для создания эксперимента. Более сложные эксперименты могут быть созданы в программе путем написания кусков кода на языке Python. OpenSesam разделен на 2 части: пользовательскую и взаимодействующую с аппаратурой. В качестве взаимодействующей с аппаратурой части могут быть использованы разные программные библиотеки. Таким образом, даже при устаревании OpenSeasame и невозможности ее запуска на компьютерах будущего, можно просто использовать (или написать) более новую библиотеку для взаимодействия с аппаратурой и пользоваться OpenSesame дальше. Существуют версии программы, способные запускаться на планшетах и смартфонах.
Опишем еще 2 программы, полезные для проведения экспериментов:
MouseTracker - программа позволяющая предъявлять испытуемому стимулы и регистрировать движения мыши, возникающие при выборе вариантов ответов.
Idiogrid - программа для проведения репертуарных решеток Келли. Предлагает широкий диапазон методов выявления конструктов и шкалирования. Так же способна обрабатывать полученные данные (факторный анализ, сингулярное разложение). К сожалению, не работает с русским языком из-за различия в кодировках (не сохраняет).
В заключение, поразмышляем что делать, если Вам недостаточно возможностей, предоставляемых вышеуказанными пакетами. Автор сего текста писал и пишет многие программы для проведения психологических экспериментов на языке Visual Basic 6.0
Достоинства:
-Язык очень прост, может быть освоен за несколько месяцев.
-Программу, которую Basic программист напишет за 1 день, программист на являющемся стандартом языке C будет писать 2 дня.
Недостатки:
-Написанная вами программа для осуществления многих стандартных действий обращается к программной библиотеке msvbvm60.dll (т.н. виртуальная машина) Хотя это означает переносимость (Вы сможете запустить программу на любом Windows, если включить библиотеку в дистрибутив), написать real-time программу на чистом Basic невозможно.
-Visual Basic 6 больше не поддерживается Microsoft. Это значит, что хотя Ваши программы будут работать на Windows 8, Вы не сможете использовать современные возможности (использование больше 2 гигабайт оперативной памяти, использование нескольких ядер для параллельных вычислений). Это может быть полезным, например, для выполнения сложного анализа физиологических данных прямо во время эксперимента.
Альтернатива - язык PureBasic.
Достоинства:
-Язык прост, как и положено Бейсику, и развивается.
-Не требуется никаких виртуальных машин, код исполняется прямо процессором, что означает максимальное быстродействие.
-Для взаимодействия с операционной системой вместо API функций ОС можно вызывать встроенные функции языка (более 11 000 подробно документированных функций). Это еще более упрощает язык для новичка. При компиляции (переводе текста программы в exe файл) на место функций языка подставляются функции ОС. Это означает, что один и тот же программный код может быть скомпилирован для работы в Windows, либо для работы в Linux, либо для MacOSX. Это ослабляет зависимость от причуд Microsoft, и теоретически дает возможность исполнять программу, например, на сервере, суперкомпьютере или спец. аппаратном блоке под управлением Linux. Не следует забывать и о существовании real-time версии Linux (определение real-time ОС смотри ниже).
-Поддерживаются 64 битные системы (использование больше чем 2 гигабайт оперативной памяти). Поддерживается задействование нескольких ядер процессора.
-Существует множество библиотек программных функций, подключаемых к языку. Эти функции позволяют например, мониторировать состояние аппаратных регистров, что важно при работе с нестандартными устройствами (пульт испытуемого) или использовать видеокарту для проведения математических вычислений (это позволяет в некоторых задачах достичь скорости вычислений, недоступной процессору).
Недостатки:
-Как и любой другой язык PB может устареть. Однако, если до сих пор используется Visual Basic 6 (1998 год разработки, т.е. 16 лет), выучив PureBasic им можно пользоваться минимум столько же.
Куски кода, которые должны выполняться в реальном времени, в Windows пишутся как драйверы. Автор данного текста использовал для этого язык ассемблера.
Достоинства:
-Вы начинаете реально понимать, как работает ЭВМ.
-Полная власть над компьютером, в обход Windows.
-Достижение максимальной теоретической точности (вывод изображений с точностью до 1 мс., регистрация времени реакции с точностью до 5 мс.)
Недостатки:
-Код, запущенный в ring0 не может выполняться дольше нескольких секунд, иначе все зависнет. Этого достаточно, если эксперимент состоит из последовательности проб, однако если вам нужен, например, постоянно мелькающий стимул без отклонений во временных характеристиках, или биологическая обратная связь по ранним компонентам единичных вызванных потенциалов, придется искать другой путь технической реализации.
-При переходе от WindowsXP к Windows7 или к многоядерной 64 битной системе старые трюки достижения ring0 перестают работать, и приходится искать новые, а не факт что они вообще есть.
Альтернатива: использование rtx - Windows Real Time eXtension. Этот продукт от компании Interval Zero фактически встраивает в Windows альтернативное ядро. Прикладной программист (например, на PureBasic-е) получает возможность вызывать программные функции RTAPI. Эти функции позволяют получать информацию о состоянии аппаратных регистров, синхронизировать исполнение программ на разных процессорных ядрах и т.д. Однако в отличие от стандартных функций Windows RTAPI работают через альтернативное ядро реального времени. Это позволяет им гарантировать выполнение задания программиста через долю миллисекунды после вызова функции.
Достоинства:
-Поддержка новых 64 битных Windows. Вероятно, будущие версии rtx будут так же поддерживать новые версии Windows.
-Вам не нужно знать ассемблер и уметь программировать драйверы ядра. Достаточно уметь писать прикладные программы, например на PureBasic-е
Недостатки:
-Если приобретать rtx, нулем $ Вы явно не обойдетесь, хотя это и обойдется дешевле, чем Real Time OS
Альтернатива альтернативе - использовать специальную операционную систему реального времени. Например, QNX.
Достоинства:
ОС всегда гарантирует отклик на запрос прикладной программы через долю миллисекунды после запроса. Точный по времени мониторинг состояния монитора и кнопок осуществляется стандартными функциями ОС без считывания регистров и тому подобного.
Недостатки:
-Хотя для некоммерческого использования доступна QNX 6.2, она не поддерживает высокие разрешения на современных видеокартах. Для официального приобретения более новой версии ОС понадобятся тысячи $.
-Необходимо выучить язык С и список API функций QNX (обычно функции операционной системы это том под 1000 страниц).
Данный текст был написан в надежде вызвать интерес зашедших на эту страницу к психологическим экспериментам в целом и их техническому обеспечению в частности. Оставляйте свои комментарии о рассмотренных программных инструментах на данной странице или пишите neurocogno@yandex.ru.