Linux-PC als preiswertes Audio-Messsystem

High Fidelity

von Martin Gräfe
Erschienen im Linux-Magazin 2006/01

Der Autor stellt die sehr preiswerte Hardware und seine kostenlose Software vor, mit der er Impedanzen, Frequenzgänge und Klirrfaktoren von Lausprechern und anderen elektroakustischen Systemen misst. Den Kern bildet eine übliche Soundkarte, die unkonventionell verschaltet ist.

Billige Lautsprecher klingen normalerweise auch billig, Stichwort Brüllwürfel. Konstruktionsbedingt ist ihr Frequenzgang von zahlreichen Resonanzen geprägt - tragbare Transistorradios vermitteln akustisch einen Eindruck vom Problem. Die Konstrukteure von Lautsprecherboxen können aber Maßnahmen treffen, um trotz finanziell günstiger, aber akustisch ungünstiger Lautsprecher einen vergleichsweise gleichmäßigen Frequenzgang zu erreichen. Dazu fahren sie gewöhnlich Messtechnik für die elektroakustischen Größen auf, die zwischen 10000 und 50000 Euro kostet, bekannte Hersteller solcher Maschinen sind Wayne Kerr und Agilent.

Darum entstand die Idee, die Soundkarte eines PC für die Messung der Signale wie auch für die Erzeugung der Testsequenzen zu nutzen. Die Auflösung (Quantisierung) und die Abtastfrequenz gängiger Karten sind für diesen Zweck nämlich absolut ausreichend. Das System sollte Übertragungsfunktion, Impedanz und Klirrfaktor elektronischer und elektroakustischer Komponenten messen - ganz wie seine teuren Vorbilder. Das Projekt gelang, der Artikel stellt es vor.

Am Anfang stand eine Praktikumsarbeit, die untersuchen sollte, ob sich die Soundkarte eines PC mit etwas zusätzlicher Hardware dazu eignet, Impedanzen im Audiofrequenzbereich zu messen. Auf diese Weise würden sich beispielsweise die Resonanzfrequenz von Lautsprechern bestimmen lassen.

Das System besitzt inzwischen eine grafische Benutzerschnittstelle und wird in der Entwicklung und Optimierung von Audiosprechstellen eingesetzt. Zum Ausmessen eines Lautsprecherfrequenzgangs bedarf es außerdem eines Elektret-Kondensatormikrofons mit passendem Mikrofonvorverstärker, die Kosten dafür liegen unter 100 Euro.

Ganz ohne Theorie geht's wirklich nicht

Die einfachste Methode zur Bestimmung einer frequenzabhängigen Übertragungsfunktion besteht darin, ein Sinussignal an den Eingang des Systems zu legen und die Amplitude des Ausgangssignals zu messen. Das Verhältnis zwischen Eingangs- und Ausgangsamplitude ergibt den Übertragungsfaktor des Systems für die angelegte Frequenz. Wer auf diese Weise den Frequenzgang eines Lautsprechers präzise ermitteln will, muss die Messung für mehrere hundert Frequenzen absolvieren. Das dauert jedoch gern einige Minuten, selbst bei einem automatischen Messsystem.

Mit ein wenig nachrichtentechnischem Know-how lässt sich das Ganze um ein Vielfaches beschleunigen: Statt das Übertragungsverhalten eines Systems Frequenz für Frequenz nacheinander zu messen, kann man den Frequenzgang für alle Frequenzen gleichzeitig messen. Dazu legt der Tester an den Eingang das Systems ein breitbandiges Frequenzgemisch an, dessen Spektrum er kennt.

Nachrichtentechnisch zerlegen

Am Ausgang misst er dann die Antwort des Systems und errechnet daraus den Frequenzgang. Um die Amplitude der einzelnen Frequenzen wieder aus dem Frequenzgemisch herauszulesen, zerlegt eine diskrete Fouriertransformation (DFT) das gemessene Signal in seine Frequenzanteile, was für einen PC keine wirkliche Herausforderung ist. Die diskrete Fouriertransformation ist eine Sonderform der allgemeinen Fouriertransformation und gilt für zeitdiskret abgetastete periodische Signale. Sie lässt sich in C durch zwei verschachtelte For-Schleifen realisieren (Listing 1).

