Bild 1: Ein Signal (rot) lässt sich durch eine Reihe sinusförmiger Grund- und Oberwellen (blau) darstellen.

Bild 1: Ein Signal (rot) lässt sich durch eine Reihe sinusförmiger Grund- und Oberwellen (blau) darstellen.Wikipedia

Im Zeitbereich lassen sich Amplitude, Frequenz oder Periodendauer von Signalen und deren Anstiegs- oder Abfallzeiten messen. Typische Messsysteme sind Oszilloskope oder Logikanalysatoren. Im Frequenzbereich werden andere Signalparameter analysiert, etwa die Frequenzkomponenten des Signals, deren Amplituden und Phasen. Das Arbeiten im Frequenzbereich vereinfacht die Manipulation von Signalen, vor allem wegen der Leichtigkeit, mit der sich eine Faltung (convolution) ausführen lässt. Die Faltung ist eine mathematische Methode zur Kombination zweier Signale mit der Formung eines dritten. Ein typisches Messsystem dafür ist der Spektrumanalysator.

Eckdaten

Für viele FPGA-Anwendungen ist eine digitale Signalverarbeitung im Frequenzbereich notwendig, wenn es um frequenzselektive Signalfilterung geht oder Informationen aus Amplitude und Phasenlage isoliert werden müssen. Unterschiedliche Algorithmen für eine DFT oder FFT sowie deren Rücktransformation können bei der Hardware-Konfiguration in Form von fertigen IP-Modulen eingebunden werden. Lässt sich im GHz-Bereich die Nyquist-Rate (mindestens zwei Samples pro Zyklus) nicht mehr aufrechterhalten, ermöglicht die Transformation in den Frequenzbereich das Arbeiten mit Spiegelfrequenzen.

Für die Entwicklung bestimmter FPGA-Anwendungen eignet sich der Zeitbereich, beispielsweise für Systeme, die Spannungs- oder Temperaturverläufe verfolgen. Rauschen ist dabei problematisch, doch meist genügt die Mittelwertbildung einer Messreihe als Maßnahme. In anderen Applikationen ist die Verwendung des Frequenzbereichs günstiger, etwa wenn Signale gefiltert oder von Rauschanteilen getrennt werden müssen.

Das Arbeiten im Zeitbereich erfordert wenig Post-Processing am quantisierten Signal, denn die Abtastung findet ebenfalls im Zeitbereich statt. Im Unterschied dazu erfordert die Arbeit im Frequenzbereich eine Transformation der quantisierten Zeitbereichsdaten. Die Ausgabe der bearbeiteten Daten benötigt dann eine inverse Transformation zurück in den Zeitbereich.

Welche Signaltransformation ist am besten geeignet?

Je nach vorliegendem Signaltyp (repetitiv oder nicht-repetitiv, diskret oder nicht diskret) bieten sich verschiedene Methoden zum Übergang vom Zeit- in den Frequenzbereich: Fourier-Serien, Fourier-Transformation und Z-Transformation. Bei FPGA-Applikationen wird die diskrete Fourier-Transformation (DFT), als Sonderfall der allgemeinen Fourier-Transformation, bevorzugt. Sie wird bei der Analyse von periodischen und diskreten Signalfolgen eingesetzt, deren Bit-Samples bei einer bestimmten Sampling-Frequenz gleichmäßig verteilt sind. In vielen Applikationen wird diese vom AD-Wandler (ADC) des Systems geliefert.

Bild 2: Eine Korrelation des Signals mit seinen Oberwellen (DFT) liefert die Spektrallinien im Frequenzbereich.

Bild 2: Eine Korrelation des Signals mit seinen Oberwellen (DFT) liefert die Spektrallinien im Frequenzbereich.Wikipedia

Die DFT stellt ein Eingangssignal durch eine Reihe von Sinus- und Cosinus-Oberwellen dar. Deshalb liefert die DFT für eine Zeitsequenz von N Samples die Anzahl N/2+1 Cosinus-Oberwellen (Realanteile) und genauso viele Sinus-Oberwellen (Imaginäranteile). Die Länge der realen und imaginären Samples ist n/2 für ein Eingangssignal mit der Länge von n Bits.

