Ich verwende Psychopy und diesen Code zum Messen der Tastendruckdauer, wie in dieser Antwort auf meine vorherige Frage vorgeschlagen :
from psychopy.iohub import launchHubServer
io = launchHubServer()
keyboard = io.devices.keyboard
count = 0
keyinfo = ""
duration = 0
key = ""
io.clearEvents('all')
print 'begin'
while key not in ['escape', 'esc']:
key_info = keyboard.waitForReleases()[0]
count += 1
key = key_info.key
keyinfo = key_info
duration = key_info.duration
key = key_info.key
print 'round number:' , count
print key_info
print 'Press time was', key_info.duration
print 'key', key_info.key
Die ersten Tests sehen vielversprechend aus, aber ich habe mich gefragt, ob es einen Unterschied in der Genauigkeit iohub
oder pyglet
Funktion in Psychopy gibt? Oder ob es sogar eine genauere Lösung gäbe, als eine dieser beiden zu verwenden? Und wie ist die Messung der Tastendruckdauer. Ich habe danach gesucht, aber keine Daten für Windows gefunden. Das einzige, was ich gefunden habe, sind diese Tests . Ist jemand über eine Veröffentlichung bezüglich der Genauigkeit gestolpert?
Außerdem weiß ich nicht, wie gut RAM und CPU sein müssten, ich weiß genau, dass ich ein ASUS-Notebook mit Intel Core i7 2,6 GHz und 16 GB RAM verwende (Bluetooth, Ethernet, Wi-Fi, Mobile und andere Arten von Verbindungen deaktiviert ; visuelle Desktop-Effekte deaktiviert; Virenschutz, Software-Updates, Hintergrundprogramme und andere asynchrone Ereignisquellen deaktiviert) und die letzte Version von PsychoPy2.
Ich habe versucht, vorläufige Tests durchzuführen, um die Genauigkeit meines Tests zu messen und die Tastendruckdauer mit Psychopy und meinem Tastatursimulationsgerät zu messen. Bevor ich teurere Geräte gemietet habe, habe ich versucht, die Genauigkeit mit einer 60-fps-Kamera vorab zu testen, die den Moment der Berührung und ohne Berührung des Geräts aufzeichnet und gleichzeitig mit Psychopy misst, um diese mit Werten vergleichen zu können, um die Genauigkeit zu haben . Die 60 fps bedeuten, dass zwischen den Frames 16,67 ms liegen. Mein billiger Kamera-Pretest hat ergeben, dass die meiste Verarbeitungszeit maximal ca. 8ms beträgt, so dass ich denke, dass ich mit besserem Aufnahmeequipment bei höherer Framerate noch niedrigere Werte erreichen werde. Aber ungefähr jede zehnte Messung habe ich 24-36 ms Signalverarbeitung.
Meine Fragen zusammengefasst:
iohub
und pyglet
) in Windows selbst gemessen oder ist auf Literatur darüber gestoßen?Im Psychopy-Forum habe ich einige Ratschläge erhalten:
Dies hätte ehrlich gesagt auf SO gestellt werden sollen, da es sich zu 99% um eine Programmierfrage handelt. Es gibt viele Dinge, die zu der "stacheligen" Genauigkeit beitragen können, die Sie gesehen haben:
Sprache/Laufzeit: Python ist kaum eine gute Idee für etwas, das Echtzeitgenauigkeit erfordert. Es ist eine interpretierte Sprache mit Garbage Collection . Die [Neu-]Zuweisungen in Ihrer Schleife werden (eventuell) das auslösen. Ich habe einmal eine Python-GTK-Schnittstelle für ein Echtzeitgerät geschrieben, aber der Code, der das Gerät steuert, war vollständig in C, und auf Python-Seite wurde nichts Zeitkritisches getan.
Letztendlich sind die dynamischen Speicherzuweisungen der C-Laufzeit ( auf die Python schließlich angewiesen ist) auch in Bezug auf das Timing nicht vorhersehbar , obwohl dies wahrscheinlich nicht das ist, was Sie sehen. Für Echtzeit-Software wird die dynamische Zuordnung im Allgemeinen vermieden.
Betriebssystem: läuft nicht mit ausreichend hoher Prozess-/Thread-Priorität, sodass Sie gelegentlich von anderen Prozessen/Threads unterbrochen werden.
Hardware/Treiber: USB sendet paketierte Daten mit begrenzter Abfragerate; 8 ms (125 Hz) ist die Standardeinstellung für die meisten Eingabegeräte. Sofern Sie die Standardeinstellung nicht ändern können, ist eine PS/2-Tastatur normalerweise schneller; siehe Tabelle 2 in Shimizu 2002 ; Die schlechtere Standardabweichung (SD) für die Reaktionszeit, die dort für eine USB-Tastatur zu sehen war, betrug etwa 10 ms, was weniger zu sein scheint als das, was Sie gesehen haben, also haben Sie wahrscheinlich zusätzliche Probleme. Nur eine PS/2-Tastatur überschreitet 3 ms SD (etwas).
Der Mikrocontroller (oder möglicherweise zusätzliche Chips, z . B. ) in Ihrer Tastatur implementieren etwas, das als Entprellen bezeichnet wird und das Drücken und Loslassen glättet, um die mechanischen Eigenschaften der Schalter der Tastatur zu kompensieren. Ohne dies werden Sie Müllpressen wie im Fall einiger Dell-Laptops vor einigen Jahren machen. Debounce gilt sowohl für das Drücken als auch für das Loslassen von Tasten. Bei den meisten Tastaturen ist die Entprellung nicht konfigurierbar oder es ist sehr einfach, die Einstellungen herauszufinden.
Aus technischer Sicht stellt sich als Erstes die Frage, welche Genauigkeit Sie tatsächlich benötigen. Und wofür brauchen Sie diese Messung aus wissenschaftlicher Sicht? Ihre Frage riecht nach einem großen xy-Problem .
Steven Jeuris
AliceD
Natalie
AliceD
Natalie
AliceD
Natalie