PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Impulsantwort programmieren



incoggnito2
23.04.2017, 12:30
Servus Zusammen,

hat jemand Erfahrung mit Signalanalyse und Programmierung in Matlab oder Python?
Möchte eine Implusantwort mittels Time-Delay-Spectrometrie berechnen. Auf
(Seite 5 (http://iem.kug.ac.at/fileadmin/media/iem/altdaten/projekte/acoustics/technic/dp_warum/warum.pdf)) findet sich eine Beschreibung des Verfahrens.

Hab das Problem dass ich nicht verstehe wie ich aus der Kreuzkorrelation einen einzelnen Zahlenwert für das Zeitdelay herausbekommen kann.

Freundliche Grüße
Inco

waterburn
23.04.2017, 17:27
Die Kreuzkorrelation ergibt einen Zahlenwert, der die Ähnlichkeit zweier Signale beschreibt.
Wenn man zwei Signale gegeneinander verschiebt verändert sich dieser Wert. Am größten wird dieser Wert, wenn zwei identische Signale exakt übereinander liegen. Wenn man auf die Signalenergie normiert, hat das Maximum bei identischen Signalen den Wert 1.
Wenn es sich bei den zwei zu korrelierenden Signalen um das gleiche Signal handelt, wobei eines dieser Signale zeitverzögert ist, ergibt sich die größte Ähnlichkeit wenn die beiden Signale genau um die Verzögerung verschoben werden.
Handelt es sich nicht um identische Signale, sondern um ein Anregungssignal und die Systemantwort eines zu messenden Systems ergibt sich der größte Wert für die Kreuzkorrelation bei einer Verschiebung die der Latenz des zu messenden Systems entspricht.

Ich hoffe das hilft dir weiter. Die Erklärung ist etwas holprig, aber es ist bei mir auch schon etwas länger her, dass ich mich zuletzt damit beschäftigt habe ;)

Gruß

waterburn

JFA
23.04.2017, 17:50
So richtig verstehe ich Dein Problem nicht. Denn die TDS hat als Ergebnis den komplexen Frequenzgang des Lautsprechers, aus dem sich einfach mittels inverser FT die Impulsantwort berechnen lässt.

Und wenn Du schon die Kreuzkorrelation berechnest, dann kannst Du gleich die Faltung nutzen; die ist praktisch identisch, und außerdem spuckt sie die Impulsantwort sofort aus.

Aber sei es drum. Die Kreuzkorrelation von einem Signal mit sich selber (also die Autokorrelation) liefert bei t=0 einen Dirac. Wenn das Signal um die konstante Zeit T verzögert ist und mit der unverzögerten Version korreliert wird, dann liefert es einen Dirac bei t=T (oder -T, je nachdem wie man die Reihenfolge wählt).

Im Falle der TDS ist das Signal nicht konstant verzögert, sondern auch mit der Gruppenlaufzeit des Lautsprechers beaufschlagt. Es entsteht also kein Dirac, sondern einen "Buckel".

Und da liegt das Problem: es gibt keinen eindeutigen Wert, sofern Du die GLZ nicht kennst. Wenn Du die allerdings schon kennst, dann vermutlich auch schon den komplexen Frequenzgang, und dann ist der ganze Aufwand sowieso nutzlos. Als erste Näherung kannst Du wahrscheinlich das Maximum nehmen. Bei der TDS kann man durch die Wahl des Tiefpassfilters auch ein wenig Unsauberkeit zulassen.

Die TDS ist allerdings auch noch ein Relikt aus vergangenen Zeiten, als man noch keine FFT mit den notwendigen Längen und ausreichender Genauigkeit in hinreichender Zeit berechnen konnte. Mit der Einführung von MLS war das Thema eigentlich erledigt. Heutzutage ist MLS erledigt, weil man die FFT und Faltung schnell genug kann.

incoggnito2
23.04.2017, 19:24
Die Kreuzkorrelation ergibt einen Zahlenwert, der die Ähnlichkeit zweier Signale beschreibt.
Wenn man zwei Signale gegeneinander verschiebt verändert sich dieser Wert. Am größten wird dieser Wert, wenn zwei identische Signale exakt übereinander liegen. Wenn man auf die Signalenergie normiert, hat das Maximum bei identischen Signalen den Wert 1.
Wenn es sich bei den zwei zu korrelierenden Signalen um das gleiche Signal handelt, wobei eines dieser Signale zeitverzögert ist, ergibt sich die größte Ähnlichkeit wenn die beiden Signale genau um die Verzögerung verschoben werden.
Handelt es sich nicht um identische Signale, sondern um ein Anregungssignal und die Systemantwort eines zu messenden Systems ergibt sich der größte Wert für die Kreuzkorrelation bei einer Verschiebung die der Latenz des zu messenden Systems entspricht.

Das hatte ich auch so verstanden ... deswegen hatte ich mit einem Ausgabewert gerechnet ... bekommen habe ich (bei Signalen mit 44100 Stützstellen) einen doppelt so großen Ergebnisvektor. Der Einwurf von JFA erklärt aber warum dass wohl so ist.


Und wenn Du schon die Kreuzkorrelation berechnest, dann kannst Du gleich die Faltung nutzen; die ist praktisch identisch, und außerdem spuckt sie die Impulsantwort sofort aus.

Du meinst die Faltung des Ausgabesignals mit dem Eingangssignal bringt mir direkt die Impulsantwort? ... Die Signale sind doch phasenverschoben :confused:

Was ich in diesem Zusammenhang nicht verstehe, ist was du bei der TDS mit einem Dirac machen willst ...es läuft doch eigentlich ein Sinussweep durch, der mit einem zeitversetzten Cosinussweep verechnet wird, oder hab ich da was falsch verstanden?


Die TDS ist allerdings auch noch ein Relikt aus vergangenen Zeiten, als man noch keine FFT mit den notwendigen Längen und ausreichender Genauigkeit in hinreichender Zeit berechnen konnte. Mit der Einführung von MLS war das Thema eigentlich erledigt. Heutzutage ist MLS erledigt, weil man die FFT und Faltung schnell genug kann.

Jetzt hast du mich neugierig gemacht. Wie würdest du mit Lautsprecher und Mikrofon konkret eine Raumimpulsantwort errechnen?

VG Inco

waterburn
24.04.2017, 05:56
Um aus dem Ausgabesignal dies Systemimpulsantwort zu berechnen musst du das Ausgabesignal mit dem inversen Anregungssignal falten, oder eben im Frequenzbereich die Fouriertransformierte des Ausgabesignals durch die Fouriertransformierte des Anregungssignals teilen.

Das Ergebnis enthält sowohl die Impulsantwort des Lautsprechers als auch die Impulsantwort des Raumes. Wenn die Impulsantwort des Lautsprechers bekannt ist, kannst du die Raumimpulsantwort direkt berechnen.

Ist beides unbekannt, kannst du versuchen durch Fensterung die Lautsprecherimpulsantwort zu separieren. Das funktioniert im Tieftonbereich aber nicht mehr zufriedenstellend.

Ein weiteres Problem bei der Messung der Raumimpulsantwort ist, dass das Abstrahlverhalten des Lautsprechers einen Erheblichen Einfluss auf das Ergebnis hat.

Mir ist nicht ganz klar, was genau du vor hast. Vielleicht kannst du noch etwas mehr dazu erzählen. Wenn wir dein Problem verstehen, können wir dir auch besser helfen.

Gruß

waterburn

josh_cpct
24.04.2017, 10:49
Lautsprecher Impuls im Raum erfassen ist schwer.

Ich habe dazu 3 Teile verwendet.
1. nahfeld Tiefton
2. beamforming 10 zeitlicher addierungen Fernfeld Mittelton
3. Gating im Hochton Fernfeld

Die drei Spektren Zusammengeschnitten ergibt rein Minphasige Impulsantwort des Lautsprechers.
Die Exzessphasige Response lässt sich über Weichennachbildung ungefähr erbasteln, bleibt aber ungenau. Bei Trennung über 1khz gehts mit dem Beamforming.
Daher würde ich eine Punktquelle nehmen.
Da ja aber wie der Vorredner erwähnt das Abstrahlverhalten eh verzerrt, reicht eigentlich ein Tieftöner CB von 1Hz bis Mittelton, was die Messung wesentlich erleichtert oder?

Gruß
Josh

incoggnito2
24.04.2017, 17:03
überarbeite den Text ein letztes Mal ... :rolleyes:


Um aus dem Ausgabesignal dies Systemimpulsantwort zu berechnen musst du das Ausgabesignal mit dem inversen Anregungssignal falten, oder eben im Frequenzbereich die Fouriertransformierte des Ausgabesignals durch die Fouriertransformierte des Anregungssignals teilen.

Verstehe ich, ist auch in der Abschlussarbeit schön erklärt.


Das Ergebnis enthält sowohl die Impulsantwort des Lautsprechers als auch die Impulsantwort des Raumes. Wenn die Impulsantwort des Lautsprechers bekannt ist, kannst du die Raumimpulsantwort direkt berechnen.

Das sagt sich immer so leicht. :D



Ein weiteres Problem bei der Messung der Raumimpulsantwort ist, dass das Abstrahlverhalten des Lautsprechers einen Erheblichen Einfluss auf das Ergebnis hat

Das die Anregung unzureichend ist stimmt in meinem Fall ... für die Methodik ist das aber erstmal nicht so entscheidend... nutze fürs Debuggen sowieso erstmal nur das Notebook.

Im Ausgangspost steht ein Link, da ist die TDS mit einem Signalflussbild erklärt. Sofern ich den Verfasser richtig verstehe, lässt sich mit dem Verfahren die Impulsantwort des Lautsprechers (oder der Übertragungsstrecke) gut rausrechnen. Bin mir aber noch immer nicht schlüssig, wie ich die Signale überhaupt verrechnen muss. Sind das tatsächlich Multiplikationen im Zeitbereich?


1. nahfeld Tiefton
2. beamforming 10 zeitlicher addierungen Fernfeld Mittelton
3. Gating im Hochton Fernfeld

Beamforming kenne ich, aber auf die Idee wäre ich nun nicht gerade gekommen...

Wenn ich es richtig verstehe, wollt ihr mir bisher eher die Methode in Kapitel 2.5 nahe legen. Versuche da die Tage mal was vernünftiges zu coden.
PS: Falls das heutige Code-Schnipsel jemand sehen will, hänge ich das mal in den Anhang... liefert aktuell noch ziemlichen Mist.

Freundliche Grüße
Inco

waterburn
24.04.2017, 19:00
Wie JFA schon geschrieben hat, bietet die TDS Methode keine Vorteile gegenüber der heute gebräuchlichen Methode mittels Rückfaltung mit dem Anregungssignal.

Ich hab mir die Methode angeschaut und versuche mal zu erklären was ich meine verstanden zu haben :rolleyes:

Eigentlich misst die Methode nicht die Impulsantwort, sondern den komplexen Frequenzgang. Dieser lässt sich zwar mathematisch in die Impulsantwort überführen, aber für das Verständnis hilft es sich das bewusst zu machen.

Die Systemantwort wird mit der verzögerten Sinus und Cosinus Anregung multipliziert. Was passiert wenn man zwei sinusfürmige Signale multipliziert kann man anhand der Additionstheoreme feststellen:
https://de.wikipedia.org/wiki/Formelsammlung_Trigonometrie#Produkte_der_Winkelfu nktionen

Werden zwei Sinusse mit der gleichen Frequenz multipliziert entsteht ein DC Anteil und ein Anteil mit doppelter Frequenz. Der DC Anteil wird vom Tiefpassfilter durchgelassen und ist proportional zum Realteil des komplexen Frequenzganges an der fraglichen Frequenz.

Wenn das zu untersuchende System aber eine Phasenverschiebung verursacht, kann die Energie bei der fraglichen Frequenz durch eine Multiplikation mit dem Sinus nicht vollständig erfasst werden. Ein Phasenverschobenes Sinusförmiges Signal lässt sich immer in einen Sinus und einen Cosinus Anteil zerlegen. Der genaue Phasenwinkel ergibt sich aus den Betragsverhältnis der beiden. Wenn der Cosinusanteil des zu untersuchenden Signals mit dem Sinus multipliziert wird, ergibt sich ein Signal mit doppelter Frequenz welches vom nachgeschalteten Tiefpassfilter unterdrückt wird.

Aus diesem Grund wird das zu untersuchende Signal auch noch mit dem entsprechenden Cosinussignal multipliziert. Auch hier ergibt sich ein DC Anteil der zum Imaginäranteil bei der zu untersuchenden Frequenz Proportional ist.

Werden Signale unterschiedlicher Frequenz miteinander multipliziert ergibt sich kein DC Anteil. Liegen zwei Frequenzen aber dicht beieinander ergibt sich eine sehr niedrige Frequenz, die vom Tiefpassfilter nicht vollständig unterdrückt werden kann.

Wenn man sich diese Tatsache vor Augen führt, erkannt man warum die Auflösung im Tieftonbereich eingeschränkt ist. Die Geschwindigkeit des Sweeps muss so schnell sein, dass die Frequenz der reflektierten Schalwelle weit genug von der zu untersuchenden Frequenz entfernt ist. Wählt man die Steigerungsrate, lässt sich dem System nicht genug Tieffrequente Energie zuführen, sodass das Ergebnis im Rauschen versinkt. Reduziert man die Steigerungsrate, lassen sich die Reflektionen aufgrund der endlichen Trennschärfe des Tiefpassfilters nicht mehr vom Direktschall unterscheiden, da ihre Frequenzen zu dicht beieinander liegen.

Wenn du eine Impulsantwortmessung in Matlab oder Python implementieren möchtest, empfehle ich dir die Methode nach Farina.
Ich habe im Studium selbst mal eine rudimentäre Version mit Matlab geschrieben.
Alternativ kannst du mal dir mal Mataa anschauen:
http://audioroot.net/mataa-mats-audio-analyzer/
Ist ein sehr nettes Projekt, ich persönlich hätte eine Realisierung in Python aber besser gefunden als eine in Octave, aber das ist wohl auch Geschmacksache.

Ich hoffe das war jetzt nicht zu wirr geschrieben.

Gruß

waterburn

Edit: Ich behaupte nicht die TDS vollständig verstanden zu haben, aber ich wüsste nicht, wieso sich die Impulsantwort des Lautsprechers rausrechnen lassen sollte. Die Systemantwort wird immer durch die Übertragunsfunktion des Lautsprechers gefärbt sein. Auch bei einer Messung mit einem Dodekaeder muss entzerrt werden.

Alternativ kann man die Impulsantwort eines Raumes auch mit einem Klatschbrett (Wie aus dem Sportunterricht) messen. Aber auch hier ist die Anregung natürlich kein perfekter Dirac Impuls.

incoggnito2
24.04.2017, 19:41
Danke für die ausführliche Antwort. Bin noch dabei Python zu lernen. Für meine Anwendungen wird es wohl nach dem Studium Matlab vollständig ablösen.

Hab schon Messungen der Impulsantwort aus Luftballon und Schreckschusspistole... die dienen dann zum Vergleich. :D

Grüße Inco

JFA
24.04.2017, 20:19
Ich behaupte nicht die TDS vollständig verstanden zu haben

Vollständig genug.

Im Grunde handelt es sich dabei um die Demodulation (Multiplikation mit Cosinus/Sinus) eines quadraturmodulierten Signals.