Listing 1: Diskrete Fouriertransformation

01 # include <math.h>
02 
03 int n,    // Anzahl der Samples
04     i, k;
05 double real, imag,
06        samples[MAX_N],
07        magnitude[MAX_N], phase[MAX_N];
08 
09 ...
10 
11 for (i=0; i<(n-1)/2; i++)
12 {
13   real = 0.0;
14   imag = 0.0;
15   for (k=0; k<n; k++)
16   {
17     real += samples[k]*cos(2*M_PI*i*k/n);
18     imag -= samples[k]*sin(2*M_PI*i*k/n);
19   }
20   magnitude[i] = 2.0/n * sqrt(real*real+imag*imag);
21   phase[i] = atan2(imag, real);
22 }

Das Verhältnis zwischen dem Ausgangsspektrum Y(f) und dem Spektrum des Eingangssignals X(f) entspricht der Übertragungsfunktion H(f) des Systems (siehe Abbildung 1). Die Berechnung des Quotienten zwischen Ausgangs- und Eingangsspektrum muss natürlich berücksichtigen, dass beide Spektren mathematisch komplex sind, also Real- und Imaginärteil beziehungsweise Betrag und Phase enthalten.

Abbildung 1:
Berechnung des Frequenzgangs H(f) eines Systems mit Hilfe der diskreten Fouriertransformation (DFT).

Vorsprung durch die Technik des Vogelzwitscherns

Als Frequenzgemisch dient häufig weißes Rauschen [5], da es den gesamten Audiofrequenzbereich gleichmäßig abdeckt. Rauschsignale enthalten jedoch im Verhältnis zum Effektivwert sehr hohe Signalspitzen, die elektrische oder akustische Komponenten übersteuern oder sogar zerstören können. Um das zu vermeiden, reduziert man üblicherweise den Pegel des Eingangssignals. Das geht aber wiederum zu Lasten der Messgenauigkeit, weil der Fremdspannungsabstand - die Differenz des Messsignals zu den immer vorhandenen Störgrößen - ebenfalls abnimmt.

Wie Versuche gezeigt haben, eignen sich die aus der Modulationstechnik bekannten Chirp-Signale deutlich besser für diese Aufgabe. Sie bestehen aus einer Schwingung mit rasch zunehmender Frequenz, deren zeitlichen Verlauf Abbildung 2 oben zeigt. Sie hören sich wie ein Vogelgrippe-resistentes Zwitschern an (lautmalerisch im Englischen "chirp"). Ein solches Signal lässt sich leicht erzeugen und enthält ein breites Frequenzspektrum mit nahezu gleicher Amplitude aller Frequenzanteile.

Abbildung 2:
Zeitlicher Verlauf (oben) und Spektrum (unten) eines Chirp-Signals.

Weil mit diesem Prinzip gewissermaßen alle Frequenzen gleichzeitig messbar sind, lässt sich der gesamte Frequenzgang eines Übertragungssystems in weniger als einer Sekunde bestimmen. Das Verfahren erfordert allerdings eine gute Linearität des Systems (siehe Kasten "Begriffe schnell erklärt") - Nichtlinearitäten verfälschen den Frequenzgang erheblich mehr, als es bei der Messung mit reinen Sinussignalen der Fall ist.

Begriffe schnell erklärt

Die Übertragungsfunktion (Frequenzgang) spiegelt das frequenzabhängige Verhältnis H(t) zwischen Ausgangssignal y(t) und Eingangssignal x(t) eines elektrischen oder akustischen Systems wider. Eine Übertragungsfunktion umfasst den Betrag (das Amplitudenverhältnis) und die Phasenverschiebung zwischen Eingang und Ausgang des Systems. Bei einem Lautsprecher entspricht die angelegte Spannung dem Eingangssignal, während der erzeugte Schalldruck das Ausgangssignal darstellt. Bei einem Mikrofon ist es umgekehrt.

