20.08.2013, 12:32 AM
Wie erklärt sich meine Abwesenheit in den letzten Tagen? Viel Software, Kaffee und Zigaretten.
Als erstes habe ich mal recherchiert. Was machen eigentlich andere, um Lautsprecher o.ä. zu vermessen?
Was ist das tolle an der Methode? Die Impulsantwort besteht aus einem rein linearen Anteil und den Harmonischen, wobei selbige bei negativen Zeiten landen und so total einfach weggefensert oder separat betrachtet werden können.
Vgl.:
Direkt von Farina (AES-Paper)
Was wird kommerziell damit gemacht
Berechnung des Wasserfalls aus Impulsantwort (Farina) und pseudo-Wavelets
Also habe ich mal losgelegt. Da ich zu faul was die lineare Faltung selber zu implementieren habe ich auf ALGLIB zurückgegriffen. Die freie Version steht unter der GPL, das passt.
Dann habe ich mir Gedanken um die Darstellung gemacht. Ich hatte bereits GDI+ (da muss man alles selber machen) und DirectX (ein einziges Kompatibilitätsdesater) ausprobiert. Da ich aber von der RealTime-Messung zur Einzelmessung übergegangen bin kann ich auch etwas weniger performante Bibliotheken in Betracht ziehen. System.Windows.Forms.DataVisualization.Charting passt.
Jetzt braucht eine solche Software auch noch einen gewissen vorgegebenen Ablauf, weil ohne Daten kann ich nichts anzeigen. Ja gut, hier ist .net eine echte Hilfe - keine Api-Calls, einfach Fenster zeichnen.
Es geht los mit einer (noch leeren) Einführungsseite.
Im nächsten Schritt klickt man auf "Einpegeln". Es wird ein Testsignal ausgegeben, man sieht zwei "Oszis", der Maximalausschlag liegt bei 0dBfs (es wird fix mit 44800kHz und 16bit gesampelt). ToDo: Trigger
Durch einen weiteren Klick auf "Einpegeln" gelangt man zur Messung.
Das Ganze ist unspektakulär. Die Messung läuft und man wird aufgefordert direkt zu speichern. In der Datei steckt die normierte Impulsantwort, die Position deren Maximums (das mit dem Laufzeitenausgleich durch Kreuzkorrelation habe ich wieder seinlassen, da überflüssig) und das aufgenommene Messignal. Die Dateien sind noch etwas groß, da z.b. die Impulsantwort 2^18 lang ist und plain text (XML-Serialisation - ich liebe .net) gespeichert wird. Da muss noch ein bisschen zip ran und wir haben statt 15Mb 800kb.
Hat man gespeichert, erlaubt es einem die Ablaufsteuerung, die gerade gemachte (oder auch eine andere) Messung zu laden.
Dabei werden die interessanten Infos aus der Impulsantwort extrahiert, usw.
Weckome to the jungle - äh Schlaraffenland
Wunderschöne Plots mit gefühlten 2 Zeilen Code - .net
Zu sehen sind 50ms in 32 Schritten
Zum Vergleich: eine Messung (gelb!) mit SMAART v6
ToDo:
Als erstes habe ich mal recherchiert. Was machen eigentlich andere, um Lautsprecher o.ä. zu vermessen?
- MLS ist bekannt aus Zeiten, als Rechenzeit Gold war - überholt.
- DualFFT mit Rauschen kannte ich aus dem PA-Bereich (z.B. SMAART) - praktisch, aber schlichtes SNR.
- Die Ende '90 / Anfang '00 von Angelo Farina vorgestellte log-swept-sine-Methode scheint alle "drawbacks" der Vorgänger (ich hab zu viele englische Papers gelesen ) auszumerzen und ist beinahe state-of-the-art.
- Absolut "hot topic" sind Wavelets
Was ist das tolle an der Methode? Die Impulsantwort besteht aus einem rein linearen Anteil und den Harmonischen, wobei selbige bei negativen Zeiten landen und so total einfach weggefensert oder separat betrachtet werden können.
Vgl.:
Direkt von Farina (AES-Paper)
Was wird kommerziell damit gemacht
Berechnung des Wasserfalls aus Impulsantwort (Farina) und pseudo-Wavelets
Also habe ich mal losgelegt. Da ich zu faul was die lineare Faltung selber zu implementieren habe ich auf ALGLIB zurückgegriffen. Die freie Version steht unter der GPL, das passt.
Dann habe ich mir Gedanken um die Darstellung gemacht. Ich hatte bereits GDI+ (da muss man alles selber machen) und DirectX (ein einziges Kompatibilitätsdesater) ausprobiert. Da ich aber von der RealTime-Messung zur Einzelmessung übergegangen bin kann ich auch etwas weniger performante Bibliotheken in Betracht ziehen. System.Windows.Forms.DataVisualization.Charting passt.
Jetzt braucht eine solche Software auch noch einen gewissen vorgegebenen Ablauf, weil ohne Daten kann ich nichts anzeigen. Ja gut, hier ist .net eine echte Hilfe - keine Api-Calls, einfach Fenster zeichnen.
Es geht los mit einer (noch leeren) Einführungsseite.
Im nächsten Schritt klickt man auf "Einpegeln". Es wird ein Testsignal ausgegeben, man sieht zwei "Oszis", der Maximalausschlag liegt bei 0dBfs (es wird fix mit 44800kHz und 16bit gesampelt). ToDo: Trigger
Durch einen weiteren Klick auf "Einpegeln" gelangt man zur Messung.
Das Ganze ist unspektakulär. Die Messung läuft und man wird aufgefordert direkt zu speichern. In der Datei steckt die normierte Impulsantwort, die Position deren Maximums (das mit dem Laufzeitenausgleich durch Kreuzkorrelation habe ich wieder seinlassen, da überflüssig) und das aufgenommene Messignal. Die Dateien sind noch etwas groß, da z.b. die Impulsantwort 2^18 lang ist und plain text (XML-Serialisation - ich liebe .net) gespeichert wird. Da muss noch ein bisschen zip ran und wir haben statt 15Mb 800kb.
Hat man gespeichert, erlaubt es einem die Ablaufsteuerung, die gerade gemachte (oder auch eine andere) Messung zu laden.
Dabei werden die interessanten Infos aus der Impulsantwort extrahiert, usw.
Weckome to the jungle - äh Schlaraffenland
Wunderschöne Plots mit gefühlten 2 Zeilen Code - .net
Zu sehen sind 50ms in 32 Schritten
Zum Vergleich: eine Messung (gelb!) mit SMAART v6
ToDo:
- Wasserfall mit Wavelets (die ich mit der Impulsantwort falte, siehe Link oben)
- die Geschichte mit der Phase (ich habe da schon eine Idee - Stichwort Minimalphase/Allpass)
- Extraktion der harmonischen aus der Imp-Aw (sie link 2)
- Code aufräumen
Pffffffffft. "Da entwich das Vakuum" - Heinrich Physik, 1857.