Programm zum Erstellen von FFT-Diagrammen
Zusammenfassung: Die Funktion drawFFT()
ist für das Open Source Programm Scilab geschrieben. Sie zeichnet anhand einer Datei mit hunderttausenden Messwerten ein fertig formatiertes Diagramm der Fourierkoeffizienten. Die Ausgabe erfolgt als PDF für LaTeX vektorisiert, für sonstige Zwecke im als GIF. Mit einer weiteren Funktion namens frequenzspitze()
kann der nummerische Wert von Amplitude, Frequenz und Phasenlage eines Koeffizienten ausgelesen werden.
Die klassische Aufgabe
Während der Studien-, Master- oder Broterwerbs-Arbeit soll eine Messreihe im Frequenzbereich untersucht werden, weil ein Histogramm alleine zu wenig aussagekräftig ist. Typischerweise hat der Ingenieur den Encoder oder Resolver der zu untersuchenden Maschine angezapft und anschliessend die Encoderticks oder Resolverspannung in Winkelgrad oder Hubweg umgerechnet. Oder ein Messgerät hat eine periodische Längen- oder Dickenschwankung festgestellt. Von dieser Messreihe soll nun ein Fourierspektrum gezeichnet werden, welches in ein Text- oder Satzprogramm eingebettet werden kann.
FFT mit der Scilab-Funktion drawFFT()
Gegenüber anderen Programmen hat die von mir gewählte Lösung einige Vorteile:
- Das Programm eignet sich zur Batch-Verarbeitung. Hunderte Diagramme können aufs Mal gezeichnet werden.
- Die Funktion ist für das Open Source Programm Scilab (sprich Psilab) geschrieben, einem Matlab-Klon. Es ist gratis.
- Es können schnell lange Datenreihen verarbeitet werden. Excel hört bei 65000 Zeilen auf und ist schon zuvor sehr langsam.
- Die Diagramme werden fertig beschriftet und mit Einheiten versehen.
- Die Ausgabe erfolgt als Vektorgraphik im .pf-Format für LaTeX (sprich Latech), zur Kontrolle wird auch ein .gif für Word-Benutzer ausgegeben.
- Der Code ist offen, er kann verändert und an die eigenen Bedürftnisse angepasst werden.
Die Bedienung der Funktion erfolgt über eine Kommandozeile, mit allen Vor- und Nachteilen. Zuerst muss die Datei FFT.sci in den Speicher geladen werden. Dies geschieht in Scilab mit dem Befehl exec("FFT.sci");
Anschliessend kann die Funktion drawFFT()
wie folgt aufgerufen werden:
drawFFT(Datei, Titel, Abtastzeit, Pfad, Einheit, Frequenzmaximum)
Die Parameter haben dabei folgende Bedeutung:
- Datei: Pfad zur Datei mit den Messwerten, in Anführungszeichen. Pro Zeile ein Messwert, kein Text in der Datei.
- Titel: Text, welcher im Dateinamen des Diagramms und als Diagrammtitel erscheint. In Anführungszeichen.
- Abtastzeit: Das konstante Zeitintervall zwischen zwei Messungen, in Milisekunden
- Pfad: Pfad zum Verzeichnis, wo das Diagramm gespeichert werden soll. In Anführungszeichen.
- Einheit: Masseinheit der Werte in Datei.
- Frequenzmaximum (freiwillige Angabe): Soll das Diagramm bis zu einer Frequenz gezeichnet werden, die kleiner ist als die halbe Abtastfrequenz, kann diese hier angegeben werden, in Hz.
Die Ausgabe sieht beispielsweise so aus:
Fensterung mit Kaiser
Wie aus der Graphik ersichtlich wird, werden die Daten mit einem Kaiser-Fenster multipliziert. Dabei werden die Messwerte am Anfang und Ende der Messreihe weniger gewichtet, um Artefakte durch die FFT zu vermeiden. Das Kaiser-Fenster ist gemeinhin das beste, besser, aber auch aufwändiger als das beliebte von Hann (engl. Hanning) Fenster. Schwingungen, die nur zu Beginn oder am Ende der Messreihe auftauchen, werden damit abgeschwächt.
Amplitude, Phase und Frequenz eines Peaks bestimmen mit frequenzspitze()
Im Zusammenhang mit FFT ist es häufig interessant, die genaue Frequenz einer Spitze im Spektrum zu kennen. Oder man hat zwei Messgrössen gleichzeitig aufgenommen und ist an der gegenseitigen Phasenlage interessiert. In diesem Fall kommt die Funktion frequenzspitze()
zum Einsatz. Auf einen Aufruf in der Form
frequenzspitze("Dateiname", Abtastzeit)
liefert sie einen Zeilenvektor mit den Eigenschaften des Fourierkoeffizienten mit dem grössten Betrag. Im obigen Beispiel wäre das der Koeffizient mit einer Amplitude über 0.2 RPM. Die ersten paar Koeffizienten (DC-Anteil) werden nicht berücksichtigt. Die Elemente des Vektors haben folgende Bedeutung:
- Amplitude des Koeffizienten, in der gleichen Einheit wie die Werte in der Datei.
- Phasenlage in Grad gegenüber dem Beginn der Messungen
- Frequenz in Hertz des Koeffizienten
- Frequenz als Vielfaches der Abtastfrequenz
- Index des angegebenen Fourierkoeffizienten
Zusätzlich kann die Suche auf ein Intervall beschränkt werden, indem zwei Parameter mit der unteren und der oberen Frequenz angegeben werden. Dies ist dann von Vorteil, wenn man ein Nebenmaximum auslesen möchte, im obigen Beispiel z. B. die Spitze zwischen 0.5 und 0.6 Hz.
Installation von Scilab
Das Programm Scilab ist von der Funktion mit Matlab fast identisch. In der Version 3.1 war Scilab nicht besonders komfortabel zu installieren, daher standen an dieser Stelle Tipps, wie man es zum Laufen kriegt. Mit der Version 5.2 sind diese Probleme jedoch Geschichte, die Installation funktionierte bei mir auf Anhieb, selbst mit 64 bit Windows 7.
Homepage von Scilab welches benötigt wird.
Da ich nicht willens bin, Urheberrechtsverletzer zivilrechtlich zu verfolgen, verzichte ich auf jegliche Ansprüche. Es gehört jedoch zu einer wissenschaftlich korrekten Arbeitsweise, bei der Verwendung des Programms in Arbeiten auf die wahre Urheberschaft hinzuweisen.
Ebenfalls muss davor gewarnt werden, aus einem Fourierspektrum falsche Schlüsse zu ziehen. Welche Frequenzspitzen normal sind und welche ein Problem darstellen ist oft nicht auf den ersten Blick ersichtlich. Durch die Diskretisierung der Daten (nicht durch den Fourier!) handelt man sich Probleme wie Aliasing ein. Die Interpretation der Diagramme erfordert sehr viel Gepür.