Hallo zusammen,
vorweg: Ich bin neu hier, Forumssuche wurde benutzt, allerdings ist mein
Problem vielleicht etwas spezieller.
Was ich vorhabe:
Ich möchte mithilfe von MATLAB Messdaten, die in der Form "Zeitpunkt in
sec" und "Spannungswert in Volt" vorliegen mittels der FFT in den
Frequenzbereich transformieren. Soweit so gut. Das klappt auch,
allerdings muss mir an entscheidender Stelle das Wissen fehlen. Denn
erreichen möchte ich eine Multiplikation im Frequenzbereich mit anderen
Messdaten, die ich für die Bestimmung der Übertragungsfunktion eines
elektrischen Bauteils aufgenommen habe.
Dabei habe ich mehrere einzelne Übertragungsfunktionen durch Messungen
in der Form "Frequenz in Hz" und "Komplexe Zahl (einheitenlos)".
Einheitenlos, da schon die Übertragungsfunktion zu der passenden
Frequenz aus dem Verhältnis des Ausgangsspannungssignals zum
Eingangsspannungssignal unter Berücksichtigung der Phasenverschiebung
berechnet wurde. Ich habe also zu jeder Frequenz die passende
Übertragungsfunktion in Form einer komplexen Zahl.
Die Frequenzbereiche habe ich dabei linear durchfahren, es sind immer
Frequenzdekaden wie z.B. von 10 kHz bis 100 kHz oder 100 kHz bis 1 MHz.
Je nach Dekade bestehen gibt es 201, 1601 oder 2048 Messwerte. Bei den
höheren Frequenzen ab 10 kHz sind es immer 2048, da hier die Messungen
schneller gingen.
An dem Bauteil habe ich an einer Stelle x einen Impuls eingespeist und
an den beiden Klemmen des Bauteils die Spannung gemessen. Die Spannung
habe ich ebenfalls am Einspeiseort gemessen. Nun möchte ich mittels FFT
diese Spannungen in den Frequenzbereich bringen und nachweisen, dass
FFT vom Impuls MAL Übertragungsfunktion (Impulsort zu Klemme 1) auch
wirklich das Spannungssignal an Klemme 1 ergibt.
Schrittfolge wäre also:
1) Übertragungsfunktion in Matlab aus CSV einlesen, man bekommt einen
Frequenzvektor der Messung und einen Vektor mit den Werten der komplexen
Zahlen zu diesen Frequenzen
2) Die drei Spannungswerte aus der Messung mit dem Oszilloskop einlesen
(Impulseinspeiseort, Klemme 1, Klemme 2)
3) Jeweils eine FFT der drei Spannungsmessungen mit dem Oszilloskop, um
diese Werte in den Frequenzbereich zu bringen
4) Multiplikation der FFT des Einspeiseorts mit der komplexen
Übertragungsfunktion von Einspeiseort zu Klemme 1
5) Inverse FFT dieser Multiplikation
6) Vergleich des Ergebnisses von 5) mit dem gemessenen Spannungsverlauf
an Klemme 1
Ich hoffe, dass das verständlich war.
Bei mir hakt es nun vor allem zwischen Schritt 3 und 4. Ich benötige
durch das Anwenden der FFT exakt die gleichen Frequenzen, wie ich sie
durch die Messung der Übertragungsfunktion auch schon habe.
Ich bin mir aber unsicher, wie ich das anstellen soll. Ich möchte also
gezielt eine FFT machen, die als Ergebnis die komplexen
Fourier-Koeffizienten bei exakt den Frequenzen der Übertragungsfunktion
bietet, damit ich diese Multiplizieren und anschließend in den
Zeitbereich zurücktransformieren kann.
Die Übertragungsfunktion hat beispielsweise 2048 Messwerte zwischen 10
kHz und 100 kHz linear aufgeteilt und mit dem Oszilloskop habe ich eine
Messung bei 50 ns/ div und einer Betrachtungszeit von 500 ns gemacht.
Der Abstand zwischen den Messwerten betrug hierbei 400 ps und die
Messung hat 1250 Messwerte, ergibt also eine Abtastrate von 2,5 GHz.
Ich danke schon vielmals im Voraus!
M1809 schrieb:> Bei mir hakt es nun vor allem zwischen Schritt 3 und 4.> Ich benötige durch das Anwenden der FFT exakt die> gleichen Frequenzen, wie ich sie durch die Messung> der Übertragungsfunktion auch schon habe.
Die FFT setzt m.W. äquidistante Abtastpunkte voraus, und
will normalerweise eine glatte Zweierpotenz als Anzahl
sehen.
Mit anderen Worten: Die ermittelte Übertragungsfunktion
ist m.M.n. ein Schuss ins Knie.
> Die Übertragungsfunktion hat beispielsweise 2048 Messwerte> zwischen 10 kHz und 100 kHz linear aufgeteilt und mit dem> Oszilloskop habe ich eine Messung bei 50 ns/ div und einer> Betrachtungszeit von 500 ns gemacht.> Der Abstand zwischen den Messwerten betrug hierbei 400 ps> und die Messung hat 1250 Messwerte, ergibt also eine> Abtastrate von 2,5 GHz.
???
10kHz, 1250 Messwerte und Abtastrate 2.5GHz?
Die Zahlen ergeben nicht den geringsten Sinn.
Nochmal überprüfen.
Abgesehen davon: Ich kenne MATLAB nicht, aber prinzipiell
ist eine FFT von 10^6 Messpunkten kein Problem für einen
normalen PC. Von den ggf. langen Messzeiten abgesehen
kann man also mehrere Dekaden mit einer einzigen FFT
abdecken.
Vielen Dank erstmal für die Antwort :)
Egon D. schrieb:> M1809 schrieb:>>> Bei mir hakt es nun vor allem zwischen Schritt 3 und 4.>> Ich benötige durch das Anwenden der FFT exakt die>> gleichen Frequenzen, wie ich sie durch die Messung>> der Übertragungsfunktion auch schon habe.>> Die FFT setzt m.W. äquidistante Abtastpunkte voraus, und> will normalerweise eine glatte Zweierpotenz als Anzahl> sehen.> Mit anderen Worten: Die ermittelte Übertragungsfunktion> ist m.M.n. ein Schuss ins Knie.
Äquidistante Abtastpunkte wären meiner Meinung nach vorhanden, sowohl
bei der linearen Messung der Übertragungsfunktion, aber vor allem für
die FFT (oder auch DFT, das macht für mich durch die Computerberechnung
nur einen zeitlichen Unterschied) auch bei der Messung mit dem
Oszilloskop.
Die Übertragungsfunktion ist ja bereits vorhanden und bietet folgende
(lineare) Frequenzbereiche:
20 Hz bis 100 Hz mit 201 Datenpunkten
100 Hz bis 1000 Hz mit 1601 Datenpunkten
1 kHz bis 10 kHz mit 1601 Datenpunkten
10 kHz bis 100 kHz mit 2048 Datenpunkten
100 kHz bis 1 MHz mit 2048 Datenpunkten
1 MHz bis 10 MHz mit 2048 Datenpunkten
10 MHz bis 50 MHz mit 2048 Datenpunkten.
Bei der Messung mit dem Oszilloskop gibt es folgende Auflösungen pro
Div:
100 µs / div, also insgesamt 1 ms Zeitdauer
20 µs / div, also insgesamt 200 µs Zeitdauer
10 µs / div, also insgesamt 100 µs Zeitdauer
1 µs / div, also insgesamt 10 µs Zeitdauer
500 ns / div, also insgesamt 5 µs Zeitdauer
100 ns / div, also insgesamt 1 µs Zeitdauer
50 ns / div, also insgesamt 500 ns Zeitdauer.
>> Die Übertragungsfunktion hat beispielsweise 2048 Messwerte>> zwischen 10 kHz und 100 kHz linear aufgeteilt und mit dem>> Oszilloskop habe ich eine Messung bei 50 ns/ div und einer>> Betrachtungszeit von 500 ns gemacht.>> Der Abstand zwischen den Messwerten betrug hierbei 400 ps>> und die Messung hat 1250 Messwerte, ergibt also eine>> Abtastrate von 2,5 GHz.>> ???>> 10kHz, 1250 Messwerte und Abtastrate 2.5GHz?> Die Zahlen ergeben nicht den geringsten Sinn.> Nochmal überprüfen.>> Abgesehen davon: Ich kenne MATLAB nicht, aber prinzipiell> ist eine FFT von 10^6 Messpunkten kein Problem für einen> normalen PC. Von den ggf. langen Messzeiten abgesehen> kann man also mehrere Dekaden mit einer einzigen FFT> abdecken.
Ok, dabei verstehe ich noch nicht genau, woran es hakt. Also genau das
ist ja mein Problem, dass es zwei unterschiedliche Systeme sind, die
Zusammenzubringen sind. Wichtig ist für mich, dass die gemessenen
Dekaden bei den Übertragungsfunktionen linear sind und es eben Dekaden
sind. Den Zeitausschnitt bei der Impulseinspeisung habe ich natürlich
sinnvoll am Oszilloskop gewählt, sodass der Impuls klar erkennbar ist
und dann je nachdem, wie viel nach der Impulseinspeisung noch gesehen
werden sollte. Die Abtastfrequenz ist dann eben so hoch. Die 1250
Messwerte ergeben m.M.n. schon Sinn (vermute, es sieht auf den ersten
Blick zu wenig aus), wenn man die Betrachtungszeit von 500 ns mit in
Betracht zieht.
Bisher klingen die Antworten auf mein Vorhaben ja recht
niederschmetternd :(
Ich hoffe, dass nochmal klar geworden ist, welche Messdaten ich zur
Verfügung habe und was ich damit vorhabe. Ich möchte also mit der FFT
der Spannungssignale vom Oszi zu jedem Frequenzwert (den es auch in der
Übertragungsfunktion gibt) einen komplexen Wert finden, um den komplexen
Wert der Übertragungsfunktion bei z.B. Frequenz 10 kHz mit dem komplexen
Wert aus der Spannungsmessung und anschließenden FFT oder DFT bei
ebenfalls 10 kHz zu multiplizieren und anschließend die inverse FFT oder
DFT durchführen zu können.
TL;DR: Interpoliere deine bekannten Koeffizienten im Frequenzraum auf
die Frequenzwerte, die sich aus der FFT des Oszi-Signals ergeben.
So speziell ist dein Problem glaube ich nicht, der viele Text lässt mich
nur vermuten dass du es selber noch nicht 100% durchstiegen hast.
Wenn ich richtig verstehe:
* Du hast viele Messungen (egal in welchem Sampling) die für 1 exakte
Frequenz dein Filterverhalten auf Amplitude und Phase beschreiben. (Die
sind überhaupt nicht äquidistant von 20Hz-50MHz, sondern nur je Dekade,
damit kann eine simple FFT nix anfangen.)
* Du würdest diese gerne zu 1 einzigen gesamten Impulsantwort im
Frequenzraum zusammenbasteln
* Du hast 1 Oszi-Messung, wo du einen Puls ins System gibst und vorher
und nachher den Zeitverlauf darstellen kannst, mit einer gegebenen
Samplingrate und Zeitdauer
* Dann muss die Übertragungsfunktion nicht nur äquidistant, sondern auch
in den exakt gleichen Schritten wie dein Signal gerastert sein.
* -> Das müsste durch Interpolieren aber ohne Probleme gehen.
Pragmatisch würde ich daher sagen:
* Deine zeitliche Messung gibt die sinnvollen Frequenzen vor, aus einem
abgetasteten Signal kann man nämlich nicht mehr oder weniger rausholen
als einem die FFT gibt. Beschäftige dich am besten nochmal grundsätzlich
mit dem hin- und hertransformieren, Nyquist-Frequenz, Aliasing, usw.
* Du hast jetzt also eine FFT deines Signals. Für 1250samples @2.5GHz
ergibt sich dabei automatisch die höchste auflösbare Frequenz
(proportional dt, also 1.25GHz wenn ich richtig liege) und die
Frequenzauflösung (proportional T_gesamt, also 1/500ns=2MHz Schritte)
* Deine Sammlung von Übertragungswerten (als Datenpaare
Frequenz+komplexe Zahl) gibst du in eine Interpolationsfunktion, und
wendest die auf dein Array von Frequenzen (Matlab fftfreq) oben an.
Möglicherweise muss das separat für Amplitude und Phase der komplexen
Zahlen passieren, wird man bestimmt irgendwo finden.
* Die Rücktransformation ergibt dir dein Signal gefaltet mit der
Impulsantwort, wie gewünscht.
Abschließende Gedanken:
* Deine gemessenen Frequenz-Übetragungswerte reichen von 20Hz bis 50MHz,
warum musstest du dann mit 400ps=2.5GHz samplen um das übertragene
Signal gut darzustellen? Da fehlt dir dann für einen Großteil meiner
oben beschriebenen Vorgehensweise der passende Koeffizient.
* Man könnte stattdessen (ist vielleicht sogar schlauer) aus allen
Koeffizienten deiner Übertragungsfunktion (im Frequenzraum) eine
Impulsantwort im Zeitraum errechnen. Das gemessene Signal muss damit
dann gefaltet werden, was äquivalent ist zu einer Multiplikation im
Frequenzraum
* Theoretisch wäre auch eine "Fourier-Trafo zu Fuß" möglich, wo du dein
gemessenes Signal nicht in harmonische Frequenzen zerlegst wie bei der
FT, sondern in jene Frequenzen für die du die Koeffizienten kennst, aber
das ist glaube ich eher eine mathematische Übung als eine sinnvolle
Herangehensweise
* Über die Behandlung von negativen Frequenzen habe ich nicht
nachgedacht, aber gut möglich das das hier essentiell ist. Also
letztendlich korrektes Anwenden von fftshift und ifftshift
* Allg. zu fftshift: auf die richtige Anzahl gepaarter
fftshift/ifftshift achten, sonst kriegt man sehr verrückte Signale bei
der Rücktransformation.
> FFT vom Impuls MAL Übertragungsfunktion (Impulsort zu Klemme 1) auch
wirklich das Spannungssignal an Klemme 1 ergibt.
Das ist eine Augenoeffner Idee. Aber wenn's denn sein muss. Denn die
Uebertragungsfunktion ist die Fouriertransformierte der
(Delta-)Impulsantwort. Das ist schon von der Definition her so. Was du
auch immer herauskommen kannst sind Nichtidealitaeten.
zB ist dein Puls kein Deltapuls (Amplitude unendlich, laenge Null,
Flaeche Eins). Falls der das denn waere ist dein Bauteil und deine
Messapparatur zerschossen. Diese Definition gilt fuer die
Fouriertransformation.
Wenn man die Fouriertransformation verstanden hat, kann man sich der FFT
zuwenden, welche mancherlei Randbedingungen enthaelt.
Ohne die Theorie verstanden zu haben, hast du Resultate, welche wenig
sinn ergeben.
So ganz nebenbei, moderne Oszilloskope koennen die FFT schon selbst.
Einfach Math funktionen einschalten und die FFT waehlen. Babei gibt's
nur noch das Filter, zB Hamming, und die Amplituden Skalierung als
Einstellmoeglichkeit.
Hallo zusammen und erstmal Danke für die Antworten!
Ich habe mich derweil noch einmal intensiv mit der DFT beschäftigt und
auch in Matlab alles erstmal soweit hinbekommen, wie ich es wollte. Die
Ergebnisse ergeben Sinn und meine Aussage, dass der ganze
Frequenzbereich der Übertragungsfunktion aus äquidistanten Messpunkten
besteht war natürlich falsch.
Was ich mich generell dadurch Frage: Ist es überhaupt möglich, eine
Tabelle von komplexen Zahlen, die jeweils bestimmten Frequenzen
zugeordnet sind, zu interpolieren?
Eine komplexe Zahl besteht nunmal immer aus einem Betrag und einer
Phase, ich bin mir unsicher, ob man dort jetzt einfach getrennt Betrag
und danach Phase interpolieren kann. Aus dem Bauch heraus würde ich
sagen, dass das nicht möglich ist.
Mittels Zero-Padding habe ich die Frequenzauflösung auf meine gewünschte
Auflösung von 1 Hz gebracht, ohne nennenswerte Veränderungen. Zuvor
wurde das Signal mit einem Hanning-Fenster multipliziert mit der
gleichen Zahl an Datenpunkten. Das Amplitudensprektrum zeigt vor allem
Veränderungen und sichtliche Ausschläge um 1 kHz sowie im Bereich
zwischen 55 kHz und 65 kHz.
Falls ich die Interpolation nun nicht hinbekomme, weil sie faktisch auch
eventuell nicht geht, würde ich als nächsten Ansatz einmal die DFT der
Einspeisung auf 1 Hz genau durchführen und dann jeweils einzeln die
Übertragungsfunktionen mit dem entsprechenden Teilbereich der DFT
multiplizieren. Ich denke gerade darüber nach, ob das Sinn ergibt und
man vielleicht anhand der Einzelberechnungen die fertigen
Multiplikationen der DFT mit den ÜF dann zusammenfügen kann (Addition
oder Multiplikation im Frequenzbereich), um dann anschließend die IFFT
zu bilden. Da schaue ich gerade, wie ich dann an den korrekten
Zeitvektor bei der Rücktransformation komme.
Erstmal danke soweit :)
Dein letzter Absatz klingt wenn ich richtig verstehe also wie eine
"stückweise definierte" Übertragungsfunktion. Das sollte prinzipiell
gehen, ich denke aber es ist nicht unbedingt einfacher. Was du dabei ja
nur machst ist aussuchen, aus welcher gemessenen Tabelle du den
Übertragungswert (Amplitude/Phase) für eine bestimmte Frequenz nimmst.
Wenn du einen Wert benötigst, der genau zwsichen 2 vorhandenen liegt,
musst du zB den Durchschnitt ausrechnen. Damit hast du dann aber nur zu
Fuß eine simple Interpolation nachgebaut :)
Ob eine Interpolation für allgemeine komplexe Funktionen Sinn macht, ist
eine gute Frage, aber für alle relevanten physikalischen Probleme würde
ich denken, ja es geht.
Und zwar darfst du jede komplexe Zahl als Amplitude und Phase
aufschreiben, die Interpolation müsste dann für diese beiden
reell-wertigen Funktionen getrennt ablaufen.
Das funktioniert solange gut, wie sich die Werte nur "smooth" mit der
Frequenz ändern, was aber gegeben sein sollte.
Also komplexe Übertragungsfunktion U für gegebene Frequenz f:
wobei A(f) und phi(f) reelle Funktionen sind, die aus einer beliebigen,
nicht-äquidistanten Tabelle interpoliert werden können. Einfach
Wertetabelle und Interpolationsdaten für einen Frequenzvektor plotten,
dann siehst du wie "smooth" deine Funktion ist.
M1809 schrieb:> die jeweils bestimmten Frequenzen> zugeordnet sind, zu interpolieren?
ja sicher, warum nicht? Es ist eine Interpolation zwischen 2
Vektor-Endpunkten, genau so, wie bei einer Bewegung in einer 2D-Ebene.
Die Frage ist aber möglicherweise eine andere: Ist ein interpolierter
Zwischenwert tatsächlich ein Repräsentant für den Wert der sich ergäbe,
hätte man die FFT / DFT so aufgezogen, dass sie die gewünschte (zu
interpolierende Frequenz) beschreibt .. also deren Amplitudenwert?
Das ist nämlich nicht so, weil die den Frequenzen zugeordneten
Amplituden keinen linearen Übergang bilden, sondern sich über eine
COS/SIN-Funktion zum Nachbarn bewegen. Das kann man sehr schön sehen,
wenn man manche FFTs betrachtet und einen Sweep laufen lässt. Die
Amplituden bewegen sich in leichten Wellen. Daher muss die Interpolation
im Winkelsystem erfolgen, oder man nimmt das Vorwärts-Newton-Verfahren,
um es iterativ zu lösen, wenn man genug Rechenpower hat.