15.08.2013, 09:52 AM
Gut, ich denke ich weiß jetzt wo ich hin will. Schwierig sind offenbar Phasenmessungen, da bei einer Totzeit im System (LS->Luft->Messmikro) Die Phase so früh fällt, das man nur noch Sprünge sieht.
Die ursprüngliche Idee des Programms war es ja ein kontinuierliches rosa Rauschen auszugeben und kontinuierlich die Übertragungsfunktion zu berechnen. Das ist ganz nett, um zusehen, was passiert, wenn man gerade am Equalizer dreht. Die Funktion will ich auf jeden Fall beibehalten.
Der Aufnahme-Ringpuffer war dabei deutlich länger als die zu berechnenden FFTs. Um die Laufzeit auszugleichen habe ich einfach y(t) von einer um die entsprechende Anzahl Samples weiter "hinten" liegende Position aus dem Puffer geholt. Das musste ich aber manuell einstellen und war unschön.
hier nochmal der Aufbau. In der Aufnahme steckt dann z.b. u(t) linbks und y(t) rechts. Der Prüfling oder DUT ist hier eine Mischpult->AMP->LS->Mikro->Preamp Anordnung.
Ich will präzise Lautsprecher vermessen können.
Das sieht dann nach meiner Vorstellung so aus:
-Ich starte die Aufnahme (z.b. 2^16+n Samples)
-Ich starte die Ausgabe eines Sinussweeps (z.b. 2^16 Samples)
-Die Ausgabe endet
-Die Aufnahme endet
Wie sehen nun die beiden gesampelten Signale aus?
Am Anfang ist immer Ruhe, da zw. den ersten beiden Punkten etwas (undefinierte) Zeit vergeht. Nach dieser undefinierten Zeit habe ich Werte für u(t). Werte für y(t) beginnen dann erst um die der Laufzeit entsprechenden Anzahl an Samples später.
Ziel ist es nun die beiden Signale so zu bearbeiten, dass ich nur noch 2 2^16-lange Arrays habe, bei denen es sofort bei 0 losgeht.
Dazu berechne ich von beiden Aufnahmekanälen zunächst die FFT, danach U*(f) * Y(f) und erhalte dadurch das Kreuzleistungsspektrum. Davon die iFFT ist die Kreuzkorrelation der beiden Signale. Die muss (laut Theorie) beim Laufzeitunterschied einen Peak haben.
Dann kann ich bei y(t) erst einmal vorne so viele Samples "abschneiden" wie die Laufzeit lang war.
Jetzt will ich u(t) und y(t) auf Länge 2^16 bringen. Dazu berechne ich die KKF aus u(t) und des ursprünglichen (berechneten) Sweeps.
Ich erhalte wieder die Laufzeit, schneide die entsprechende Anzahl an Samples bei u(t) und y(t) vorne ab. Danach beschneide ich die Länge auf 2^16.
Diese beiden Arrays will ich dann als "Rohdaten" einer Messung auch exportieren können.
Danach geht es "klassisch" weiter. Amplitudengang, Phasengang (wenn die Phase weiter wie -180° fällt gibt es immer noch Sprünge, diese will ich auch noch sauber verarbeiten), Zeit/Frequenz-Intensitäts-Plot per STFT.
Die ursprüngliche Idee des Programms war es ja ein kontinuierliches rosa Rauschen auszugeben und kontinuierlich die Übertragungsfunktion zu berechnen. Das ist ganz nett, um zusehen, was passiert, wenn man gerade am Equalizer dreht. Die Funktion will ich auf jeden Fall beibehalten.
Der Aufnahme-Ringpuffer war dabei deutlich länger als die zu berechnenden FFTs. Um die Laufzeit auszugleichen habe ich einfach y(t) von einer um die entsprechende Anzahl Samples weiter "hinten" liegende Position aus dem Puffer geholt. Das musste ich aber manuell einstellen und war unschön.
hier nochmal der Aufbau. In der Aufnahme steckt dann z.b. u(t) linbks und y(t) rechts. Der Prüfling oder DUT ist hier eine Mischpult->AMP->LS->Mikro->Preamp Anordnung.
Ich will präzise Lautsprecher vermessen können.
Das sieht dann nach meiner Vorstellung so aus:
-Ich starte die Aufnahme (z.b. 2^16+n Samples)
-Ich starte die Ausgabe eines Sinussweeps (z.b. 2^16 Samples)
-Die Ausgabe endet
-Die Aufnahme endet
Wie sehen nun die beiden gesampelten Signale aus?
Am Anfang ist immer Ruhe, da zw. den ersten beiden Punkten etwas (undefinierte) Zeit vergeht. Nach dieser undefinierten Zeit habe ich Werte für u(t). Werte für y(t) beginnen dann erst um die der Laufzeit entsprechenden Anzahl an Samples später.
Ziel ist es nun die beiden Signale so zu bearbeiten, dass ich nur noch 2 2^16-lange Arrays habe, bei denen es sofort bei 0 losgeht.
Dazu berechne ich von beiden Aufnahmekanälen zunächst die FFT, danach U*(f) * Y(f) und erhalte dadurch das Kreuzleistungsspektrum. Davon die iFFT ist die Kreuzkorrelation der beiden Signale. Die muss (laut Theorie) beim Laufzeitunterschied einen Peak haben.
Dann kann ich bei y(t) erst einmal vorne so viele Samples "abschneiden" wie die Laufzeit lang war.
Jetzt will ich u(t) und y(t) auf Länge 2^16 bringen. Dazu berechne ich die KKF aus u(t) und des ursprünglichen (berechneten) Sweeps.
Ich erhalte wieder die Laufzeit, schneide die entsprechende Anzahl an Samples bei u(t) und y(t) vorne ab. Danach beschneide ich die Länge auf 2^16.
Diese beiden Arrays will ich dann als "Rohdaten" einer Messung auch exportieren können.
Danach geht es "klassisch" weiter. Amplitudengang, Phasengang (wenn die Phase weiter wie -180° fällt gibt es immer noch Sprünge, diese will ich auch noch sauber verarbeiten), Zeit/Frequenz-Intensitäts-Plot per STFT.
Pffffffffft. "Da entwich das Vakuum" - Heinrich Physik, 1857.