Hallo zusammen,
um die Fourier Thematik besser zu verstehen und für einen praktische
Anwendung habe ich die Fourier Transformation mit Excel umgesetzt. Dazu
hab ich ein Zeitsignal in 64 diskrete Werte aufgeteilt (in t=0..63 und
einen Wertebereich von 0 bis 1).
Darüber die FT in - VBA programmiert - laufen lassen und grafisch
dargestellt in Phase und Amplitude. Ergebnis passt. Wenn ich ein Sinus,
Rechteck usw eingebe stimmt das Ergebnis mit dem zu erwartenden Ergebnis
überein. Weiterhin hab ich die Zeitkurven über die in Excel eingebaute
FFT() Funktion transformiert, was zum selben Ergebnis führt, wie mein
VBA Code.
Aber jetzt zu meinem Problem: Wenn ich die Phasen und Frequenzen
zurücktransformieren möchte, dann bekomm ich für die Standardfunktionen
(Sinus, 2x Sinus, Rechteck, Sägezahn) ähnliche Zeitfunktionen zurück,
ABER bei einer zufälligen Funktion zB eine quadratisch ansteigender
Verlauf sieht ganz komisch aus.
Ist der Rundungsfehler durch die Fließkommazahlen in Excel dafür
verantwortlich, oder hat mein InverseFourier() Algorithmus einen Fehler?
Um das Signal zurückzutransformieren, summier ich einfach
cosinus-Funktionen mit der entsprechenden Frequenz und
Phasenverschiebung auf.
Vielen Dank schonmal für eure Hilfe!
1 | Sub InvFourierNumerisch(t As Integer)
|
2 |
|
3 | Dim i As Integer
|
4 |
|
5 | Dim ret As Double
|
6 | Dim phase As Double
|
7 | Dim amplitude As Double
|
8 |
|
9 | ret = 0
|
10 | For i = 0 To 31 ' ACHTUNG: Abtasttheorem nach Shannon beachten!
|
11 | phase = Cells(i + 9, 26).Value
|
12 | amplitude = Cells(i + 9, 25).Value
|
13 | ret = ret + (amplitude * (Cos((2 * Pi * t / 64) * i + phase)))
|
14 | Next i
|
15 |
|
16 | Cells(t + 9, 28).Value = ret
|
17 |
|
18 | End Sub
|
19 |
|
20 | Sub Regenerate_Click()
|
21 | Dim i As Integer
|
22 |
|
23 | For i = 0 To 63
|
24 | InvFourierNumerisch (i)
|
25 | Next i
|
26 |
|
27 | End Sub
|