Das Spektrum eines Signals ist seine Darstellung im Frequenzbereich. Die Visualisierung der im Signal enthaltenen Frequenzanteile erfolgt in Betrag und Phase über der x-Achse (Frequenzachse).

Die Fouriertransformation beschreibt eine Integraltransformation, die ein Signal x(t) vom Zeitbereich in den Frequenzbereich X(f) transformiert. Sie ist kein numerisches, sondern ein analytisches Verfahren. Das heißt, die Transformation muss das Signal als mathematische Funktion beschreiben.

Die diskrete Fouriertransformation (DFT) ist für periodische Signale von der allgemeinen Fouriertransformation abgeleitet. Als rein numerisches Verfahren eignet sich für die Analyse von Messdaten.

Die Fast Fourier Transform (FFT, schnelle FT) ist eine Sonderform der DFT. Sie führt zum gleichen Ergebnis, benötigt aber deutlich weniger Multiplikationen. Die FFT entstand in den 60er Jahren, als Prozessoren für Multiplikationen noch erheblich mehr Rechenschritte brauchten als für Additionen. Sie findet Anwendung in Echtzeitsystemen, die eine schnelle Signalverarbeitung erfordern. Im Gegensatz zur DFT muss die Anzahl der Abtastwerte bei der FFT einer Zweierpotenz 2n entsprechen.

Linearität ist eine Voraussetzung für die Anwendbarkeit der Fouriertransformation zur Analyse des Frequenzspektrums. Ein System ist dann linear, wenn die Summe von zwei Signalen am Eingang des Systems f(x+y) am Ausgang die Summe der beiden Ausgangssignale f(x)+f(y) erzeugt. Das Übertragungsverhalten ändert sich also nicht, wenn das System mehrere Signale gleichzeitig überträgt. Nichtlinearitäten in akustischen Systemen entstehen beispielsweise als Folge von Luftverwirbelungen in kleinen Spalten und Hohlräumen oder durch die Übersteuerung der beteiligten elektroakustischen Komponenten.

Die Impedanz dient als Messgröße für frequenzabhängige Widerstände. Sie ist komplex entweder als Betrag (Z, Scheinwiderstand) und Phase oder aber als Real- (Wirkwiderstand) und Imaginärteil (Blindwiderstand) darstellbar. Beispiele: Ein ohmscher Widerstand weist eine rein reellwertige, frequenzunabhängige Impedanz auf, deren Realteil exakt dem aufgedruckten Ohmwert entspricht. Dagegen besitzt ein Kondensator eine rein imaginäre und frequenzabhängige Impedanz, deren Realteil gleich null ist.

Schickt man ein Sinussignal durch ein nicht-lineares System, ist das Ausgangssignal nicht mehr sinusförmig - es entstehen Oberwellen mit Vielfachen der Grundfrequenz (Harmonische). Diesen (meist ungewollten) Effekt nennt man Klirren. Der Klirrfaktor ist ein Maß für die Nichtlinearität. Er berechnet sich als Verhältnis des Effektivwerts der Oberwellen am Ausgang zum Effektivwert des gesamten Ausgangssignals. Je größer der Klirrfaktor ist, desto nicht-linearer ist das System. Bei linearen Systemen ist der Klirrfaktor null.

Von der Theorie zu Linux

Kernaufgabe der Messfunktion ist es, das Chirp-Signal abzuspielen und zeitgleich (!) das Ausgangssignal der Messstrecke aufzuzeichnen. Leider ist es durch die Pufferung der Soundkarten und der damit verbundenen Latenzzeiten (siehe [1]) nicht ohne weiteres möglich, exakt synchron abzuspielen und aufzuzeichnen. Trotzdem bedarf es unter Linux keiner besonderen Treiber - mit einem Trick bewältigt dies selbst das gute alte Open Sound System (OSS, [1]).

