Ortsfrequenzspektrum

Neue Frage »

beecksche Auf diesen Beitrag antworten »
Ortsfrequenzspektrum
Hallo,
ich stehe momentan ein "wenig" auf dem Schlauch.

Ich habe mehrere Messwerte mit gleichem Abstand .

Nun möchte ich diese Messwerte analysieren. Ich möchte herausfinden, welche Frequenzen wie stark "vertreten" sind.

Wenn ich alles richtig verstanden habe, kann ich dies mithilfe der inversen diskreten Fourier Transformation herausfinden.

Die Fourier-Koeffizienten kann ich mithilfe der Fourier Matrix berechnen.

Wie komme ich jedoch nun von den Koeffizienten auf mein Spektrum?
Steffen Bühler Auf diesen Beitrag antworten »
RE: Ortsfrequenzspektrum
Es ist nicht die inverse DFT, sondern einfach eine DFT, die Du berechnen musst.

Die Koeffizienten sind das Spektrum. Meist interessieren allerdings nur die Beträge, die ergeben das Amplitudenspektrum.

Wenn Du z.B. 360 Messwerte im Abstand 1° aufgenommen hast, wird |c1| angeben, wie stark die Komponente vertreten ist, die 1mal pro 360° auftritt. Und bei |c2| dann 2mal pro Umdrehung und so weiter.

Falls Du noch Fragen hast, kannst Du sie gern stellen.

Viele Grüße
Steffen
beecksche Auf diesen Beitrag antworten »

Okay, danke.

Das Amplitudenspektrum berechnet sich nach meinem Wissen mit:



Die Fourier Transformation berechne ich mithilfe der FFTW3 Bibliothek:
code:
1:
fftwf_plan mPlan = fftwf_plan_dft_r2c_1d(n, f.data(), mOut, FFTW_BACKWARD);


Beispiel von: Beispiel



Ergebnis nach der DFT:



Das Amplitenspektrum entsprechend:



Das Ergebnis interpretiere ich folgendermasen:

entspricht dem Gleichanteil, also dem Mittelwert aller 4 Punkte.
entspricht der Grundschwingung, 1. Ordnung.
entspricht der Oberschwingung, 2. Ordnung.

Wie kann ich diese einzelnen Schwinungen anzeigen lassen? Die Amplitude der Schwingung habe ich berechnet. Woher weiß ich jedoch ob es sich um eine cosinus oder sinus - Schwingung handelt?
Steffen Bühler Auf diesen Beitrag antworten »

Zitat:
Original von beecksche
Die Amplitude der Schwingung habe ich berechnet. Woher weiß ich jedoch ob es sich um eine cosinus oder sinus - Schwingung handelt?


Du schriebst:
Zitat:
Ich möchte herausfinden, welche Frequenzen wie stark "vertreten" sind.


Daher ging ich davon aus, dass es Dir egal ist, ob die Komponenten als Cosinus- oder Sinusschwingung (oder als Kombination) vorliegen. Die "Stärke" wird von der Amplitude angegeben.

Wenn das nicht so ist und Du lieber die einzelnen Sinus- und Cosinuskomponenten haben willst, brauchst Du den Betrag aber gar nicht, denn die hast Du schon durch die DFT erhalten.

Zum Beispiel ist die Komponente C1=0,0225-0,0125*i=A1+B1*i ja einfach ein Cosinus der Amplitude 0,0225, von dem ein Sinus der Amplitude 0,0125 subtrahiert wird:

beecksche Auf diesen Beitrag antworten »

Das Spektrum benötige ich auch, die Materie ist mir doch noch nicht so vertraut wie ich es eigentlich vermutet habe.

Wenn ich das richtig verstanden habe:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
std::vector<float> data;
for (int i = 0; i < 360; i = i + 6) 
{
	float angle = i  * PI / 180.0;
	float value = 0.0;
	for (int k = 0; k < fourier.size(); k++) 
       {
		value += fourier.at(k).real() * cos(k * angle) + fourier.at(k).imag() * sin(k * angle);
	}
	data.push_back(value);
}


Mit folgenden Code habe ich das Polynom mit dem ich die Kurve beschreiben kann.

Mit
code:
1:
fourier.at(k).real() * cos(k * angle) + fourier.at(k).imag() * sin(k * angle);

kann ich die einzelnen Komponenten darstellen.

Hoffe das stimmt so einigermaßen.

Ich muss jedoch in dem FFTW plan das sign: FFTW_BACKWARD einstellen, da bei FFTW_FORWARD die Werte gespiegelt sind?
Steffen Bühler Auf diesen Beitrag antworten »

Ich kenne wiederum diese FFT-Bibliothek nicht, aber vom Prinzip her sieht's gut aus.
 
 
beecksche Auf diesen Beitrag antworten »

Okay Danke,

aus der FFTW Dokumentation: Doku

So wie ich das verstehe wird mit dem sign FFTW_FORWARD eine "normale" und mit dem sign FFTW_BACKWARD eine inverse DFT durchgeführt wird.
Steffen Bühler Auf diesen Beitrag antworten »

Da Du eine ganz normale Fouriertransformation willst, solltest Du also FORWARD einstellen. Was soll da gespiegelt sein? Du hast C0, C1 und C2. Mehr bekommst Du hier nicht.
beecksche Auf diesen Beitrag antworten »

Daten:





Wenn ich nun ein Polynom aus sinus und cosinus erstelle, bekomme ich bei folgendes ergebnis:


(mit FFTW_FORWARD)

und

(mit FFTW_BACKWARD)
Steffen Bühler Auf diesen Beitrag antworten »

Dann passt ja alles, oder? Die Hintransformation mit FORWARD ergibt das Spektrum, die Rücktransformation des Spektrums mit BACKWARD wieder das Zeitsignal.
Neue Frage »
Antworten »



Verwandte Themen