Lerninhalte und Abschlussarbeiten

Plattform für digitales Lernen an der HSHL

Kurs: Angewandte Messtechnik

FFT

Die FFT („Fast Fourier Transformation“) ist ein Algorithmus zur Analyse von Signalen im Frequenzbereich.

Aufteilung des Signals nach Frequenzen

Wir gehen ab jetzt davon aus, dass wir mehrere Signale unterschiedlicher Frequenz, Amplitude und Phasenlage überlagert im digitalen Signal vorliegen haben. Das kann z. B. folgendermaßen aussehen, wenn die Zahlen im Speicher (120 Speicherstellen) dargestellt werden:

Zahlenstrom eines Signals aus mehreren überlagerten Anteilen über der Speicherstelle

Dieser Zahlenstrom steht dem FFT-Algorithmus als Eingangsgröße zur Verfügung. Der FFT-Algorithmus gibt als Ergebnis Spitzenwert und Phase zu definierten Frequenzen aus. Wir gehen dabei davon aus, dass sich die Frequenz eines Signalanteils über der Zeit nicht ändert. Damit können wir Anteile des Signals über ihre Frequenz identifizieren. Die Frequenz ist viel besser als der Zeitverlauf dazu geeignet, die Signale voneinander zu separieren und dann zu analysieren. Nach Frequenzen getrennt sieht der obere Zeitverlauf folgendermaßen aus:

Zwei abgetastete Signale unterschiedlicher Frequenz und Amplitude über der Speicherstelle

Werden diese beiden Signale addiert, erhalten wir wieder das ursprüngliche Signal. Nachdem der FFT-Algorithmus die Aufspaltung des Signals in die unterschiedlichen Frequenzen vollzogen hat, ist die Ermittlung der Signalparameter Spitzenwert und Phase einfacher möglich. Die Frequenzen geben Sie dem Algorithmus vor. Wie funktioniert das?

Ermittlung des Spitzenwertes

Der FFT-Algorithmus ist ein auf geringe Rechenzeit optimierter Algorithmus, der deshalb aus seinem Code heraus schwierig nachvollziehbar ist. Stattdessen gehen wir der prinzipiellen Funktionsweise der Fourier-Transformation auf den Grund.
Werden zwei Signale A(t) = A0 ∙ sin (2π ∙ fA ∙ t) und B(t) = B0 ∙ sin (2π ∙ fB ∙ t) gleicher Frequenz fA = fB miteinander multipliziert, sieht das Ergebnis folgendermaßen aus:

Signal A, Signal B gleicher Frequenz und ihr Produkt A·B, das immer positiv ist

Werden zwei Signale A(t) = A0 ∙ sin (2π ∙ fA ∙ t) und B(t) = B0 ∙ sin (2π ∙ fB ∙ t) unterschiedlicher Frequenz fA ≠ fB miteinander multipliziert, sieht das Ergebnis folgendermaßen aus:

Signal A, Signal B unterschiedlicher Frequenz und ihr Produkt A·B mit dem Mittelwert 0

Das graue Signal aus A ∙ B ist in der oberen der beiden Abbildungen nur positiv. In der unteren Abbildung ist es mal positiv und mal negativ. Der Mittelwert des Produkts der Signale ist in der oberen Abbildung eine positive Zahl. Zu jeder Zeit ist das Produkt A ∙ B positiv. In der unteren Abbildung heben sich positive und negative Signalanteile in A ∙ B genau gegenseitig auf, so dass der Mittelwert 0 ist. Wir vereinfachen hier zunächst, dass beide Signale die gleiche Phase haben, also zeitlich nicht zueinander verschoben sind.

Die zentrale Aussage lautet:


Der Mittelwert des Produkts zweier Signale mit unterschiedlicher Frequenz ist gleich 0.

Der Mittelwert des Produkts zweier Signale mit gleicher Frequenz entspricht dem Term A0 ∙ B0 / 2.

Es gilt als Formel:

\[ \begin{gathered} \frac{1}{z} \sum_{n=1}^{z} \left[A_0 \cdot \sin(2\pi f_A \cdot t) \cdot B_0 \cdot \sin(2\pi f_B \cdot t)\right] = 0 \text{ für } f_A \neq f_B \\[8pt] \frac{1}{z} \sum_{n=1}^{z} \left[A_0 \cdot \sin(2\pi f_A \cdot t) \cdot B_0 \cdot \sin(2\pi f_B \cdot t)\right] = \frac{A_0 \cdot B_0}{2} \text{ für } f_A = f_B \end{gathered} \]

