Kapitel 3
Wir wollen trigonometrische Polynome verwenden, um das Runge Phänomen zu vermeiden. Ein trigonometrisches Polynom kann man in der reellen
oder in der komplexen Form
schreiben. Beide sind äquivalent, nur andere Darstellungen. Hier ist und die Endpunkte äquivalent. Meistens nehmen wir equally-spaced samples
Mit N samples können wir aber nur circa halb so viele Frequenzen darstellen. Das Nyquist-Limit sagt, dass wir mit N samples höchstens ein polynom von Grad
Dieses Polynom geht genau durch die Messpunkte. Der Nyquist-Effekt passiert, weil wir die Frequenzen und nicht unterscheiden können. Die Frequenzen über geben dieselben Cosinus und negative Sinus Werte.
Für die Messpunkte bekommen wir die Gleichungen
und dieses System können wir auf äquidistanten Punkten lösen.
Orthogonalität
Das dot-product von zwei Funktionen misst, wie sehr sie überlappen.
Es gilt für falls
und für
und immer
Das bedeutet, dass die Frequenzen “unabhängig” sind und wir sie deshalb einzelnd messen können. Wir können das jetzt verwenden, um die Koeffizienten unseres Polynoms zu finden. Wenn wir mit haben und das Polynom von oben
finden wollen, können wir verwenden, dass
Dann gibt den Durschnittswert der Funktion an und die messen, wie stark die Funktion mit den einzelnen Frequenzen korreliert. (Also wie viel von jeder Frequenz in der Funktion “enthalten” ist.)
Komplexe Form
Statt der reellen Form wie oben können wir auch
schreiben. Dann finden wir
und
Diskrete Fourier Transformation
Die DFT lässt uns die Frequenzen aus endlich vielen Messpunkten berechnen. Wir wollen aus Messpunkten das Polynom
finden. Dafür verwenden wir die Einheitswurzeln
welche gleichmässig auf dem Einheitskreis liegen. (Intuitiv gehen wir bei eine n-tel Umdrehung auf dem Einheitskreis.) Diese haben die Eigenschaft
und mit ihnen schreiben wir die Fourier-Matrix
Wir erhalten die Fourier-Koeffizienten aus den Messpunkten mit
und invers die Messpunkte mit
Die DFT kostet , mit der FFT ist es in möglich. Es gilt ausserdem
Schnelle Fourier Transformation
Wir wollen die Fourier-Koeffizienten in berechnen. Dazu teilen wir die Messpunkte in gerade und ungerade auf und verwenden divide-and-conquer. Das berechnete Resultat ist aber dasselbe. Python verwendet in den implementierungen die FFT.
In Python
Eine Anwendung der Fourier Transformation is das Filtern. Wir können ein Signal zuerst in die Frequenzen übersetzen und dann filtern.
y <- samples
coeffs = np.fft.fft(y)
Do some filtering.
filtered_y = np.fft.ifft(y)Wenn wir np.fft.fft benutzen, bekommen wir die Frequenzwerte in einem Array [positive low - positive high - negative high - negative low]. Hier ist der Mittelpunkt bei und die negative Seite spiegelt die positive. Die funktion np.fft.fftshift ordnet sie stattdessen nicht-absteigen sortiert, also [negative high - negative low - positive low - positive high]
Falls wir eine gerade Anzahl an Messpunkten haben, können wir die Funktion wie folgt auf N Punkten auswerten. Falls wir die Ableitung wollen, müssen die drei eingerückten Zeilen auskommentiert werden.
y <- even number of samples
N <- number of equally spaced evaluation points
n = len(y)
m = n // 2
c = fft.fft(y) / n
# mult = np.arange(n)
# mult[m:] = np.arange(-m, 0, 1)
# c *= mult * np.pi * 2 * 1.j
v = np.zeros(N, dtype=complex)
v[:m] = c[:m]
v[N-m:] = c[m:]
v = fft.ifft(v) * N
result <- vAchtung: Statt mit n und N zu dividierten und multiplizieren, können wir auch zuerst ifft(y) und dann fft(v) verwenden. Das ist schneller, aber dann müssen wir bei der Ableitung c mit -1 multiplizieren!
Fehler
Der Fehler konvergiert algebraisch, falls für und exponentiell, falls für .
Falls die Funtion 1-periodisch ist und die Summe der Fourier-Koeffizienten absolut konvergiert, können wir abschätzen
Falls 1-periodisch ist und die maximale Frequenz ist, dann können wir sie genau approximieren, falls . Also wenn für gilt dann
Mehr
- Je glatter eine Funktion, desto schneller konvergiert sie zu ihrer Fourier-Reihe
- Mit Lösen eines linearen Gleichungssystems können wir die Fourier-Koeffizienten immer in berechnen. Für äquidistante Punkte geht es mit FFT in .