Der Algorithmus zur Berechnung der DFT ist recht einfach: (Formel 1 im Bild)

Ein Zeitbereichssignal wird in einem Zeitfenster N mal abtgetastet. x[i] steht somit für den jeweiligen Abtastwert des Zeitbereichssignals zum Zeitpunkt i, wobei i von 0 bis N-1 läuft. Der Index k läuft von 0 bis N/2 und gibt die Ordnung der Oberwelle an.

Formel 1: Diskrete Fourier-Transformation (DFT)

Formel 1: Diskrete Fourier-Transformation (DFT)

Diese sogenannte Korrelationsmethode multipliziert für jeden Abtastzeitpunkt das Eingangssignal mit der jeweiligen Cosinus- beziehungsweise Sinus-Oberwelle und errechnet aus Summe alle Produkte einen Koeffizienten. Nach k = N/2 Schleifendurchläufen (Iterationen) stehen somit jeweils N/2 Koeffizienten für den Real- und Imaginärteil zur Verfügung, die sich im Frequenzbereich als Spektrallinen darstellen lassen.

Natürlich möchte der Entwickler an einem bestimmten Punkt der Applikation wieder in den Zeitbereich übergehen. Dazu lässt sich die folgende Gleichung zur Kombination der realen und imaginären Signalanteile in ein Zeitbereichssignal anwenden:
(Formel 2 im Bild)

Formel 2: Inverse diskrete Fourier-Transformation (IDFT)

Formel 2: Inverse diskrete Fourier-Transformation (IDFT)

ReX und ImX sind skalierte Versionen der Sinus- und Cosinus-Oberwellen und müssen entsprechend umgeformt werden. Also werden ImX[k] oder ReX[k] durch N/2 dividiert, um die Werte für ReX und ImX zu bilden. Ausgenommen sind ReX[0] und ReX[N/2], in diesem Fall werden sie durch N dividiert. Diese Operation heißt inverse diskrete Fourier-Transformation (IDFT).

Zur DFT-Berechnung lassen sich Tools wie Octave, MATLAB und Excel nutzen. Auch sind viele Oszilloskope in der Lage, eine DFT auszuführen. Man sollte aber nicht vergessen, dass die oben dargestellte DFT und IDFT als reale DFT und reale IDFT bezeichnet werden, denn der Signaleingang besteht aus realen und nicht aus komplexen Zahlen. Darauf gehen wir im Folgenden näher ein.

Einsatz der diskreten Fourier-Transformation

Von der Telekommunikation bis zur Bildverarbeitung, von Radar bis Sonar, gibt es kaum eine leistungsfähigere und leichter adaptierbare Analysetechnik als die Fourier-Transformation. Die DFT ist Grundlage vieler FPGA-basierter Applikationen. Dort dient sie zur Erzeugung der Koeffizienten für FIR-Filter (finite input response).

Die DFT ist aber nicht auf Filterung beschränkt. DFT und IDFT werden in der Telekommunikation zur Channelization und Rekombination der Datenkanäle eingesetzt. Bei der Spektralanalyse dienen sie zur Bestimmung der Frequenzen, die in den überwachten Bändern präsent sind. In der Bildverarbeitung werden sie zur Faltung mit einem Filter-Kernel zur Mustererkennung eingesetzt. Allerdings führen diese Applikationen die DFT meist mit einem effizienteren Algorithmus als dem oben beschriebenen aus.

FPGA-basierte Implementierung

Die DFT- und IDFT-Implementierung geschieht oft in Form einer verschachtelten Schleife, wobei jede Schleife N Berechnungen durchführt. Der Zeitbedarf der DFT-Berechnung ist

DFT-Dauer = N · N · KDFT

