Genauigkeit der Messung der Psychopy-Tastenanschlagsdauer

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 iohuboder pygletFunktion 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:

  1. Weiß jemand, woran es liegen könnte, dass etwa jede zehnte Messung höhere Signalverarbeitungszeiten hat?
  2. Wie könnte ich die Messung der Tastendruckdauer genauer machen?
  3. Hat jemand die Genauigkeit der Tastendruckdauer von psychopys2 verschiedenen Funktionen (z. B. iohubund pyglet) in Windows selbst gemessen oder ist auf Literatur darüber gestoßen?
Das ist eine wirklich gute Frage und hier sehr willkommen! Falls Sie hier jedoch nicht sofort Antworten erhalten, empfehle ich Ihnen, eine ähnliche Frage (umformuliert, um sich mehr auf die spezifische Technologie zu konzentrieren) auf Stack Overflow zu stellen . Wenn Sie dort eine Antwort erhalten, können Sie hier natürlich Ihre eigene Antwort hinzufügen!
Was genau ist iohub oder pyglet? Was ist die Genauigkeit von 16,67 ms? Ich meine, was hast du gemessen und wie definierst du Genauigkeit? Und Sie sagen ... die gemessenen Daten liegen irgendwo bei 8 ms - welche Daten? Was hast du gemessen? Die Frage ist zu diesem Zeitpunkt ziemlich unklar. Außerdem sind viele Fragen in der Post begraben. Was müssen Sie wissen? Bitte seien Sie klar und deutlich.
Ich habe versucht, die Frage neu zu formulieren und die Informationen klarer zu machen. Danke Steven Jeuris für den Vorschlag, das wird mein zweiter Schritt!
Danke dafür. Sie fragen sich also im Grunde, was der Grund sein könnte, dass ... [ungefähr] jede zehnte Messung eine Signalverarbeitung von 24-36 ms hat ?
Danke für die Anregung, die Fragen sind jetzt am Ende zusammengefasst.
Wie ist die Beziehung zwischen der Dauer des Tastendrucks und der Bildrate? Darüber hinaus ist die Genauigkeit der Tastendruckdauer schwer zu quantifizieren, da Sie wissen müssen, wie lange sie in Wirklichkeit gedrückt wurde, im Vergleich zu dem, was Sie zurückmessen. Es ist also immer noch schwer, Ihren Beitrag zu interpretieren. Außerdem ist es wichtig zu wissen, wie häufig die Fehler auftreten. Ich meine, wenn es zufällig ist, wird das zugrunde liegende Problem anders sein, als wenn genau einer von zehn aus ist. Aber das Wichtigste ist: Was genau hast du getestet?
Die Kamera mit dieser Framerate ist nur eine Möglichkeit, die Messung zu testen (aber die Kamera ist wegen der niedrigen Framerate nicht so genau), um zu sehen, ob das, was ich messe, richtig ist, benutze ich die Kamera, weil ich sie im Moment nicht habe andere zuverlässige Methode und da ich nicht weiß, wie lange tatsächlich gedrückt wurde, nehme ich den Tastendruck mit der Kamera auf und vergleiche ihn mit den gemessenen Werten mit meinem Gerät. Und etwa bei jedem zehnten Tastendruck werden längere Zeiten gemessen, als die Kamera aufzeichnet.

Antworten (2)

Im Psychopy-Forum habe ich einige Ratschläge erhalten:

  • Eine wäre, den Code zu ändern: den Druckbefehl entfernen, keine Neudefinition von Variablen
  • USB, USB-Gerät, die Python- und Systembibliotheken sollten möglichst die neuesten und schnellsten sein, da diese die Genauigkeit beeinflussen könnten.
  • Und dieses Psychtoolbox-Forum könnte die Lösung haben, aber bisher habe ich sie nicht gefunden.
Dies ist leider ein völliges Fehlen einer Reaktion. Der ungeprüfte Verweis auf externe Quellen ist kein guter Beitrag zu dieser Seite.
Dies ist, wie gesagt, nicht meine Antwort und daher auch nicht als Problemlösung geprüft. Auf Anraten von Steven Jeuris habe ich die Frage in einem anderen Forum gestellt und nur die Antwort, die ich erhalten habe, hier zusammengefasst, um diese Information zu teilen oder einige Ideen anzuregen. Vielleicht wäre ein Kommentar besser gewesen, aber die obige Frage hatte so viele Kommentare, dass ich dachte, es wäre zu verwirrend

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 .