Der Parameter t für die Zeit in analogen Signalen wird bei digitalen Signalen zu einem Zähler n. Das sinusförmige abgetastete zeitdiskrete Signal A(t) wird als A(n) aus dem Speicher gelesen. Ein sinusförmiges Signal, das mit 20 Abtastwerten pro Periode digitalisiert worden ist, liegt folgendermaßen im Speicher vor:

nA(n)
0128
1167
2202
3231
4249
5255
6249
7231
8202
9167
10128
1188
1253
1324
146
150
166
1724
1853
1988

Es gilt also

\[ \begin{gathered} \frac{1}{z} \sum_{n=1}^{z} \left[A(n) \cdot B(n)\right] = 0 \text{ für } f_A \neq f_B \\[8pt] \frac{1}{z} \sum_{n=1}^{z} \left[A(n) \cdot B(n)\right] = \frac{A_0 \cdot B_0}{2} \text{ für } f_A = f_B \end{gathered} \]

In vielen Anwendungen wissen wir, in welchem Bereich Frequenzen liegen, die im Signal vorhanden sind. Wenn wir z. B. die Spannung an der Steckdose messen, dann wissen wir, dass die Frequenz f = 50 Hz beträgt. Bei der Leitfähigkeitsmessung aus dem vorherigen Kapitel erzeugen wir ein Signal mit f = 1 kHz. Auch da wissen wir, dass Spannung und Strom beide die Frequenz f = 1 kHz haben. Wir können also testen, ob ein Signal bei einer bestimmten Frequenz vorhanden ist, und wie hoch dessen Spitzenwert ist. Dafür müssen wir das Signal nur mit einem Testsignal mit der Frequenz multiplizieren, bei der wir ein Signal erwarten.

Zurück zum Beispiel der Leitfähigkeitsmessung: Um zu ermitteln, welcher Spitzenwert bei 1 kHz im digitalen Datenstrom der Spannung U enthalten ist, multiplizieren wir den Datenstrom mit einem Testsignal T mit der Frequenz fT = 1 kHz und dem Spitzenwert T0 = 1:

\[ \begin{gathered} T = T_0 \cdot \sin(2\pi \cdot 1\,\mathrm{kHz} \cdot t) \\[8pt] \frac{T_0 \cdot U_0}{2} = \frac{1}{z} \sum_{n=1}^{z} \left[T(n) \cdot U(n)\right] \end{gathered} \]

Das Spannungssignal U(n) kommt aus dem ADC. Das Testsignal wird von uns vorgegeben, also können wir es optimieren. Bei T0 = 1 vereinfacht sich das Ergebnis zu

\[ \begin{gathered} \frac{U_0}{2} = \frac{1}{z} \sum_{n=1}^{z} \left[T(n) \cdot U(n)\right] \\[8pt] U_0 = 2 \cdot \frac{1}{z} \sum_{n=1}^{z} \left[T(n) \cdot U(n)\right] \end{gathered} \]

Mit dieser Formel können wir den Spitzenwert U0 des Signals ermitteln, das als Datenstrom im Speicher abgelegt ist.

Wir betrachten als Beispiel 20 Zahlen für U(n), die nacheinander vom ADC abgetastet worden sind. Der Spitzenwert von U (blau) ist hier 5. Wir betrachten zusätzlich das Testsignal T(n) mit dem Spitzenwert 1 (rot). Die Frequenzen von U und T sind gleich gewählt.

Spannung U, Testsignal T, Produkt U·T und dessen Mittelwert 2,5 über 20 Speicherstellen

In grau sehen Sie den Verlauf von U(n) ∙ T(n) und in gelb den Mittelwert des grauen Signals. Es gilt

