2016-04-19 8 views
0

Ich versuche ein 3D-Leistungsspektrum zu berechnen - das heißt, gemittelte Leistung in Frequenzschalen. Ich denke, dass ich die Dichte der Schalen richtig berechne, ich bin mir einfach nicht sicher, wie ich die Häufigkeit jeder Schale bestimmen soll.Berechnen eines 3D-Leistungsspektrums in fftw

Angenommen, die Abtastrate Fs ist in jeder Dimension gleich, und die Länge der ursprünglichen Proben in jeder Dimension ist auch derselbe Wert N. Der Shell- "Index" ist idx = sqrt(i*i + j*j + k*k) wobei i, j und k die Ausdehnung in jeder Richtung sind. Wie berechne ich die Häufigkeit dieser Shell?

+1

Was ist eine "Frequenzshell"? Das klingt eher nach einer Physikfrage als nach einer Programmierfrage. Im Allgemeinen wird die diskrete Fourier-Transformation eines reellwertigen Volumenbereichsdatenbereichsvolumens einen komplexwertigen Frequenzbereichvolumendatensatz erzeugen. Es scheint, als ob du etwas anderes willst. – MooseBoys

+0

Nicht ganz sicher, was Sie zu fragen versuchen. Möchten Sie fragen, wie Sie einen FFTW-Plan erstellen, den Plan ausführen oder die Ergebnisse interpretieren? – RyanP

+0

@MoseBoys Ich meine, ich möchte die Dichtewerte (f x f *) für jede Frequenz mitteln. Es ist eine Shell, weil es 3D ist, es wäre ein 2D-Kreis. – cgreen

Antwort

2

Es ist einfacher als Sie denken: Der Vektor (i, j, k) ist bereits der wave vector, also erhalten Sie die zugehörige Frequenz, indem Sie ihre Länge nehmen und sie durch die Länge der Kante Ihres Würfels teilen.

f = sqrt(i*i + j*j + k*k)/edgelength 

Das Ergebnis ist die räumliche Frequenz. Wenn Sie nach einer zeitlichen Frequenz suchen, benötigen Sie einige zusätzliche Informationen, die die beiden miteinander verbinden.

Die einzige Sache, um die Sie sich kümmern müssen, ist die Position der Nullfrequenz innerhalb des fft-transformierten Würfels: Einige Algorithmen platzieren es in der oberen linken Ecke, andere platzieren es in der Mitte. Wo immer es ist, müssen Sie darauf achten, dass Sie eine niedrige Frequenz für eine Alias-Hochfrequenz in der entgegengesetzten Richtung nicht falsch interpretieren, d. e. Der absolute Wert von i, j, k sollte immer kleiner als die Hälfte der Breite Ihres Würfels sein.

+1

Danke! In [dieser Antwort] (http://stackoverflow.com/questions/7674877/how-to-get-frequency-from-fft-result) für 1D-Systeme sagt @Paul R, dass die Frequenz von bin 'i'' freq ist = i * Fs/N'. Berechne ich in ähnlicher Weise die "Einheitslänge", indem ich die Abtastrate durch den 1D-Bereich dividiere? – cgreen

+1

Meine ursprüngliche Version war falsch: der Divisor ist nicht die Länge der Einheit, aber die Länge des Beispiels, siehe die aktualisierte Version meiner Antwort. Paul Rs Antwort ist korrekt: 'N/Fs 'ist die Länge des Samples, also ist' i * Fs/N 'dasselbe wie' i/samplength'. – cmaster