Darin ist KDFT die Verarbeitungszeit für jede auszuführende Iteration. Das kann recht zeitraubend zu implementieren sein. Aus diesem Grund wird die DFT in FPGAs meist mit einem Algorithmus implementiert, der als Fast Fourier Transform (FFT) bezeichnet wird. FFT gilt als der wichtigste Algorithmus der Signalverarbeitung, denn er hat große Auswirkungen auf sehr viele industrielle Einsatzbereiche.

Der FFT-Algorithmus unterscheidet sich in gewissen Aspekten von der DFT, denn er berechnet eine komplexe DFT. Er berücksichtigt also reale und imaginäre Zeitbereichssignale und liefert entsprechende Ergebnisse im Frequenzbereich: mit der Länge von n Bit, im Unterschied zu n/2. Will man also eine reale DFT berechnen, muss zunächst der Imaginärteil auf Null gesetzt und damit das Zeitsignal in den Realteil verlegt werden.

Zur Implementierung einer FFT innerhalb eines Xilinx-FPGA bieten sich zwei Optionen: Entweder der Entwickler erstellt eine FFT von Grund auf mit Hilfe einer HDL (Hardware Description Language), oder er nutzt einen entsprechenden IP-Block (Intellectual property core, vorgefertigter Funktionsblock eines Chipdesigns) aus dem IP-Katalog der Vivado Design Suite oder ähnlichen. Wenn keine dringenden Gründe dagegen sprechen, IP-Blöcke zu nutzen, ist die mit dem Xilinx-FPGA-Kern erzielte Verringerung der Entwicklungszeit ausschlaggebend für die Wahl eines geeigneten Funktionsblocks.

DFT vorwärts und rückwärts

Das grundlegende Verfahren der FFT ist die Zerlegung des Zeitbereichssignals in eine Reihe einzelner Zeitbereichssignale. Dieser Prozess wird oft als Bitumkehr (reversal) bezeichnet, da die Samples umgeordnet werden. Die Anzahl der Schritte zur Erstellung dieser Einzelpunkt-Zeitbereichssignale ergibt sich zu log2 (N). Darin ist N die Zahl der Bits, wenn kein Bit-Reversal-Algorithmus als Abkürzung verwendet wird.

Diese Einzelpunkt-Zeitbereichssignale dienen anschließend zur Berechnung der Frequenzspektren für jeden dieser Punkte. Die Operation ist recht einfach, da das Frequenzspektrum gleich dem des Single-Point-Zeitbereichs ist.

Wo der FFT-Algorithmus komplizierter wird, ist die Rekombination dieser einzelnen Frequenzpunkte. Die Rekombination der Spektralpunkte Schritt für Schritt ist Gegenstück zur Zerlegung im Zeitbereich. Deshalb werden log2 (N) Schritte zur Erstellung der Spektren benötigt.

Im Vergleich zur Ausführungszeit einer DFT benötigt die FFT

FFT-Zeit = KFFT · N log2 (N)

wbei KFFT die Verarbeitungszeit für jede auszuführende Iteration ist.

Das entspricht gegenüber der DFT einer signifikanten Verbesserung.

Bei der Implementierung einer FFT in einem FPGA ist die FFT-Größe (Anzahl der Koeefizienten) zu berücksichtigen. Diese bestimmt den Grundrauschpegel (noise floor), unterhalb dessen die potenziell interessierenden Signale nicht erkennbar sind. Die FFT-Größe bestimmt auch die Intervallbreite der Spektrallinien (Bin). Mit der folgenden Gleichung kann die erforderliche FFT-Größe bestimmt werden:

RauschenFFT (dB) =
6,02 n + 1,77 + 10 log10 (GrößeFFT / 2).

Darin ist n die Anzahl der quantisierten Bits im Zeitbereich. Bei der FPGA-basierten Implementierung ist dies normalerweise eine Potenz von Zwei, also 256, 512, 1024, und so weiter. Die Spektrallinien haben im Frequenzspektrum eine bestimmte Intervallbreite:

IntervallbreiteFFT = (Fs / 2) / GrößeFFT

