Für die Impulsantwort alleine braucht es keinen Sweep. Wenn man die Veruzerrungsprodukte separieren will, dann schon (wie oben verschiedentlich angedeutet).
Tut mir leid, hab wohl nicht genau genug gelesen .
Hast du die Unterlagen dazu noch?
Leider nein. Ich müsste aber irgendwo ein Skript haben, wo das beschrieben ist, das müsst ich aber raussuchen. Vlt. komm ich am Wochenende dazu.
Derweil hab ich folgenden MATLAB-Code hingeschustert, dessen Ergebnis nicht zu 100% verkehrt aussieht:
Code:
sweep=chirp(0:1/44100:5,10,5,10000,'logarithmic',-90); %generate sin-sweep
sweepdis=sweep - sweep .* sweep + 0.5; %add 2nd harmonic
corr=xcorr(sweep, sweepdis); %cross-correlate with original
plot(corr);
Einige Einzelheiten zur Farina-Methode finden sich auch hier:
-----------------------------------------------------------------------------
ARTA-user-manual.pdf (Version 1.8.3)
Seite 92 ... 95 (Kapitel 6.1.8)
"Simultaneous Measurement of Frequency Response and Harmonic Distortions"
-----------------------------------------------------------------------------
ARTA-Handbuch-D2.4-Rv0.1.pdf
Seite 143...146 (Kapitel 7.1)
"Messen von harmonischen Verzerrungen mit Gleitsinus"
-----------------------------------------------------------------------------
Ich kenne diese Messmethode zwar nicht unter dem Namen "Farina-Methode", habe sowas aber schonmal erfolgreich auf der Uni programmiert.
Hast du die Unterlagen dazu noch? Kannst ich die ansehen?
Zitat von Violoncello
Wenn mich meine Erinnerung nicht täuscht, dann ist es sehr wohl von Bedeutung, dass das Messsignal ein Sweep ist. Jedenfalls muss es ein Signal sein, das zu jedem Zeitpunkt aus nur einer bekannten Frequenz besteht. Nur dann kann sich nach der Faltung mit der Inversen des Signals eine eindeutige Zeitverschiebung der Verzerrungsprodukte in der Impulsantwort ergeben.
Für die Impulsantwort alleine braucht es keinen Sweep. Wenn man die Veruzerrungsprodukte separieren will, dann schon (wie oben verschiedentlich angedeutet).
Unmathematisch ausgdrückt: Wenn das Anregungssignal ein aufsteigender Sweep mit der Momentanfrequenz f0 ist, dann erscheint die erste Oberwelle (bei f1=2*f0) des Testobjekts zum aktuellen Zeitpunkt t0 wie eine zeitverschobene lineare Antwort auf den Sweep zum Zeitpunkt t1, wo nämlich der Sweep bei der Frequenz f1 angekommen ist.
Ich glaube es war mit einem linearen (oder wars doch ein exponentieller? müsste man sich kurz mathematisch überlegen) Sweep am einfachsten, die Impulsantworten der einzelnen Oberwellen zu trennen, prinzipiell sollte mit entsprechender zeitlicher Verzerrung aber jeder Sweep funktionieren.
Ganz unmathematisch weitergedacht - die scheinbare Zeitverschiebung sollte über alle Grundfrequenzen konstant sein, damit sich ein sekundärer Peak für die ersten Oberwelle ergibt -- also t(2*f0)-t(f0)=const -- was imho nur für einen logsweep zutrift. Richtig soweit?
Ich kenne diese Messmethode zwar nicht unter dem Namen "Farina-Methode", habe sowas aber schonmal erfolgreich auf der Uni programmiert.
Die Bestimmung der Impulsantwort ist einfach, das hat aber mit der Farina-Idee wenig zu tun, und benötigt auch nicht unbedingt einen Sinus-Sweep. Man kann dazu jedes Signal mit einem genügend breitbandigen Frequenzspektrum verwenden (Dirac, MLS, white/pink/red noise, etc.).
Wenn mich meine Erinnerung nicht täuscht, dann ist es sehr wohl von Bedeutung, dass das Messsignal ein Sweep ist. Jedenfalls muss es ein Signal sein, das zu jedem Zeitpunkt aus nur einer bekannten Frequenz besteht. Nur dann kann sich nach der Faltung mit der Inversen des Signals eine eindeutige Zeitverschiebung der Verzerrungsprodukte in der Impulsantwort ergeben.
Unmathematisch ausgdrückt: Wenn das Anregungssignal ein aufsteigender Sweep mit der Momentanfrequenz f0 ist, dann erscheint die erste Oberwelle (bei f1=2*f0) des Testobjekts zum aktuellen Zeitpunkt t0 wie eine zeitverschobene lineare Antwort auf den Sweep zum Zeitpunkt t1, wo nämlich der Sweep bei der Frequenz f1 angekommen ist.
Ich glaube es war mit einem linearen (oder wars doch ein exponentieller? müsste man sich kurz mathematisch überlegen) Sweep am einfachsten, die Impulsantworten der einzelnen Oberwellen zu trennen, prinzipiell sollte mit entsprechender zeitlicher Verzerrung aber jeder Sweep funktionieren.
Das alles hier bitte mit Vorsicht genießen, das ist nur aus dem Gedächtnis hervorgekramt, aber vielleicht hilft es ja weiter. Falls nicht kann ich das nochmal genauer im entsprechenden Sript nachlesen.
Mit Farina-Methode meinst du doch bestimmt die Errechnung der Impulsantwort aus dem aufgezeichneten sweepfile? (Der hat ja noch mehr geschrieben). Dürfte in der lsconv.c zu finden sein.
Jein. Die Bestimmung der Impulsantwort ist einfach, das hat aber mit der Farina-Idee wenig zu tun, und benötigt auch nicht unbedingt einen Sinus-Sweep. Man kann dazu jedes Signal mit einem genügend breitbandigen Frequenzspektrum verwenden (Dirac, MLS, white/pink/red noise, etc.). Die Impulsantwort ergibt sich aus der Dekonvolution des gemessenen Signals und des verwendeten Testsignals. Aber darum geht es hier nicht.
Der Trick an der Farina-Methode mit dem 'exponentiellen' Sinus-Sweep ist, dass bei der Dekonvolution des gemessenen Signals mit dem Testsignal (eben dem Sinus-Sweep) die harmonischen Verzerrungsprodukte als Impulse vor der eigentlichen Impulsantwort erscheinen, was durch die zeitlichen Verteilung der (instantanen) Frequenz im Sinus-Sweep begründet ist. Wenn ich die Farina Publikationen richtig verstehe, soll jeder dieser Impulse der "Imuplsantwort" einer harmonischen Komponente entsprechen.
In meinen Experimenten erscheinen diese Impulse zwar, aber sie entsprechen nicht wie erwartet den Verzerrungskomponenten. Wenn ich ein synthetisches "Messsignal" erzeuge, das nur zweite harmonische Verzerrungen aufweist (ober keine Verzerrungen höherer Ordnung), dann dürfte neben dem Hauptimpuls nur ein einziger "Verzerrungs-Impuls" erscheinen, der eben den Verzerrungen zweiter Ordnung entspricht. In meinen Versuchen treten jedoch viele zusätzliche Impulse auf, die auf Verzerrungen höherer Ordnung deuten würden. Irgendwas ist da krumm, und darum würde ich gerne ein "worked example" anschauen.
Welche Skripte meinst du jetzt genau? MATAA? Oder DRC-FIR (da habe ich allerdings noch keine Octave-Skripte gefunden)?
Die unter drc-x.x.x/source/octave
Mit Farina-Methode meinst du doch bestimmt die Errechnung der Impulsantwort aus dem aufgezeichneten sweepfile? (Der hat ja noch mehr geschrieben). Dürfte in der lsconv.c zu finden sein.
Bin jetzt nicht sicher, ob dir das was nutzt - aber schau dir doch mal DRC-FIR an. Da sind praktisch dieselben Grundwerkzeuge zum Generieren, Abspielen, Aufnehmen, Filtern und Falten von Sweeps als Kommandozeilentools enthalten, wie auch bei esweep.
Diese Grundwerkzeuge (und noch viel mehr) sind in MATAA bereits vorhanden, aber DRC-FIR kannte ich noch nicht. Danke für den Hinweis.
Zitat von ropf
Wenn mich das Gedächtnis nicht täuscht, arbeiten sie ebenfalls nach Farinas Methode. Die Doku des Projektes ist excellent, was für den Sourcecode ähnliches erhoffen lässt.
Viel Erfolg mit deinem MATAA
/ropf
Auf die Schnelle bin ich mit den Source Code noch nicht warm geworden, das ist immer so eine Sache mit fremdem Code. Ich werde die Leute hinter DRC-FIR mal fragen.
Zitat von ropf
PS: dabei sind auch noch eine Reihe Octave-Skripts, die wirklich sehenswerte Bildchen erzeugen.
Welche Skripte meinst du jetzt genau? MATAA? Oder DRC-FIR (da habe ich allerdings noch keine Octave-Skripte gefunden)?
Der Archivlink direkt über deinem Post funzt. Verpätetes Dank dafür an chChrLam.
Bin jetzt nicht sicher, ob dir das was nutzt - aber schau dir doch mal DRC-FIR an. Da sind praktisch dieselben Grundwerkzeuge zum Generieren, Abspielen, Aufnehmen, Filtern und Falten von Sweeps als Kommandozeilentools enthalten, wie auch bei esweep. Wenn mich das Gedächtnis nicht täuscht, arbeiten sie ebenfalls nach Farinas Methode. Die Doku des Projektes ist excellent, was für den Sourcecode ähnliches erhoffen lässt.
Viel Erfolg mit deinem MATAA
/ropf
PS: dabei sind auch noch eine Reihe Octave-Skripts, die wirklich sehenswerte Bildchen erzeugen.
einige kennen das Projekt sicherlich schon aus dem Thread im Hifi-Forum, für alle, die es noch nicht kennen, will ich es hier kurz vorstellen.
Als Messmethode wird dabei ein logarithmischer Sweep nach der Idee von Farina benutzt.
Die Bedienung ist etwas gewöhnungsbedürftig, da es sich um Kommandozeilenprogramme handelt. Dabei wird es auch von meiner Seite aus vorerst bleiben, vielleicht später mal. Es steht aber jedem frei, sich selber eine GUI zu basteln und Code aus diesem Projekt zu verwenden, weil es unter der BSD-Lizenz steht. Im Gegensatz zur allgemein bekannten GPL ermöglicht das sogar den Gebrauch von Code aus diesem Projekt in kommerziellen Produkten.
Die Darstellung der Messkurven wird an Gnuplot delegiert, das ist für die Zwecke bestens geeignet.
Inzwischen läuft das Programm unter Windows, Linux und OpenBSD. MacOS und die anderen *BSD-Varianten (Free- und NetBSD) sollten auch funktionieren, sind aber noch nicht getestet. Den Quellcode kann man sich von der Projektseite bei BERLIOS herunterladen: http://esweep.berlios.de
Nicht wundern, auf der Seite gibt es nichts zu sehen, man wird automatisch weitergeleitet. Der Quellcode sollte sich mit Hilfe des Makefiles unter OpenBSD sofort kompilieren lassen (und vermutlich auch unter NetBSD, die beiden sind sich in manchen Beziehungen sehr ähnlich). Wer es unter Linux bauen möchte, bitte melden, das erfordert zwei Änderungen im Makefile und ein paar Abhängigkeiten.
Eine Windows-Version stellt freundlicherweise tiki bereit (93kB):
Ich möchte Euch bitten, das Programm wenigstens mal auszuprobieren und ein kurzes Statement abzugeben. Besonders interessiert mich vor allem, ob es überhaupt auf jedem PC läuft.
\Edit
gebt auch mal bitte unsinnige Sachen wie negative Werte, Zahlen vermischt mit Buchstaben usw. ein. Ich glaube zwar, dass ich alle Benutzereingaben abgefangen und das meiste getestet habe, aber zwei Augen sehen mehr als eines.
Gruß
Cpt.
Das ist ein alter Thread, finde ich aber SEHR interessant, weil open source und Plattformübergreifend. Ich versuche zur Zeit, die Farina-Methode in meine Messsoftware zu implementieren (MATAA, http://audioroot.net/mataa-mats-audio-analyzer ). Die Original-Publikation von A. Farina ist stellenweise leider etwas ungenau und beschreibt die Methode nur mit Figuren und (unpräzisem) Text. Jedenfalls ist die Farina-Beschreibung ungenügend, um die Methode vollständig zu implementieren.
Darum würde mich der esweep Code zur Farina-Methode sehr interessieren. Leider scheint der angegebene Link tot zu sein. Kann mir jemand weiterhelfen?
Die esweep Seite auf berlios gibbet leider nicht mehr, aber auf sourceforge ist es noch zu finden.
Die Version 0.4 hab ich (nach anpassung einiger Pfade im Makefile) kompiliert bekommen. Es wird aber nur eine esweep.so erzeugt, und die TCL Oberfläche will anscheinend ein executable ...
Hat irgendjemand ne Doku gesaved? Der Cpt. war ja schon länger nicht mehr hier.
Gibt es noch Alternativen für Impedanzmessungen, die nativ unter Linux laufen?
muß leider mitteilen, daß ich Version 0.4 nicht unter MacOSX Leopard installiert bekommen habe. Habe jetzt auch nur eine Stunde probiert. Hauptproblem ist Tcl. Zwar habe ich ein Tclpaket (Tcl/Tk Aqua 8.4.10) installiert, es kommen aber jede Menge Fehlermeldungen, daß diverse "_Tcl_..." Symbols nicht definiert sind. (Übrigens ein Grund, warum ich diese Tcl-Geschichten nicht mag, jedesmal gibt es damit Ärger... )
Ich vermute, daß im Makefile irgendein Parameter fehlt. Wenn ich an LFLAGS -ltcl anhänge, ist das Problem mit den "_Tcl_..." gelöst, dann gibt es nur noch die Fehlermeldung
Undefined symbol:
"_main", referenced from:
start in crt1.10.5.o
Muß nochmal gucken woran das jetzt liegen könnte. Werde nochmal ausprobieren, ob man das Ganze unter Fedora kompiliert bekommt. Irgendwie fehlt mir momentan aber der Antrieb zu solchen Fummeleien, habe damit gerade genug auf der Arbeit zu tun, kann also ein wenig dauern.
ich habe eine Mailingliste eingerichtet, auf der sich trefflich diskutieren lässt (vor allem übersichtlicher als hier). Die ist für Nutzer gedacht, also Fragen zur Verwendung der Programmbibliothek, Vorstellung eigener Skripte, Fragen zu bestehenden Skripten, etc.
Original geschrieben von Moppel
Wegen dem Cepstrum: Damit kann man Gegenstände, die um der Box herum stehen, messtechnisch erfassen, oder?
ja, das lässt sich damit machen.
In Kurzform: wenn irgendwo eine Reflexion vorkommt dann führt das zu einem oszillierenden Frequenzgang. Mit dem Cepstrum berechnet man das Spektrum dieser Schwingung und kann dadurch auf die Verzögerung der Reflexion schließen.
Inzwischen ist die Analysefunktion aber wieder aus dem GUI raus. Vor allem, weil man ja sowieso die Impulsantwort misst und darauf ebenfalls gut die Reflexionen sehen kann. Der Informationsgewinn durch die Cepstrum-Analyse war nicht besonders hoch.
Beim Besuch unseres Forums werden Cookies gesetzt. Dies sind kleine Textdateien, die lokal auf Ihrem Rechner in den Browserverlauf gespeichert werden. Die auf unserer Forums-Website eingesetzten Cookies sind technisch erforderlich und gewährleisten den Betrieb und die Komfort-Funktionalitäten des Forums.
Während Ihres Forum-Besuchs werden keine Cookies zu Marketingzwecken oder für Statistiken und Analysen gesetzt. Auch werden keine Daten an Dritte übermittelt.
Detaillierte Informationen zu unserer Verarbeitung von personenbezogenen Informationen erhalten Sie in unserer Datenschutzerklärung.
Wenn Sie auf „Einverstanden“ klicken, stimmen Sie unserer Datenschutzerklärung und dem Einsatz von technisch erforderlichen Cookies zu.
Einen Kommentar schreiben: