PC Audioverarbeitung
Das zweite Beispiel konzentriert sich weniger auf das Handwerkliche als viel mehr auf das funktionale Zusammenspiel von Labview Komponenten. Ziel ist es einen für den Amateurfunk nutzbaren, konfigurierbaren Zweitongenerator für die PC-Soundkarte zu programmieren. Dieser wird viele Elemente enthalten, die für ein SDR benötigt werden.
Zunächst etwas Hintergrundwissen zur Audioverarbeitung eines PC anhand eines Aufnahme-/Wiedergabe-Beispiels. Bild 4 zeigt den Signalzug.
Bild 4 Audio-Signalzug
Vereinfacht wird ein analoges Signal, z. B. eines Mikrophons, durch den A/D-Wandler der Soundkarte in ein abgetastetes Signal umgewandelt. Die Anzahl der Abtastungen wird durch die Abtastrate definiert. Demnach entstehen bei einer gängigen Abtastrate von 44,1 kHz insgesamt 44100 Abtastwerte (Samples) pro Sekunde, welche den Pegel des Analogsignals repräsentieren. Die Zahlenwerte können Ganzzahlen, oder auch Fließkommazahlen sein. Bei 2 Kanälen entstehen entsprechend die doppelte Anzahl Abtastwerte.
In der Regel werden die Abtastwerte der Kanäle ineinander verschachtelt. Dem 1. Wert des linken Kanals folgt der 1. Wert des rechten Kanals, dann der 2. Wert des linken Kanals etc.
Die Abtastwerte werden nun in verarbeitbare Päckchen zur Verfügung gestellt. Dies ist nichts anderes als die Nutzung eines Puffers, beispielsweise mit 4096 Abtastwerte. Die HW, zusammen mit den Audiotreibern, stellt sicher dass nahtlos ein Puffer nach dem anderen zur Verfügung steht.
Ein voller Puffer wird an eine verarbeitende SW mit unterschiedlichen Mechanismen signalisiert.
Unter Windows wird ein Ein- oder Ausgabekanal als Device bezeichnet. Hier ist dies der Mikrophoneingang der Soundkarte. Alle genannten Parameter werden jeweils für einen Kanal festgelegt: Abtastrate, Kanalanzahl, Puffergröße, Typ der Datenwerte und ggf. mehr.
Welche Datenmenge muss ein Programm innerhalb welcher Zeit verarbeiten können?
Bei einer Abtastrate von 44,1 kHz steht alle 0,0227 Millisekunden ein Abtastwert zur Verfügung. Nach 4096 Abtastwerten, bzw. nach 92,9 Millisekunden ist der Puffer voll. Jetzt erfolgt die Signalisierung an eine die Daten verarbeitende SW. Diese SW liest den Puffer in einem Block aus und verarbeitet die 4096 Abtastwerte. Die SW muss demnach performant genug sein alle Aufgaben innerhalb dieser 92,9 Millisekunden durchzuführen, denn dann erfolgt die Signalisierung des nächsten vollen Puffers.
Schafft die SW dies nicht, gehen Abtastwerte verloren. Wird der Puffer vergrößert, ergibt sich eine längere Verarbeitungszeit. Gleichzeitig stehen aber mehr Daten zur Verarbeitung an, z. B. 8192 Abtastwerte bei doppelter, möglicher Verarbeitungszeit.
Des Weiteren verlängert sich der Zeitraum zwischen analogem Auftreten des Signals am Mikrophon und einer Weiterverarbeitung, da der Puffer erst gefüllt werden muss. Dieser Zeitraum wird als Latenz bezeichnet und stört bei einer Nutzung eines Programms zum Teil stark. Bei einer Frequenzabstimmung eines SDR vergeht beispielsweise eine gewisse Zeit, bis das neu abgestimmte Signal als Audiosignal erscheint.
Mit dieser Latenz haben systembedingt alle digitalen, Signal verarbeitenden Systeme zu kämpfen. Bei einer Live-Übertragung eines Fußballspiels schreien die Zuschauer mit alten, analogen Fersehern bereits Tor während bei DVB-C, DVB-S und DVB-T der Ball gerade erst ins Tor geht. Grund ist die Latenz der digitalen Signalverarbeitung.
Der beschriebene Signalweg von der Soundkarte zur Anwender-SW ist vereinfacht, reicht aber für eine Betrachtung in die Praxis vollkommen aus. In der Realität erstreckt sich der Datenverkehr über mehrere Ebenen des Betriebssystems. MSE, DirectX, WDK, ASIO und andere Audiosubsysteme sind hier anzusiedeln.
Diese Komponenten benötigen ebenfalls eine gewisse Zeit für die Verarbeitung. Auch hier tritt Latenz auf. ASIO als Audiosubsystem von Steinberg (Musikbranche) ist auf eine geringste Latenz optimiert. Es ist aber zu berücksichtigen, dass die Latenz der Anwender-SW hier Additiv zu sehen ist.
Zurück zum Beispiel. Die 4096 Abtastwerte des Puffers werden nun verarbeitet, z. B. Tiefpass gefiltert. Die gefilterten 4096 Abtastwerte werden entsprechend der Aufnahme einem Ausgabepuffer eines Ausgabekanals der Soundkarte zur Verfügung gestellt. Der HW/dem Ausgabekanal wird ein voller Puffer signalisiert, bzw. beim Einlesen eines Puffers wird direkt ein anderer, vorher verarbeiteter Puffer zurückgegeben. Die HW mit D/A-Wandler samt einiger SW-Komponenten sorgen dafür, dass mit einer eingestellten Abtastrate Analogsignale erzeugt werden, die über einen Lautsprecher wiedergegeben werden können.
Am einfachsten ist es, die Abtastrate des Eingangskanals und des Ausgabekanals gleich zu setzen. Eine Abtastratenkonvertierung soll hier nicht besprochen werden.
Damit haben wir den Basis-Audiozug eines SDR vollständig.
I und Q Analogsignale werden in durch die Puffergröße vorgegebene, digitalisierten Päckchen von Zahlenwerten in einem definierten Zeitraum zur Verfügung gestellt, dann irgendwie digital verarbeit, um daraufhin über den Ausgabepuffer mit D/A-Wandlung als Analogsignal ausgegeben zu werden.