Der erste Schritt besteht darin, das Device »/dev/dsp« doppelt zu öffnen, einmal read-only und zugleich write-only. Das Hauptprogramm erzeugt dann mit »fork()« einen zweiten Prozess, der das Chirp-Signal abspielt, während der Elternprozess es am Ausgang des Systems aufzeichnet. Der eigentliche Trick: Das Programm erzeugt eine Stereosignal, das auf dem linken Kanal aus dem eigentlichen Chirp besteht und einem Sync-Impuls auf dem rechten Kanal.

Während der linke Line-out an dem zu messenden Übertragungssystem angeschlossen ist, kommt der rechte Kanal von Line-out direkt an Line-in. Als Folge ist der Sync im rechten Kanal der aufgezeichneten Sequenz wiederzufinden, was auch eine exakte Synchronisation ermöglicht, die von der Messstrecke unabhängig ist.

Soundkarte kalibrieren

Auch bei den besten Soundkarten weicht das tatsächlich erzeugte Signal von der abgespielten digitalen Wellenform ab - nicht zuletzt aufgrund des analogen Tiefpassfilters am Ausgang jedes Digital-Analog-Wandlers. Auch die vom Rechner bei der Messung aufgezeichnete Sequenz entspricht nicht exakt dem Signal am Eingang der Soundkarte, da auch hier so genannte Antialiasing-Filter die Signale für die Analog-Digital-Wandlung aufbereiten. Beide Effekte gehen unmittelbar als Messfehler ins Gesamtsystem ein, eine Kompensation tut Not.

Die exakte Messung erfordert zunächst die Kenntnis darüber, wie die Soundkarte selbst die Signale verfälscht, um den Einfluss der Soundkarte aus der Messung herauszurechnen. Das vorgestellte Programm bietet dazu eine Kalibrierungsfunktion an. Es fordert den Benutzer dazu auf, Aus- und Eingang der Soundkarte zu verbinden, und führt dann eine Referenzmessung durch. Auf diese Weise kompensiert das Programm Unregelmäßigkeiten im Frequenzgang der Messhardware.

Grafische Ausgabe

Nach dem Messvorgang und der Berechnung des Spektrums der Übertragungsfunktion erfolgt die grafische Visualisierung des Frequenzgangs. Hierzu nutzt das Programm das Werkzeug Gnuplot [3], das nicht nur alle erforderlichen Funktionen - etwa logarithmische Achsen - bietet, sondern auch sehr einfach im Batch-Modus zu betreiben ist. Mit

    stream = popen("gnuplot", "w");

gestartet senden »fprintf()«-Aufrufe die Kommandos zur Darstellung des Diagramms direkt an Gnuplot. Abbildung 3 zeigt ein Beispiel dafür.

Abbildung 3: Gnuplot arbeitet als Ausgabewerkzeug für das vorgestellte Projekt. Hier visualisiert es eine Übertragungsfunktion. Die anderen Fester gehören zum GUI der vorgestellten Anwendung.

Weitere Messmöglichkeiten

Neben der Übertragungsfunktion misst das Programm auch Impedanzen von frequenzabhängigen elektronischen Bauteilen wie Filterspulen ebenso wie von elektroakustischen Komponenten, beispielsweise Lautsprechern. Denn die Impedanz lässt sich auch als eine Art Übertragungsfunktion betrachten: Eingangs- und Ausgangssignal sind Spannung und Strom am Bauteil, das Verhältnis bildet seine Impedanz. Das vorgestellte Messsystem legt das Chirp-Signal X(f) für die Impedanzmessung über einen definierten Widerstand R an das zu messende Bauteil an und misst die Spannung Y(f) an dem Bauteil. Abbildung 4 zeigt die daraus resultierenden Berechnung der Impedanz Z(f) des Bauteils.

Abbildung 4:
Schaltung zur Messung der Impedanz Z(f) eines Bauteils.

Eine weitere Kenngröße in der Elektronik und Elektroakustik ist der so genannte Klirrfaktor als ein Maß für die nicht-lineare Verzerrung, wie sie beispielsweise bei der Übersteuerung von Systemen entsteht. Für die Messung legt das Programm ein Sinussignal mit einstellbarer Frequenz an das zu messende System an und erfasst den Oberwellengehalt des Ausgangssignals mit Hilfe der diskreten Fouriertransformation. Der Klirrfaktor errechnet sich als Verhältnis des Effektivwerts aller Oberwellen zum Effektivwert des Gesamtsignals.

