Ist eine Echtzeit-Signalverarbeitung unter Windows möglich?

8

Diese Frage bezieht sich auf Wie kann man entscheiden, auf welcher Plattform die Echtzeit-Audioverarbeitung am besten implementiert werden kann? , aber mit Schwerpunkt auf Windows.

Ich möchte in der Lage sein, Eingaben von einer Datenerfassungskarte zu nehmen und zu verarbeiten (entweder über Matlab oder ein benutzerdefiniertes Programm) und das Ergebnis dieses Programms zu verwenden, um ein externes Gerät anzutreiben, das über USB angeschlossen ist. Ich weiß, dass es mit Windows fast unmöglich ist, in Echtzeit harte Antworten zu erhalten (da es ein "Wackeln" (Fachbegriff) von 3-15 ms gibt).

Was ist der effektivste Weg, um diese Wackelzeit zu verkürzen? Ist das möglich? Sollte ich sofort nach einer eingebetteten Lösung suchen?

jonsca
quelle

Antworten:

4

Windows ist kein Echtzeitbetriebssystem, daher verfügen Sie in Windows nicht über echte Echtzeitverarbeitungsfunktionen.

Mit Windows Vista bot Microsoft eine neue API an, die unter anderem auf strenge Leistung abzielte, wobei Exclusive-Mode-Streams eine Leistung nahezu in Echtzeit versprachen. Dies wird durch ein paar leistungsstarke Dinge erreicht, die zusammenarbeiten, einschließlich eines kurzen und exklusiven Wegs zur Audio-Hardware von Komponenten im Benutzermodus und einer spezifischen Multimedia-Planung. Lassen Sie mich das Wiki dazu zitieren :

Für Audio-Profis wurde ein neuer WaveRT-Port-Treiber eingeführt, der mithilfe des Multimedia-Klassenplaners eine Echtzeitleistung erzielen soll und Audioanwendungen unterstützt, die die Latenz von Audio-Streams verringern. Infolgedessen können Anwendungen im Benutzermodus Audiostreams vollständig steuern, ohne dass zur Laufzeit Code im Kernel ausgeführt wird. WaveRT ermöglicht der Anwendung im Benutzermodus den direkten Zugriff auf die internen Audio-Hardware-Puffer und Sample-Positionszähler (Daten im Speicher, die der Audio-Hardware-DMA-Engine zugeordnet sind). Damit können Anwendungen die aktuelle Position im DMA-Speicherfenster abfragen, auf die die Hardware zugreift. WaveRT unterstützt auch die Vorstellung eines Hardware-generierten Taktbenachrichtigungsereignisses, ähnlich der ASIO-API. Damit Anwendungen nicht nach der aktuellen Position abfragen müssen, wenn sie dies nicht möchten. WaveRT funktioniert jedoch nur mit PCI-, PCI Express- oder Onboard-Audiogeräten. Es funktioniert nicht mit USB- oder FireWire-Schnittstellen, die in der professionellen Audioindustrie weiter verbreitet sind.

Diese neue Betriebsart eröffnete aufregende Möglichkeiten für die Audioverarbeitung mit geringer Latenz, wie von zufriedenen Benutzern berichtet :

Ich erhalte perfektes, stabiles Audio mit 2 ms Puffern + 0,5 ms Latenz im Vergleich zu semistabilem Audio in 4 ms Puffern (+ 5 ms Ausgangslatenz) mit ASIO.

Abhängig davon, ob diese Echtzeitnäherung für Sie gut ist, ist Windows möglicherweise immer noch eine gute Umgebung für die erwähnte Aufgabe.

Roman R.
quelle
9

Wenn Sie Jitter halten müssen (vorausgesetzt, Sie meinen das mit "wackeln") :) bis auf <1 ms würde ich sagen, vergessen Sie Windows. Ist die absolute Latenz von Eingabe zu Ausgabe von Bedeutung oder ist es nur der Jitter?

Sie können es manchmal verwalten, aber es ist unwahrscheinlich , dass dies garantiert wird. Was ist die Strafe für die Nichteinhaltung der Frist? Wird es Lautsprecher sprengen? Einen Roboterarm zu fest gegen einen Endanschlag fahren? Oder etwas gütigeres?

Die Tatsache, dass Ihr Ausgang USB ist, hilft wahrscheinlich auch nicht bei den Jitter-Einsätzen, da dort viele zusätzliche Betriebssysteminteraktionen stattfinden und die Topologie des Busses auch Ihre potenzielle Latenz behindert - wenn sich Ihr Ausgang am Ende einer Reihe von befindet ein paar Hubs zum Beispiel.

Martin Thompson
quelle
Ja, Jitter war der Begriff, nach dem ich gesucht habe, danke.
Jonsca
5

Ob dies möglich ist oder nicht, hängt von Ihren Latenzanforderungen ab, dh von der Gesamtverzögerung zwischen Eingabe und Ausgabe. Ein guter Ausgangspunkt könnte das Einrichten einer digitalen Audio-Workstation mithilfe von Aufzeichnungssoftware wie ProTools, Sonar, Ableton, Cubase usw. sein. Diese arbeiten mit kostengünstiger (Art) E / A-Hardware und werden mit optimierten Treibern mit geringer Latenz geliefert. Einige davon verfügen über "Plug-In" -Schnittstellen, über die Sie Ihre eigene Signalverarbeitung durchlaufen können. Ein beliebtes Format ist VST von Steinberg, das von vielen Hosts unterstützt wird. Früher war es offen und kostenlos, jetzt ist möglicherweise eine Lizenz erforderlich.

Diese http://www.kvraudio.com/wiki/ ist eine gute Ressource für solche Dinge.

Wenn Sie in Matlab verarbeiten möchten, müssen Sie möglicherweise Ihre eigenen Treiber schreiben. Ich habe gesehen, dass dies mit DLLs und auch nativen JAVA-Schnittstellen gemacht wurde. Sie können auch etwas zusammen mit audioplayer () und audiorecorder () hacken, aber diese erfordern möglicherweise eine ziemlich hohe Latenz, um mit Windows-Interrupts umzugehen und andere Dinge zu tun. Im Wesentlichen richten Sie ein GUI-Steuerelement mit einem Rückruf ein, der zu einem bestimmten Zeitpunkt ausgelöst wird. Im Rückruf lesen Sie alle verfügbaren Eingaben, verarbeiten sie, schieben sie in die Ausgabe und hoffen auf das Beste.

Im Allgemeinen ist es hilfreich, die Windows-Box so "sauber" wie möglich zu halten, dh keine Netzwerkverbindung (während Sie Audio verarbeiten), keine Antivirensoftware und nur das absolute Minimum an Startelementen, Software und Diensten auszuführen.

Hilmar
quelle