Hi,
ich stehe gerade vor einem Problem. Und zwar habe gerade eben ein
Übertragungssystem durchgemessen. Nun soll ich dieses gemessene System
in meine Simulation einbauen und ein gegebenes Signal (das ich im
Frequenzbereich habe) mit dem System multiplizieren um dann die Antwort
zu erhalten. Leider hat das gemessene System je einen Wert im
Frequenzabstand von 49.950 MHz und insgesamt 201 Samplepunkte. Der
Startwert der Messung ist 1 GHz.
Mein Signal hat jedoch 128 Samples bei einer Samplefrequenz von 2Ghz.
Wie bekomm ich es jetzt hin das ich die zwei Signale elementweise
multiplizieren kann, sodass ich das ergebnis im frequenzbereich habe?
Viele Grüße und danke schön,
Pedde
Wenn ich das Problem richtig verstehe, dann bleibt dir nix übrig, als
zwischen den Punkten irgendeine Art von Interpolation zu machen --
wahrscheinlich genügt eine lineare. In dem Fall tust du ungefähr dies:
Für Punkt n der Messreihe A berechnest du die Frequenz f1, zu die dieser
Punkt gehört (das ist ja leicht, n * delta f oder so).
Dann suchst du in Messreihe B die zwei Punkte, die diesen Punkt
einschließen, also zwei Punkte zu Frequenzen f2a und f2b, deren Frequenz
gerade ein bisschen kleiner oder ein bisschen größer ist als f1 (f2a <
f1 < f2b).
Wenn Genauigkeit nicht so wichtig ist, kannst du einfach den kleineren
der beiden nehmen, oder den größeren. Wenn es etwas besser werden soll,
nimmst du beide, berechnest den Abstand dfa = f2a - f1 und dfb = f2b -
f1 und gewichtest die Messwerte (y-Werte) der beiden Punkte damit.
Fertig.
Eine der Kurvenform angemessene Interpolation würde ein noch besseres
Ergebnis bringen, aber das lohnt mit Sicherheit nicht.
Edit: Ha, wusste ich doch, dass ich da mal eine Python-Klasse für
geschrieben habe. Ungefähr so:
Wie mein Vorredner schon richtig geschrieben hat, musst Du
interpolieren, so dass beide FFTs die gleichen Frequenzstützstellen
haben.
OT: Was für ein System hast Du denn? Und welches Messsystem hat eine
Samplefrequenz von 2GHz?
Gruß
Uli
Sven B. schrieb:> zwischen den Punkten irgendeine Art von Interpolation zu machen --> wahrscheinlich genügt eine lineare.
das würd ich jetzt so nicht sagen, ich würds eher mit zero padding
machen....
einfach so viele nullen dranhängen, dass die sampleanzahl
übereinstimmt....
dann hast du natürlich noch das problem mit den abtastfrequenzen, die
erste abtastfrequenz ist ja
201*49,905MHz= 1GHz (??)
und bei der zweiten messung 2 GHz, dann musst du natürlich noch ne
abtastratenänderung machen....
also beim ersten signal immer zwischen zwei messwerte ne null einfügen,
fft berechnen, obere hälfte vom spektrum abschneiden und ifft.
und dann das kürzere signal solange mit nullen auffüllen, bis beide
gleichlang sind.
Warum nicht einfach beide Signale auf die höhere Samplerate resampeln,
wie von mir beschrieben? Das klingt irgendwie einfacher, zumindest in
meinem Kopf. ;)
Moderne Oszilloskope der mittleren Preisklasse messen mit 2GS/s, zum
Beispiel.
Hi,
also es ist so, ich hab das Signal eigentlich im Zeitbereich gesampelt
in Matlab. D.h. es wurde nicht gesampelt, sondern mit einer
Sampelfrequenz erzeugt, die aber bei 6 GHz liegt nicht bei zwei (hab
mich vertan...sorry dafür). Ich habe allerdings die möglichkeit
geringfügig mit der Samplefrequenz zu spielen.
D.h. ich mach erstmal ne fft von dem Signal. Gibts nicht da schon die
Möglichkeit in Matlab die Samples und frequenzpunkte anzupassen...Ohne
Interpolation
Vielen Dank für eure großartige Hilfe
Hi Sven,
ja sowas hat ein Kumpel von mir auch schon gesagt, aber ehrlich gesagt
haperts da ein bisschen beim Verständnis von mir, meinst du könntest mir
ein kleines Beispiel geben?
Zu dem Signal.
Die erste frequenz ist 1 GHz, die nächste ist 1,049,905 GhZ. Ich wollte
damit sagen dass das Sampling nicht bei null los geht, sondern bei einem
GHz und dann die Punkte einen Abstand von 49,905MHz haben. Das
gesampelte Signal geht bis 10 GHz.
Aber das mit den Nullen hört sich sehr interessant an
Hallo,
also, man könnte zum Resampeln zum Beispiel so vorgehen: du schreibst
ein Skript, was die ursprünglichen Messdaten alle einliest und in eine
Liste (oder Map oder so) schreibt. Dann machst du eine Schleife, mit der
du alle gewünschten, neuen x-Werte durchläufst. Für jeden dieser Werte
berechnest du dann den y-Wert aus den alten Daten wie in meinem ersten
Beitrag beschrieben duch lineare Interpolation. Diese neuen x- und
y-Werte schreibst du in eine neue Liste und die gibst du dann aus. Die
Skriptsprache Python ist für sowas hervorragend geeignet.
Wenn die Daten aus einer Simulation kommen, die du selbst
kontrollierst... dann bietet es sich höchstwahrscheinlich an, das dort
zu ändern, anstatt die Daten dann nacher nochmal umzuschreiben.
Überhaupt ist mir das ganze Vorgehen nicht so klar -- warum sampelt man
ein Signal "von Hand", um es zu fouriertransformieren, wenn man es schon
in digitales Form (Matlab) vorliegen hat? Aber wahrscheinlich mangelt es
mir da einfach an Überblick für dein Projekt. ;)
Grüße,
Sven
Hi,
jetzt ist mir aber nochmals ne Frage aufgekommen. Und zwar hab ich jetzt
meine ERgebnis im Frequenzbereich ausgerechnet. Jetzt möchte ich das
ganze per ifft wieder den Zeitbereich transformieren und darstellen
lassen. Jetzt ist jedoch die Zeitliche Darstellung zu klein. Wie kann
ich diese vergrößern? so dass das signal nicht abgeschnitten wird?