Hardware im Selbstbau

Voraussetzung für alle Messungen ist eine duplexfähige Soundkarte. Nahezu jede gängige erfüllt diese Anforderung. Ferner muss sie über Line-in- und Line-out-Buchsen verfügen - in dieser Disziplin disqualifizieren sich leider viele Notebooks. Abhilfe schaffen ein Desktop-PC oder ein Notebook mit Dockingstation. Um die Übertragungsfunktion und den Klirrfaktor einfacher Baugruppen zu bestimmen, reicht diese Messanordnung aus Soundkarte und Kabeln bereits aus. Für die Analyse von Lautsprechern bedarf es zusätzlich eines Elektret-Kondensatormikrofons mit passendem Vorverstärker sowie eines Endverstärkers, der den Lautsprecher ansteuert.

Wer Impedanzen messen und zudem das Ganze eleganter gestalten will, sollte sich ein Kästchen mit Hardware bauen (Abbildung 5). Abbildung 6 zeigt das vereinfachte Bild der Schaltung. Sie sorgt für definierte Eingangs- und Ausgangsimpedanzen, stellt einen Differenzeingang zur Verfügung, der durch Masseschleifen verursachte Brummeinstreuungen kompensiert, und enthält auch den Referenzwiderstand R für die Impedanzmessung. Ein detailliertes Schaltbild und der Quelltext des Programms sowie eine Readme-Datei liegen unter [4].

Abbildung 5: Im Hintergrund ist der erste Prototyp der Messanordnung zu sehen. Die Verdrahtung erfolgt auf einer Lochrasterplatine. Im Vordergrund ist die endgültige Version im Gehäuse zu sehen.


Abbildung 6: Das vereinfachte Schaltbild der Messanordnung aus Abbildung 5.

Der Nutzen ist hörbar

Das vorgestellte System analysiert den Frequenzgang eines Lautsprechers sehr genau. Der Designer einer Lautsprecherbox kann aus der Kenntnis der ermittelten Übertragungsfunktion ein digitales Filter entwickeln, das diesen Frequenzgang invers nachbildet, um die Abweichungen des realen Lautsprechers von dem idealen Frequenzgang zu kompensieren. Damit gelingt es ihm, einem mittelmäßigen Brüllwürfel einen durchaus passablen Klang zu entlocken. Dieses (patentierte) Prinzip nennt die Literatur auch Perfect Speaker [6].

Natürlich sind dem Verfahren Grenzen gesetzt: Es wird nie gelingen, aus Lautsprechern für zehn Euro akustisch eine Hi-Fi-Box zu basteln. Dennoch sind in der Praxis erstaunliche Qualitätsverbesserungen drin. Voraussetzung für das digitale Echtzeitfilter ist aber ein Signalprozessor mit mehr als 20 MIPS. (jk)

Infos
[1] O. Frommel, "Hier spielt die Musik": Linux-Magazin 09/05, S. 27

[2] Martin Gräfe, "C und Linux": Hanser Verlag München

[3] Gerhard Fülber, "Der Klassiker": Linux-Magazin 11/1997 und
     [http://northstar-www.dartmouth.edu/doc/gnuplot/]

[4] Software und Schaltplan:
     [ftp://www.linux-magazin.de/pub/listings/magazin/2006/01/Messsystem]

[5] "Method and apparatus for characterizing audio transmitting system",
     United States Patent 6650756: [http://www.freepatentsonline.com/6650756.html]

[6] "System and a method for equalizing an audio sound transducer system",
     United States Patent 4118601: [http://www.freepatentsonline.com/4118601.html]

Der Autor

Martin Gräfe promovierte auf dem Gebiet Mikroelektronik und entwickelt seit 1995 beruflich und privat Simulations- und Berechnungsprogramme unter Linux. Neben mehreren Artikeln veröffentlichte er zwei Fachbücher über Mikroelektronik und C-Programmierung unter Linux.