Dazu ein einfaches Beispiel: Eine Sampling-Frequenz (FS) von 100 MHz ergibt bei einem FFT-Umfang von 128 eine Frequenzauflösung von 0,39 MHz. Frequenzen mit einem Abstand von 0,39 MHz und weniger lassen sich damit nicht mehr unterscheiden.

Sampling mit höherer Geschwindigkeit

Bild 4: Nyquist-Zonen und Aliasing. Ist die Abtastfrequenz fs eines ADC am Limit und liegt fa zu dicht daneben (Verletzung Abtasttheorem), kann mit dem gespiegelten Signal I in der ersten Nyquistzone weitergearbeitet werden.

Bild 4: Nyquist-Zonen und Aliasing. Ist die Abtastfrequenz fs eines ADC am Limit und liegt fa zu dicht daneben (Verletzung Abtasttheorem), kann mit dem gespiegelten Signal I in der ersten Nyquistzone weitergearbeitet werden.Xilinx

Viele Applikationen in FPGAs und High-Performance-Systemen arbeiten bei sehr hohen Frequenzen. Das kann bei der FFT-Implementierung Probleme bereiten. Bei hohen Frequenzen lässt sich die Nyquist-Rate (mindestens zwei Samples pro Zyklus) nicht mehr aufrechterhalten.

Dies erfordert also eine andere Herangehensweise. Ein Beispiel wäre der Einsatz eines A/D-Wandlers zum Sampeln eines analogen Eingangssignals mit 3 GHz (Vollausteuerung) und einer Samplerate von 2,5 GHz. Entsprechend der Nyquist-Rate werden Signale oberhalb von 1,25 GHz in die erste verwendbare Nyquist-Zone zurück gespiegelt (aliased). Diese gespiegelten Images sind Harmonische (harm) des Grundsignals (fund), die somit dieselbe Information enthalten wie das nicht gespiegelte Signal. Dazu Bild 4.

Zur Bestimmung des Frequenzortes der Harmonischen dient der folgende Algorithmus:

fharm = N · ffund

IF (fharm = Odd Nyquist Zone)

   floc = fharm Mod fharm

ELSE

   floc = ffund – (fharm Mod ffund)

END

Darin gibt N die Ordnung der interessierenden Harmonischen an.

Wenn wir unser Beispiel mit einer Samplerate von 2500 MHz und einer Grundschwingung von 1807 MHz weiter verfolgen, ergibt sich eine Harmonische bei 693 MHz innerhalb der ersten Nyquist-Zone, die sich mit der vorliegenden FFT weiterbearbeiten lässt.

Bild 5: Aufgespaltete und kombinierte FFT-Strukturen.

Bild 5: Aufgespaltete und kombinierte FFT-Strukturen.Xilinx

Der nächste wichtige Gesichtspunkt ist die Auslegung der ADC- und DAC-Schnittstellen zum FPGA. Es ist nicht möglich, die Daten aus dem ADC mit FS/2 zu erhalten, wenn wie im obigen Beispiel die Sampling-Frequenz 2,5 GBit/s beträgt. Aus diesem Grunde verwenden High-Performance Datenwandler digitale Eingangs- und Ausgangssignale im Multiplex, bei einer geringeren Datenrate gegenüber der Samplerate des Wandlers, typischerweise FS/4 oder FS/2.

Nach der Ausgabe der Daten aus dem FPGA als einzelne Datenströme ist die Frage, wie man diese Daten innerhalb des FPGA verarbeitet, um eine DFT durchzuführen. Eine häufig eingesetzte Methode in vielen Applikationen wie Telekommunikation und Radioastronomie ist die Verwendung von kombinierten oder aufgespalteten FFT-Strukturen (Bild 5). Obwohl dies komplizierter ist als eine einfache FFT, lässt sich damit eine wesentlich schnellere Verarbeitung erreichen.

Die für die Signalverabreitung notwendige Transformation zwischen Zeit- und Frequenzbereich mithilfe der Fourier-Transfomation ist insbesonder bei Verwendung von IP-Blöcken gar nicht so schwierig, wie mancher anfangs Entwickler denken mag.