Hallo Zusammen,
Ich sitzte gerade an meiner Diplomarbeit vor folgendem Problem:
mir liegen die Werte einer Messung in Excel vor. Betrachtet man die Grafik, so erkennnt man, dass die Kurve zyklisch schwankt.
Ich würden jetzt gerne eine Fourieranalyse der Messwerte durchführen, sodass ich die Harmonischen der Messwerte als Frequenzspektrum in Excel darstellen könnte.
Hat jemand mal schon eine DFT in Excel programmiert, und kann mir da weiterhelfen? Hab sowas noch nie gemacht. Vielleicht hat jemand dazu einen Tip/Beispielcode.
Bin für jede Hilfe dankbar.
Vielleicht hilft Dir das.... (ist glaub' auch hier aus dem Forum)
[
attachment=17984]
Gruß Markus
@aline: Du weisst schon, dass du hier im LabVIEW-Forum bist? Also, wenn du fragst, wie eine FFT/DFT mit LabVIEW geht, siehe Bsp. von Markus. Aber wie und wieso man dies in Excel machen soll/will, kA.
@Y-P: Ob das wirklich weiterhilft? Es wird doch explizit nach DFT in Excel gefragt.
Gruß, Jens
Hallo aline
machen kann man alles:
ob das Spaß macht wenn man LV hat ....
Hi,
Excel hat unter den Analysis-Addons eine FFT. Das ist keine DFT, aber immerhin etwas...
Hab da mal was programmiert, da die Funktion tatsächlich nur den Transformation-Kern enthält, nichts von dem Zeug drumrum, dass man auch irgendwie braucht... Allerdings kann Excel (zumindest in der 2003-Version, wo ich das gemacht habe) nur 4096 Samples. Könnte zu wenig sein, LabVIEW ist da schon netter...
ch
[
attachment=17989]
Hallo ChrissyPu,
Eigentlich habe ich von LabVIEW angefangen. Die Messdaten kriege ich von LB, die in Excel weiter übertragen werden …
Könntest du mir vielleicht kurz dein Programm erklären?
Ausgang FFT – ist das meine Amplituden von der Grung- bzw. Oberwellen?
Phase (°) – Frequenzen von der Grung- bzw. Oberwellen?
Und das ist eine VBA-Routine, die die Interpolation des Datensatzes auf die nächste 2-er Potenz besorgt um dann die in Excel vorhandene Analysefunktion FFT zu benutzen?
Select Case Samples
Case Is = 512
Set FFTInput = Range("E2:E513")
Case Is = 1024
Set FFTInput = Range("E2:E1025")
Case Is = 2048
Set FFTInput = Range("E2:E2049")
Case Is = 4096
Set FFTInput = Range("E2:E4097")
Case Is = 8192
Set FFTInput = Range("E2:E8193")
End Select
Ich verstehe ehrlich gesagt nichts so viel, ich habe in VBA noch nicht programmiert.
Danke im Voraus.
' schrieb:Eigentlich habe ich von LabVIEW angefangen. Die Messdaten kriege ich von LB, die in Excel weiter übertragen werden …
Und wieso dann FFT in Excel und nicht in LabVIEW??
Hallo Aline,
Zitat:Eigentlich habe ich von LabVIEW angefangen. Die Messdaten kriege ich von LB, die in Excel weiter übertragen werden …
Nein. Du hast explizit nach einer DFT in Excel gefragt. Wenn Du nicht in Excel rechnen willst, würde ich dir wirklich die LabVIEW-Sachen empfehlen - das ist einfacher, vor allem, wenn man vielleicht nicht so der Signalverarbeitungs-Crack ist...
Zur Erklärung jetzt vielleicht doch der eMail-Stil:
> Ausgang FFT – ist das meine Amplituden von der Grung- bzw. Oberwellen?
> Phase (°) – Frequenzen von der Grung- bzw. Oberwellen?
Eine FFT hat als Ausgang drei Größen, einmal die Mittenfrequenz des Bandes, auf die sich die nächsten beiden Größen beziehen (und die man aus der Samplelänge und der Abtastrate auch ohne irgendeinen Fourier-Algorithmus berechnen kann) und für jede dieser Mittenfrequenzen dann einen Amplitudenbetrag sowie eine Phasenverschiebung. Wenn du mit den beiden Begriffen nichts anfangen kannst, würde ich Dir wirklich ans Herz legen, dir mal einen Schnellkurs in Signalverarbeitung oder zumindest in Komplexen Zahlen reinzuziehen - in ein paar Sätzen kann ich das nicht erklären...
>Und das ist eine VBA-Routine, die die Interpolation des Datensatzes auf die nächste 2-er Potenz besorgt um dann die in Excel vorhandene >Analysefunktion FFT zu benutzen?
FFT funktioniert nur mit Samplezahlen, die 2^N entsprechen, da das erste F der FFT (Fast Fourier Transformation) darauf basiert, dass Symmetrieeigentschaften der Transformationa usgenutzt werden. Das hab ich da irgendwie implementiert. Der folgende von Dir zitierte Code macht das streng genommen nicht, sondern selektiert nur anhand der Anzahl der Samplewerte die jeweiligen Eingangsgrößen.
Code:
Select Case Samples
Case Is = 512
Set FFTInput = Range("E2:E513")
Case Is = 1024
Set FFTInput = Range("E2:E1025")
Case Is = 2048
Set FFTInput = Range("E2:E2049")
Case Is = 4096
Set FFTInput = Range("E2:E4097")
Case Is = 8192
Set FFTInput = Range("E2:E8193")
End Select
Grüße,
ch