\[ U_0 = 2 \cdot \frac{1}{20} \sum_{n=1}^{20} \left[\textcolor{#c00000}{T(n)} \cdot \textcolor{#4472c4}{U(n)}\right] = 2 \cdot \textcolor{#ffc000}{2{,}5} = 5 \]

In der Tabelle unten sehen Sie die zugehörigen Daten aus Excel. Der Mittelwert ganz unten ist der Mittelwert der Zahlen in der rechten Spalte.

nU(n)T(n)U(n) · T(n)
0000
11,545084970,309016990,47745751
22,938926260,587785251,72745751
34,045084970,809016993,27254249
44,755282580,951056524,52254249
5515
64,755282580,951056524,52254249
74,045084970,809016993,27254249
82,938926260,587785251,72745751
91,545084970,309016990,47745751
106,1257E-161,2251E-167,5049E-32
11-1,54508497-0,309016990,47745751
12-2,93892626-0,587785251,72745751
13-4,04508497-0,809016993,27254249
14-4,75528258-0,951056524,52254249
15-5-15
16-4,75528258-0,951056524,52254249
17-4,04508497-0,809016993,27254249
18-2,93892626-0,587785251,72745751
19-1,54508497-0,309016990,47745751
Mittelwert2,5

Anwendung auf viele Frequenzen

Die FFT führt diese Rechnung (sehr stark optimiert) für viele Frequenzen durch, die eine konstanten Abstand zueinander haben. Sie geben dabei die unterste Frequenz, die oberste Frequenz und die Anzahl der Frequenzen gleichen Abstands dazwischen an. Das folgende Beispiel zeigt ein Signal mit zwei Frequenzanteilen:

Eingangsdaten: periodisches Signal aus zwei Sinusanteilen mit Spitzenwert etwa 2,8 V

Es gilt


U (n) = 3 ∙ sin(2π 100Hz ∙ n) + 1,5 ∙ sin(2π 300Hz ∙ n)

Wir multiplizieren nacheinander Testsignale

T1 (n) = 1 ∙ sin(2π 100Hz ∙ n)

T2 (n) = 1 ∙ sin(2π 200Hz ∙ n)

T3 (n) = 1 ∙ sin(2π 300Hz ∙ n)

T4 (n) = 1 ∙ sin(2π 400Hz ∙ n)


mit dem Spannungssignal U(n). Das Ergebnis lautet:

\[ \begin{gathered} U_0@100\,\mathrm{Hz} = 2 \cdot \frac{1}{20} \sum_{n=1}^{20} \left[T_1(n) \cdot U(n)\right] = 3 \\[8pt] U_0@200\,\mathrm{Hz} = 2 \cdot \frac{1}{20} \sum_{n=1}^{20} \left[T_2(n) \cdot U(n)\right] = 0 \\[8pt] U_0@300\,\mathrm{Hz} = 2 \cdot \frac{1}{20} \sum_{n=1}^{20} \left[T_3(n) \cdot U(n)\right] = 1 \\[8pt] U_0@400\,\mathrm{Hz} = 2 \cdot \frac{1}{20} \sum_{n=1}^{20} \left[T_4(n) \cdot U(n)\right] = 0 \end{gathered} \]

Die Spitzenwerte werden also korrekt ermittelt. Die klassische Darstellung der Spitzenwerte bei unterschiedlichen diskreten Frequenzen sieht folgendermaßen aus:

Spitzenwerte über der Frequenz: 3 bei 100 Hz und 1 bei 300 Hz

Sie können im Excel-Sheet unten versuchen, diese Frequenzanalyse selbstständig zu programmieren.

Übung zu Fourier-Transformation (Excel)

Phasen

Bisher hatten wir vereinfacht, dass die Phasen aller Signale 0 sind. Alle Signalanteile sind zueinander also nicht zeitlich verschoben. Das ist in realen Messsignalen aber nicht der Fall. Deshalb brauchen wir eine allgemeinere Lösung. Um Spitzenwerte und Phasen zu ermitteln, multiplizieren wir das Eingangssignal pro Test-Frequenz mit zwei Testsignalen, die um 90° oder π / 2 zueinander phasenverschoben sind:


TSin = 1 ∙ sin(2π ∙ f ∙ t)

TCos = 1 ∙ cos(2π ∙ f ∙ t)

Sie erhalten damit Realteil und Imaginärteil des Eingangssignals bezogen auf die Phase des Testsignals. Es gilt

\[ \begin{gathered} RE = 2 \cdot \frac{1}{z} \sum_{n=1}^{z} \left[T_{\mathrm{Cos}}(n) \cdot U(n)\right] \\[8pt] IM = 2 \cdot \frac{1}{z} \sum_{n=1}^{z} \left[T_{\mathrm{Sin}}(n) \cdot U(n)\right] \end{gathered} \]

Spitzenwert und Phase berechnen Sie mit

\[ \begin{gathered} U_0 = \sqrt{RE^2 + IM^2} \\[6pt] \varphi = \arctan\left(\frac{IM}{RE}\right) \end{gathered} \]

Aufgabe: Verschieben Sie einen Signalanteil einer Frequenz im Excel-Beispiel in der Phase. Programmieren Sie die Auswertung so, dass Phase und Spitzenwert aller Frequenzanteile richtig errechnet werden.

Kurs als PDF herunterladen

Das PDF enthält alle Seiten des Kurses. Interaktive Inhalte (Lernbücher, Videos, Simulationen) gibt es nur auf der Webseite.