» Start » Progs

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:

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:

Die Ausgabe sieht beispielsweise so aus:

Diagramm der Fourierkoeffizienten von 0-2.5 Hz auf der x-Achse und von 0-0.225 RPM auf der y-Achse eines unregelmässig laufenden Motors.

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:

  1. Amplitude des Koeffizienten, in der gleichen Einheit wie die Werte in der Datei.
  2. Phasenlage in Grad gegenüber dem Beginn der Messungen
  3. Frequenz in Hertz des Koeffizienten
  4. Frequenz als Vielfaches der Abtastfrequenz
  5. 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.

Download des Programms

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.