-
TECHNISCHES GEBIET
-
Ausführungsformen der Erfindung beziehen sich allgemein auf Digitalsignalverarbeitung und insbesondere auf Beschleuniger der schnellen Fourier-Transformation („FFT“).
-
ALLGEMEINER STAND DER TECHNIK
-
Das Verhalten elektromagnetischer Signale kann im Zeitbereich (z.B. wie die Signalamplitude mit der Zeit variiert) sowie im Frequenzbereich (d.h. die verschiedenen Frequenzkomponenten, aus denen sich das Signal zusammensetzt) analysiert werden. Die Fourier-Transformation setzt diese zwei Bereiche mathematisch zueinander in Beziehung, und aufgrund ihrer Allgegenwärtigkeit über Signalverarbeitungsanwendungen hinweg wurden Anstrengungen unternommen, ihre Ausführung rechnerisch zu beschleunigen - daher die vielen FFT-Ansätze. Weiterhin kann ein Signal als eine kontinuierliche Wellenform analysiert werden, oder in der Digitalsignalverarbeitung (DSP) als ein großer Satz von Zeitbereichspunkten. Für DSP-Anwendungen kann ein FFT-„Butterfly“-Algorithmus genutzt werden, um eine diskrete Fourier-Transformation („DFT“) eines Signals zu berechnen, das in digitaler Form dargestellt ist. Der Algorithmus teilt die Punkte in Teilsätze auf (in einem Prozess, der als „Dezimation“ bekannt ist), berechnet die DFT jedes Teilsatzes und verarbeitet dann die Ergebnisse der DFT jedes Teilsatzes, um ein Endergebnis zu erzeugen, das aus einem Satz von Frequenzbereichspunkten besteht. Die Teilsätze können so klein sein, dass sie jeweils nur ein paar (oder sogar nur einen) Zeitbereichspunkte enthalten, wodurch die DFT jedes Teilsatzes trivial wird - die DFT eines einzelnen Punkts ist einfach der Punkt selbst. Zum Beispiel kann ein Anfangssatz von 1024 Zeitbereichspunkten zu 1024 Teilsätzen von jeweils einem Punkt dezimiert werden; die Teilsätze werden dann sorgfältig verarbeitet, kombiniert und zu einem Frequenzbereichsergebnis mit 1024 Punkten zusammengeführt.
-
Der Großteil des Rechenaufwands des Algorithmus liegt in der Verarbeitung der Teilsätze. Die Verarbeitung erfolgt in einer Reihe von Stufen, in denen die Teilsätze zuerst zu Zwischenergebnissen verarbeitet werden, die Zwischenergebnisse weiter verarbeitet werden, und so weiter, bis der letzte Satz von Frequenzbereichspunkten erzeugt ist. Jede Stufe weist eine Mehrzahl von parallelen Operationen auf, die jeweils n Eingabepunkte gleichzeitig verarbeiten, um n Ausgabepunkte zu erzeugen - der Wert n ist als die „Radix“ des FFT-Algorithmus bekannt. Da ein Datenflussdiagramm einer Operation mit Radix-2 (d.h. einer Radix mit einem Wert von zwei) einem Schmetterling ähnelt (wie in 1A gezeigt, in der die Punkte x0 , x1 entsprechend den Gleichungen y0 = x0 + x1 und y1 = x0 - x1 zu Punkten y0 , y1 verarbeitet werden), sind diese Operationen als Butterfly-Operationen oder Butterflys bekannt. Operationen mit anderen Radices sind ebenfalls als Butterfly-Operationen bekannt (wie beispielsweise die Radix-4-Operation, die in 1B gezeigt ist).
-
Es existieren viele verschiedene Abwandlungen des oben beschriebenen Grundalgorithmus. Zum Beispiel trennt eine FFT mit Dezimierung in der Zeit die ursprünglichen Zeitbereichspunkte (und weitere Unterteilungen) in ungerade und gerade Gruppen, während eine FFT mit Dezimierung in der Frequenz die ursprünglichen Zeitbereichspunkte (und weitere Unterteilungen) in erste und zweite Hälften trennt. Eine In-Place-FFT führt die Transformation nur mit dem Speicherplatz durch, der erforderlich ist, um die ursprünglichen Abtastwerte aufzunehmen (mit dem Nachteil, dass Routing und Steuerungslogik komplizierter sind), während eine Konstantgeometrie-FFT (auch als Konstanttopologie-FFT bekannt) nur einfaches Routing und einfache Steuerungslogik erfordert (mit dem Nachteil, dass zusätzlicher Speicherplatz erforderlich ist).
-
Zum Beispiel erfordert eine In-Place-Implementierung, die eine FFT an einer Zeitbereichseingabe mit
1024 Punkten durchführen kann, einen Speicher, der nur groß genug ist, um die
1024 Punkte aufzunehmen, erfordert jedoch, dass die Punkte für jede Stufe der Rekombination der Punkte in verschiedenen Mustern gelesen werden. Unter der Annahme, dass die In-Place-Implementierung Radix-4 und Dezimierung in der Zeit ist (wenngleich eine ähnliche Analyse auf jede In-Place-Implementierung Anwendung findet), sind fünf Stufen erforderlich, um die
1024 Punkte zu rekombinieren (da log
4 (1024) = 5). In der ersten Stufe empfängt der erste von 256 Radix-4-Butterflys die Punkte
0,
1,
2,
3; der zweite Radix-4-Butterfly empfängt die Punkte
4,
5,
6,
7; und so weiter. Die Ergebnisse jeder Butterfly-Operation werden in denselben Speicherplatz zurück geschrieben, der die ursprünglichen
1024 Punkte aufnahm. In der zweiten Stufe empfängt der erste Butterfly die Punkte 0, 4, 8, 12, und der zweite Butterfly empfängt die Punkte 1, 5, 9, 13; in der dritten Stufe empfängt der erste Butterfly die Punkte 0, 16, 32,
48, und der zweite Butterfly empfängt die Punkte
1,
17,
33,
49. Im Allgemeinen ist die Eingabe des ersten Radix-4-Butterflys für Stufe drei und darüber hinaus als
gegeben, und ist für den zweiten Butterfly
und so weiter, wobei i die Stufenzahl ist.
-
Es können zwei verschiedene Ansätze genutzt werden, um die verschiedenen Lesemuster zu implementieren, die für die In-Place-FFT erforderlich sind, wobei jeder seine eigenen Nachteile aufweist. In einem ersten Ansatz können vier verschiedene Speicherbänke genutzt werden, wobei jede imstande ist, 1024 Punkte zu speichern, so dass in jedem Zyklus vier Punkte aus den vier Speicherbänken gelesen werden können, entsprechend Gleichung (1). Offensichtlich vervierfacht diese Ausgestaltung den erforderlichen Speicherplatz. Ein weiterer herkömmlicher Ansatz nutzt eine einzelne Datenbank, erfordert jedoch komplizierte Hardware (z.B. Logik und Puffer), um die verschiedenen Lesemuster zu unterstützen. Ein Konstantgeometrie-Ansatz erfordert gleichermaßen zusätzlichen Speicher. Es besteht daher ein Bedarf an schnellen, effizienten FFT-Techniken und Prozessoren, die nur ein einfaches Routingschema erfordern und keinen zusätzlichen Speicherplatz nutzen.
-
KURZDARSTELLUNG
-
Im Allgemeinen nutzen verschiedene Ausführungsformen der hierin beschriebenen Systeme und Verfahren sowohl Konstantgeometrie als auch In-Place-Butterflys, um eine FFT eines Satzes von eingegebenen Zeitbereichspunkten zu berechnen. In einer Ausführungsform wird eine Mehrzahl von Konstantgeometrie-Butterflys an Teilsätzen der Eingabepunkte durchgeführt; jeder Konstantgeometrie-Butterfly weist eine Transposition der Daten auf. Wenn die Mehrzahl von Konstantgeometrie-Butterflys abgeschlossen ist, kehren die Eingabepunkte in ihre ursprüngliche oder „natürliche“ Reihenfolge zurück. Eine oder mehrere In-Place-Operationen kann dann nach Bedarf durchgeführt werden, um die Punktegruppen zu kombinieren. Zum Beispiel kann eine FFT mit Dezimierung in der Zeit mit 1024 Punkten fünf Stufen von Radix-4-Butterfly-Operationen nutzen. Die ersten drei Stufen können mithilfe von Konstantgeometrie-Operationen an sechzehn 64-Punkte-Teilsätzen der 1024 Punkte berechnet werden; die letzen zwei Stufen können mithilfe eines In-Place-FFT-Verfahrens berechnet werden.
-
In einem Aspekt enthält ein Verfahren zur rechnerischen Durchführung einer schnellen Fourier-Transformation („FFT“) an n Punkten Aufteilen der n Punkte in eine Mehrzahl von Gruppen von m Punkten, wobei m < n, und Durchführen einer Mehrzahl von Konstantgeometrie-FFTs an jeder der Gruppen von m Punkten. Jede Konstantgeometrie-FFT enthält (i) Lesen der m Punkte aus einem Computerspeicher in einen Eingabepuffer; (ii) rechnerisches Anwenden einer Butterfly-Operation auf jeden der m Punkte; (iii) Schreiben von Ergebnissen der Butterfly-Operation in einen Ausgabepuffer; und (iv) Speichern transponierter Inhalte des Ausgabepuffers an dem ursprünglichen Ort der m Punkte in dem Computerspeicher, wodurch die ursprünglichen m Punkte überschrieben werden. Es wird mindestens eine In-Place-FFT an den Ergebnissen der Mehrzahl von Konstantgeometrie-FFTs durchgeführt, die in dem Computerspeicher gespeichert sind, wodurch die FFT der n Punkte abgeschlossen wird.
-
N kann 2x sein, wobei x eine Ganzzahl ist; m kann 64 sein. Die Butterfly-Operation kann Radix-2 oder Radix-4 sein. Der Computerspeicher kann ein Einzelportspeicher sein; nur ein Lese- oder Schreibzugriff darauf kann in einem Zyklus erfolgen. Das Durchführen der In-Place-FFT kann Schreiben der m Punkte in eine andere Art von Eingabepuffer enthalten. Das Schreiben der m Punkte in die andere Art von Eingabepuffer kann die Transposition von Inhalten durch den Ausgabepuffer aufheben. N ist möglicherweise kein Vielfaches von m; Punkte können den n Punkten hinzuaddiert werden, bis die Gesamtzahl von Punkten ein Vielfaches von m ist.
-
In einem anderen Aspekt enthält ein System zur Durchführung einer schnellen Fourier-Transformation („FFT“) an n Punkten einen Eingabepuffer zum Empfangen eines Teilsatzes (von m Punkten) der n Punkte, eine Butterfly-Einheit zum Durchführen einer Butterfly-Operation an den m Punkten; einen Ausgabepuffer (der einen Ausgabeanschluss zur Transposition von Datenpunkten aufweist, die darin gespeichert sind) zum Empfangen eines Ergebnisses der Butterfly-Operation und Steuerungslogik zum Anweisen der Butterfly-Einheit, eine Mehrzahl von Konstantgeometrie-Butterfly-Operationen durchzuführen, auf die mindestens eine In-Place-Butterfly-Operation folgt.
-
Ein lokaler Speicher (z.B. ein Einzelportspeicher und/oder ein Speicher von zwei Bänken) kann die n Punkte speichern. Ein Eingabe-FIFO kann die n Punkte von einem externen Speicher empfangen, und ein Ausgabe-FIFO kann die n Punkte an einen externen Speicher senden. Der Eingabepuffer kann einen ersten Typen von Eingabepuffer für Konstantgeometrie-Butterflys und einen zweiten Typen von Eingabepuffer für In-Place-Butterflys aufweisen.
-
In einem anderen Aspekt enthält ein Verfahren zur rechnerischen Durchführung einer schnellen Fourier-Transformation („FFT“) Durchführen einer Anzahl von Stufen von In-Place-FFTs an allen n Punkten und Aufteilen der n Punkte in eine Mehrzahl von Gruppen von m Punkten, wobei m < n. Dann Durchführen mindestens einer Stufe einer Konstantgeometrie-FFT, wodurch die FFT der n Punkte abgeschlossen wird. Jede Konstantgeometrie-FFT enthält (i) Lesen der m Punkte aus einem Computerspeicher in einen Eingabepuffer; (ii) rechnerisches Anwenden einer Butterfly-Operation auf die transponierten Inhalte des Eingabepuffers; (iii) Schreiben von Ergebnissen der Butterfly-Operation in einen Ausgabepuffer; und (iv) Speichern der Inhalte des Ausgabepuffers an dem ursprünglichen Ort der m Punkte in dem Computerspeicher, wodurch die ursprünglichen m Punkte überschrieben werden. N kann 2x sein, wobei x eine Ganzzahl ist, und m kann 64 sein. Die Butterfly-Operation kann Radix-2 oder Radix-4 sein. Der Computerspeicher kann ein Einzelportspeicher sein; nur ein Lese- oder Schreibzugriff darauf kann in einem Zyklus erfolgen.
-
Diese und andere Aufgaben werden zusammen mit Vorteilen und Merkmalen der vorliegenden Erfindung, die hierin offenbart wird, durch Bezugnahme auf die folgende Beschreibung, die begleitenden Zeichnungen und die Ansprüche ersichtlicher. Ferner versteht es sich, dass die Merkmale der verschiedenen Ausführungsformen, die hierin beschrieben werden, sich nicht gegenseitig ausschließen und in verschiedenen Kombinationen und Permutationen vorliegen können.
-
Figurenliste
-
In den Zeichnungen beziehen sich gleiche Bezugszeichen im Allgemeinen auf dieselben Teile in den verschiedenen Ansichten. In der folgenden Beschreibung werden verschiedene Ausführungsformen der vorliegenden Erfindung unter Bezugnahme auf die folgenden Zeichnungen beschrieben, in denen:
- 1A und 1B beispielhafte Butterfly-Operationen veranschaulichen;
- 2A und 2B FFT-Beschleuniger entsprechend Ausführungsformen der Erfindung veranschaulichen;
- 3 eine Implementierung eines FFT-Beschleunigers gemäß einer Ausführungsform der Erfindung schematisch veranschaulicht;
- 4A und 4B Verfahren zur Berechnung einer FFT gemäß Ausführungsformen der Erfindung veranschaulichen;
- 5 und 6 eine erste Stufe einer FFT-Operation und die Inhalte eines Speichers danach gemäß der Ausführungsform der Erfindung veranschaulichen, die in 4A gezeigt ist;
- 7 und 8 eine zweite Stufe einer FFT-Operation und die Inhalte eines Speichers danach gemäß der Ausführungsform der Erfindung veranschaulichen, die in 4A gezeigt ist;
- 9 und 10 eine dritte Stufe einer FFT-Operation und die Inhalte eines Speichers danach gemäß der Ausführungsform der Erfindung veranschaulichen, die in 4A gezeigt ist;
- 11 vierte und nachfolgende Stufen einer FFT-Operation gemäß der Ausführungsform der Erfindung veranschaulicht, die in 4A gezeigt ist; und
- 12 ein Beispiel-Zeitdiagramm zur Durchführung einer FFT-Operation gemäß der Ausführungsform der Erfindung veranschaulicht, die in 4A gezeigt ist.
-
DETAILLIERTE BESCHREIBUNG
-
In verschiedenen Ausführungsformen der vorliegenden Erfindung wird ein eingegebener Satz von Zeitbereichspunkten (z.B. 512, 1024 oder eine beliebige andere Anzahl von Punkten) in eine Mehrzahl von kleineren Gruppen von Punkten (z.B. 16, 64 oder 256 Punkten) aufgeteilt. Eine Reihe von Konstantgeometrie-Butterfly-Operationen wird an jeder der aufgeteilten Gruppen durchgeführt; jede Gruppe kann getrennt und/oder parallel berechnet werden, da die Berechnung jeder Gruppe möglicherweise nicht von den Ergebnissen einer anderen abhängt. Die Punkte jeder Gruppe werden in jeder Konstantgeometrie-Operation transponiert, und nach einer bestimmten Anzahl der Operationen (z.B. drei) kehren die Punkte in ihre natürliche Reihenfolge zurück. Eine oder mehrere In-Place-Butterfly-Operationen können dann durchgeführt werden, um die getrennten Gruppen teilweise berechneter Ergebnisse zu kombinieren.
-
Eine Ansicht der obersten Ebene 200 eines FFT-Beschleunigers 202 gemäß der vorliegenden Erfindung ist in 2A gezeigt. In dieser Ausführungsform kommuniziert der FFT-Beschleuniger 202 mit den anderen Systemkomponenten (z.B. einem Hauptspeicher, einem Allzweckprozessor und/oder einem Digitalsignalprozessor) mithilfe einer Einheit 204 für direkten Speicherzugriff („DMA“) und eines Busses 206 (der ein AXI-Bus sein kann) . Der Fachmann wird jedoch verstehen, dass der FFT-Beschleuniger 202 mit anderen Systemkomponenten mithilfe einer beliebigen Busarchitektur und/oder eines beliebigen Speicherzugriffsprotokolls kommunizieren kann.
-
Der FFT-Beschleuniger 202 ist in 2B genauer gezeigt, in welcher eingehende Daten (z.B. von einem Hauptspeicher) in einem Dateneingang 208 empfangen werden. Der FFT-Beschleuniger 202 führt gemäß Ausführungsformen der vorliegenden Erfindung und nachstehend näher erläutert eine FFT an den Daten durch und gibt die verarbeiteten Daten an einem Ausgabeanschluss 210 aus. Die ein- und ausgehenden Daten können in First-In-First-Out- („FIFO-“) Puffern gemäß eingehenden Lese- und Schreibsignalen 212 und ausgehenden Datenbereitschafts- und Datenanforderungssignalen 214 gespeichert werden. Der FFT-Beschleuniger 202 kann andere Signale empfangen oder übertragen, wie beispielsweise Takt-, Reset- oder Registerlese-/-schreibsignale; die aktuelle Erfindung ist jedoch nicht auf bestimmte Sätze von Eingabe-, Ausgabe- oder Steuerungssignalen beschränkt, und der Fachmann wird verstehen, dass der FFT-Beschleuniger 202 mit mehr oder weniger Ein- oder Ausgaben implementiert werden kann.
-
Ein Blockdiagramm einer Implementierung 300 des FFT-Beschleunigers 202 ist in 3 gezeigt. In dieser Ausführungsform werden eingehende Daten 208 in einem Eingabe-FIFO 302 empfangen und in lokalen Speichern 304, 306 gespeichert. Teilsätze der Daten werden aus den lokalen Speichern 304, 306 in ein oder mehrere Eingabe-Butterfly-Register B0-B3 gelesen; eine Butterfly-Einheit 308 führt eine herkömmliche Butterfly-Operation an den Daten durch, die in den Eingabe-Butterfly-Registern B0-B3 gespeichert sind. Wie der Fachmann verstehen wird, kann die Butterfly-Einheit 308 eine Digitallogik-Berechnungseinheit sein, die dafür ausgelegt ist, einen oder mehrere Typen von Butterfly-Operationen durchzuführen. Ergebnisse der Butterfly-Operationen werden in einem oder mehreren Ausgabe-Butterfly-Registern D2-D3 gespeichert und dann in die lokalen Speicher 304, 306 zurück geschrieben. Die Daten können die Butterfly-Einheit 308 mehrmals durchlaufen, wie nachstehend näher erläutert. Sobald die FFT abgeschlossen ist, werden die Daten als Vorbereitung auf die Ausgabe durch den Ausgabeanschluss 210 in ein Ausgabe-FIFO 310 geschrieben. Wie der Fachmann verstehen wird, kann ein Steuerungsmodul 312 genutzt werden, um die verschiedenen Steuerungssignale (z.B. Lese-, Schreib-, Adressierungs- und Multiplex- (mux-) Steuerung) zu erzeugen, die in dem FFT-Beschleuniger 202 genutzt werden, jedoch sind beliebige Typen von Steuerungslogik und/oder -modulen im Umfang der aktuellen Erfindung enthalten. In einer Ausführungsform wird ein Twiddlefaktor-Generator 314 genutzt, um der Butterfly-Einheit 308 Steuerungssignale zuzuführen.
-
Die vorliegende Erfindung ist jedoch nicht auf die bestimmte Ausführungsform beschränkt, die in 3 gezeigt ist, und andere Ausgestaltungen des Systems 300 sind im Umfang der vorliegenden Erfindung enthalten. Zum Beispiel befinden sich die Butterfly-Register B0-B3 an der Ausgabe der Butterfly-Einheit 308, und die Butterfly-Register D2-D3 befinden sich an der Eingabe der Butterfly-Einheit 308. Entweder die B- oder die D-Butterfly-Register können die Daten auf ihrem Weg durch die Butterfly-Einheit 308 transponieren. In einer Ausführungsform sind die Butterfly-Register, welche die Transposition durchführen, Sätze von Ping-Pong-Registern; eins von dem Paar von Ping-Pong-Registern wird dafür genutzt, Daten zu empfangen, während das andere von dem Paar von Ping-Pong-Registern (das bereits mit Daten befüllt ist) dafür genutzt wird, Daten der Butterfly-Einheit 308 zuzuführen. Wenn das erste des Paars von Ping-Pong-Registern befüllt ist und das zweite von dem Paar von Ping-Pong-Registern alle seine Daten der Butterfly-Einheit 308 zugeführt hat, werden ihre Rollen umgekehrt, und das erste von dem Paar wird dafür genutzt, die Butterfly-Einheit 308 zu versorgen, und das zweite empfängt neue Daten. In einer Ausführungsform sind vier Eingaberegister und vier Ausgaberegister vorhanden; jedes Register kann dazu ausgebildet sein, entweder ein B- oder ein D-Register zu sein und/oder Daten gemäß einem oder mehreren Steuerungssignalen zu transponieren, wie es eine Anwendung erfordert. In anderen Ausführungsformen sind weniger als vier Eingabe- und/oder Ausgaberegister vorhanden; die vorliegende Erfindung ist nicht auf eine bestimmte Anzahl oder einen bestimmten Typ von Eingabe- oder Ausgaberegister beschränkt.
-
Ein Verfahren 400 zur Durchführung einer FFT gemäß einer Ausführungsform der vorliegenden Erfindung ist in 4A veranschaulicht. In einem ersten Schritt 402 wird ein eingegebener Satz von n Zeitbereichspunkten in eine Mehrzahl von Gruppen von m Punkten aufgeteilt. In einem zweiten Schritt 404 kann jede Gruppe unabhängig verarbeitet werden (z.B. wird die gesamte oder ein Teil der Verarbeitung parallel durchgeführt). Für jede Gruppe werden in einem dritten Schritt 406 die m Punkte in einen Eingabepuffer (z.B. aus einem System oder lokalen Speicher) eingelesen. In einem vierten Schritt 408 wird eine Butterfly-Operation (z.B. eine Butterfly-Operation, die in jeder Iteration an denselben Bitpositionen wirkt) auf jeden der m Punkte angewandt. In einem fünften Schritt 410 werden die Ergebnisse in einen Ausgabepuffer geschrieben, und in einem sechsten Schritt 412 werden die Ergebnisse transponiert, wenn sie in den Speicher zurück geschrieben werden. Die Schritte drei bis sechs 406-412 können wiederholt werden, bis die m Punkte in ihre natürliche Reihenfolge in dem Speicher zurückkehren. Die Schritte drei bis sechs 406-412 schließen die Konstantgeometrie-FFT-Operationen an jedem der m Punkte effektiv ab; die Ausdrücke „Konstantgeometrie-FFT-Operationen“ und/oder „Konstantgeometrie-FFT“ können sich bei dieser bestimmten Ausführungsform der Erfindung auf die Schritte 406-412 beziehen. In einem siebten Schritt 414 werden nach Bedarf eine oder mehrere FFTs an den n Punkten (d.h. allen Gruppen) durchgeführt, um die FFT-Operation abzuschließen. 4B veranschaulicht ein verwandtes Verfahren 450, bei dem in einem ersten Schritt 451 eine Anzahl von In-Place-Butterfly-Stufen auf alle n Punkte angewandt wird. Bei Schritt 452 werden die n Punkte in eine Mehrzahl von m Punkten aufgeteilt. Für jede Gruppe werden bei Schritt 454 die m Punkte in den Eingabepuffer eingelesen. Bei Schritt 455 wird eine Butterfly-Operation auf die transponierten Inhalte in dem Eingabepuffer angewandt. Bei Schritt 456 wird das Butterfly-Ergebnis in den Ausgabepuffer geschrieben. Bei Schritt 457 werden die Inhalte des Ausgabepuffers zurück in den Speicher gespeichert. Die Schritte 454 bis 457 schließen die Konstantgeometrie-FFT-Operationen an jedem der m Punkte effektiv ab. Nachdem die Schritte 454 bis 457 der Konstantgeometrie-FFT-Operationen für alle Gruppen wiederholt wurden, wobei jede m Punkte aufweist, ist die gesamte FFT-Berechnung abgeschlossen, und die Daten, die in dem Speicher gespeichert sind, entsprechen dem FFT-Ergebnis.
-
Ausführlicher auf Schritt 402 zurückkommend, können die n Punkte in einem Systemspeicher gespeichert werden (und zum Beispiel über einen Systembus 206 zugreifbar sein) und in einen lokalen Speicher geladen werden (z.B. die lokalen Speicher 304, 306). In anderen Ausführungsformen können der Systemspeicher oder der lokale Speicher 304, 306 exklusiv genutzt werden; die vorliegende Erfindung ist auf keine bestimmte Speicherbeschaffenheit beschränkt. Die n Punkte können zeitlich gestaffelt in einen Block oder in verschiedene Blöcke geladen werden. Der Eingabe-FIFO 302 kann genutzt werden, um Unterschiede bei der Geschwindigkeit des Systems und lokaler Speicher auszugleichen. Die Anzahl der Gruppen und Größe m jeder Gruppe kann auf der Radix der Butterfly-Operation 308 basieren. In einer Ausführungsform nutzt die Butterfly-Einheit 308 eine Radix-4-Butterfly-Operation, und m ist 64, jedoch liegen andere Radixgrößen und Werte von m im Umfang der vorliegenden Erfindung. Wenn die Gesamtzahl der Datenpunkte n kein ganzzahliges Vielfaches von m ist, können zufällige Werte den tatsächlichen Datenpunkten hinzuaddiert werden, um eine Anzahl von Punkten zu erzeugen, die ein Vielfaches von m ist.
-
Beispielausführungsformen des dritten bis sechsten Schritts 406-412 sind in den 5-10 veranschaulicht (für den Fall, dass m 64 ist, sind insgesamt 3 (z.B., log4(64)) Stufen von Konstantgeometrie-FFT-Operationen vorhanden. 5 veranschaulicht die Konstantgeometrie-FFT der ersten Stufe, die eine Butterfly-Operation 500 an 64 Datenpunkten durchführt. Das Eingabe-Butterfly-Register B0 wird mit Eingabedaten beladen, die Indizes 0...31 aufweisen (d.h. Daten in ihrer ursprünglichen, „natürlichen“ Reihenfolge). Die Daten, die jedem Index entsprechen, stellen einen Punkt dar und können beliebige Werte aufweisen und eine beliebige Anzahl von Bits einnehmen; die vorliegende Erfindung ist auf kein bestimmtes Datenformat beschränkt. Die Zahlen hierin beziehen sich auf den Datenindex, nicht auf tatsächliche Datenpunkte (die bei jeder Butterfly-Operation den Wert ändern).
-
Die ersten 32 Datenpunkte werden in Acht-Bit-Gruppen 502 geladen, und das Register B0 wird in der Reihenfolge von rechts nach links beladen. Das Eingaberegister B0 wird erneut mit Eingabedaten, die Indizes 32...63 aufweisen, in Gruppen mit acht Punkten 504 beladen. Werte, die im Register B0 gespeichert sind, werden in Gruppen mit vier Punkten 506, 508 ausgegeben und auf die Butterfly-Einheit 308 angewandt.
-
Werte mit vier Punkten 510, 512, die von der Butterfly-Einheit 308 ausgegeben werden, werden in den Ausgabe-Butterfly-Registern D2, D3 gespeichert. Die Werte, die in den Ausgaberegistern D2, D3 gespeichert sind, können in derselben Reihenfolge erscheinen wie im Eingaberegister B0, können aber in einer anderen, transponierten Reihenfolge 514, 516 ausgelesen werden. Mit anderen Worten, in dieser ersten Stufe werden Datenpunkte in einer ersten Reihenfolge gelesen, die der Vorlage 0, 1, 2, 3, 4, 5, 6, 7 entspricht, und in einer Reihenfolge ausgelesen, die der Vorlage 0, 4, 8, 12, 16, 20, 24, 28 entspricht. Die verarbeiteten Punkte können dann gemäß dieser transponierten Reihenfolge über die ursprünglichen 0 ...63 Punkte zurück in den Speicher (z.B. den lokalen Speicher 304, 306 oder Systemspeicher) geschrieben werden. 6 veranschaulicht die Inhalte 600 des Speichers nach dem Befüllen; die unteren 32 Punkte 602 werden mit einem ersten Satz verarbeiteter Punkte befüllt, die abwechselnd aus den Ausgaberegistern D2, D3 gefüllt werden - das heißt, die ersten acht Punkte 606 werden mit Daten befüllt, die den Indizes 0, 4, 8, 12, 16, 20, 24, 28 entsprechen, die zuerst aus dem Register D2 gelesen werden, die zweiten acht Punkte 608 werden mit Daten befüllt, die den Indizes 32, 36, 40, 44, 48, 52, 56, 60 entsprechen, die zuerst aus dem Register D3 gelesen werden, und so weiter.
-
5 und 6 veranschaulichen die Konstantgeometrie-FFT der ersten Stufe, die an den Eingabedaten durchgeführt wird, die Indizes 0...63 aufweisen (so wie die 7-10, wie nachstehend näher erläutert wird), und 11 veranschaulicht eine In-Place-FFT, die an den Daten durchgeführt wird. Gemäß 4B, und wie der Fachmann verstehen wird, kann die In-Place-FFT zuerst durchgeführt werden (d.h. für die Operationen, die 11 entsprechen), und die Konstantgeometrie-FFT(s) kann bzw. können danach durchgeführt werden (z.B. gemäß der Operation bzw. den Operationen, die den 4A/4B und 5-10 entsprechen).
-
Die Konstantgeometrie-FFT-Operation 700 der zweiten Stufe ist in 7 veranschaulicht. Die zweite Operation 700 befüllt das Eingaberegister B0 auf dieselbe Art und Weise (d.h. mithilfe derselben Indexorte in derselben Reihenfolge) wie die erste Operation 500, da jedoch der Speicher 304, 306 mit einer anderen Reihenfolge von Punkten neu geschrieben wurde, wird das Register B0 mit Punkten befüllt, die andere Indizes aufweisen. Während die erste Operation 500 zum Beispiel das Register B0 mit einer ersten Gruppe 502 von Punkten 0, 1, 2, 3, 4, 5, 6, 7 befüllt hat, befüllt die zweite Operation das Register B0 mit einer ersten Gruppe 702 von Punkten 0, 4, 8, 12, 16, 20, 24, 28 gemäß den ersten acht Punkten 606 im Speicher. Das Register B2 wird in ähnlicher Weise befüllt, Butterfly-Operationen werden wieder an den Daten durchgeführt, und die Register D2, D3 werden wieder mit den Ergebnissen befüllt. Wenn die Daten aus den Registern D2, D3 ausgelesen werden, werden die Punkte wieder gemäß der Vorlage 0, 16, 32, 48, 1, 17, 33, 49 transponiert, wie in der Gruppe 704 gezeigt. Die Inhalte der Ausgaberegister D2, D3 werden wieder genutzt, um die Daten zu überschreiben, die im Speicher vorhanden sind, wie in 8 gezeigt. Die Gruppe 704 füllt zum Beispiel die ersten acht Punkte 802 in den Speicher.
-
Die Konstantgeometrie-FFT-Operation 900 der dritten Stufe wird mithilfe der Werte ausgeführt, die in der zweiten Operation 700 berechnet werden, und die Register B0, B1 werden wieder mit den Inhalten des Speichers befüllt. Eine erste Gruppe 902 von Werten, die zum Beispiel in das Register B0 geschrieben werden, entspricht den ersten acht Punkten 802 des Speichers. Das Auslesen der verarbeiteten Daten aus den Registern D2, D2 enthält eine weitere Transpositionsoperation; nach diesen drei Transpositionsoperationen erscheinen die Daten, die aus den Registern D2, D3 ausgelesen werden, wieder in ihrer natürlichen, ursprünglichen Reihenfolge. Die ersten Werte 904, die aus dem Register D2 ausgelesen werden, weisen beispielsweise die Indizes 0, 1, 2, 3, 4, 5, 6, 7 auf, und die ersten Werte 906, die aus dem Register D3 ausgelesen werden, weisen die Indizes 8, 9, 10, 11, 12, 13, 14, 15 auf. 10 veranschaulicht, wie der Speicher 1000 nun mit Daten befüllt wird, welche die Indizes 0... 63 aufweisen, wie sie bereits eingelesen wurden.
-
Jede 64-Bit-Gruppe des ursprünglichen Satzes von Eingabedaten wird in ähnlicher Weise drei Konstantgeometrie-FFT-Operationen unterzogen (entweder seriell durch dieselbe Butterfly-Einheit 308 oder parallel mithilfe zusätzlicher FFT-Beschleunigereinheiten). Sobald drei Konstantgeometrie-FFT-Operationen an jeder 64-Bit-Gruppe durchgeführt sind, können die Gruppen kombiniert werden, indem eine oder mehrere Butterfly-Operationen an all den Gruppen durchgeführt werden. Bei Radix-4 kann zum Beispiel eine FFT mit 256 Punkten eine vierte Stufe erfordern, eine FFT mit 1024 Punkten kann eine fünfte Stufe erfordern, und so weiter. Für diese nachfolgenden In-Place-Stufen können die Register B2 und B3 anstelle der Register B0 und B1 genutzt werden, wie in einer beispielhaften vierten Operation 1100 in 11 gezeigt ist. Die Register B2, B3 lesen Daten in einer bestimmten Reihenfolge 1102, so dass die Daten 1104, 1106, die aus den Registern D2, D3 ausgelesen werden, untransponiert bleiben.
-
Wie der Fachmann verstehen wird, kann eine Konstantgeometrie-FFT-Operation zusätzlichen Speicherplatz erfordern, um während der Operation einige oder alle der Eingabe-Datenpunkte aufzunehmen (im Austausch für den Nutzen einfachen Routings und einfacher Steuerungslogik). In einer Ausführungsform wird dieser zusätzliche Speicherplatz durch die Puffer B0-B3 und D2-D3 bereitgestellt; Datenpunkte werden ausgelesen und „im Flug“ [in-flight] in einem oder mehreren der Register B0-B3 und D2 -D3 gespeichert, bevor sie anschließend an den Abschluss einer Butterfly-Stufe mit aktualisierten Werten wieder geschrieben werden. Alternativ oder zusätzlich kann zusätzlicher Speicherplatz in den Speichern 304, 306 genutzt werden. Zum Beispiel können 64 Extrapunkte als temporärer Speicher für eine FFT-Operation mit 512 Punkten genutzt werden.
-
Eine Ausführungsform eines Zeitdiagramms 1200, das die Speicherung „im Flug“ [in-flight] implementiert, ist in 12 gezeigt. Das Zeitdiagramm 1200 bildet eine vierstufige FFT-Operation mit 512 Punkten ab, in der die Register B0, B1 in den Stufen eins, zwei und drei und die Register B2, B3 in Stufe vier genutzt werden. Die Zahlen im Diagramm 1200 spiegeln die Zyklen wieder, in denen jede Operation erfolgt; in der ersten Stufe wird zum Beispiel das Register B0 in den Zyklen 0, 2, 4, 6 befüllt (als „0→6:2“ dargestellt, wie in „Zyklen 0 bis 6 in 2er-Stufen“). Sobald alle Daten im Zyklus 6 angekommen sind, wird eine Butterfly-Operation in den Zyklen 7→17 durchgeführt, und das Register D2 wird in den Zyklen 11→18 mit den Ergebnissen befüllt (unter Berücksichtigung der Latenz in der Butterfly-Einheit 308). Die Ergebnisse werden in den Zyklen 19→25:2 zurück in den Hauptspeicher geschrieben; diese Ergebnisse überschreiben die ursprünglichen Daten, aber erst nachdem sie genutzt wurden und nicht mehr benötigt werden. Andere Datenpunkte werden in anderen Stufen in andere Register B1, B2, B3 geladen und gemäß dem Zeitdiagramm 1200 verarbeitet; der Rest der Datenpunkte wird in ähnlicher Weise zurück in denselben Speicherplatz in den Speichern 304, 306 geschrieben.
-
In einer Ausführungsform sind die Speicher 304, 306 Einzelportspeicher (d.h. sie weisen einen einzelnen gemeinsam genutzten Mechanismus auf, um die im Inneren enthaltenen Speicherzellen zu lesen und zu beschreiben). Wie der Fachmann verstehen wird, können Einzelportspeicher kleiner, einfacher, zuverlässiger sein und/oder weniger Energie verbrauchen als Mehrportspeicher. Das Zeitdiagramm 1200 spiegelt ein Muster von Lese- und Schreibvorgängen auf die Speicher 304, 306 wieder, die eine Einzelportimplementierung davon gestatten. Die Speicher 304, 306 werden gelesen, um die Register B0-B3 zu befüllen, und aus den Registern D2, D3 beschrieben; diese Lese- und Schreibvorgänge sind zeitlich so festgelegt, dass sie in verschiedenen Zyklen erfolgen. In einer Ausführungsform erfolgen die Lesevorgänge in geradzahligen Zyklen und die Schreibvorgänge in ungeradzahligen Zyklen, wie im Diagramm 1200 gezeigt. Zum Beispiel werden die Speicher 304, 306 aus dem Register D3 am Ende von Stufe eins in den Zyklen 43, 45, 47, 49 beschrieben, während in Stufe zwei das Register B1 in den Zyklen 40, 42, 44, 46 und das Register B0 in den Zyklen 48, 50, 52, 54 befüllt wird. Der Fachmann wird verstehen, dass verschiedene Lese-/Schreibmuster und oder verschiedene Zyklen im Umfang der aktuellen Erfindung liegen.
-
Es sollte auch beachtet werden, dass Ausführungsformen der vorliegenden Erfindung als ein oder mehrere computerlesbare Programme bereitgestellt werden können, die auf oder in einem oder mehreren Fertigungsartikeln ausgebildet sind. Der Fertigungsartikel kann eine beliebige geeignete Hardwarevorrichtung sein, wie beispielsweise eine Diskette, eine Festplatte, eine CD-ROM, eine CD-RW, eine CD-R, eine DVD-ROM, eine DVD-RW, eine DVD-R, eine Flash-Speicherkarte, ein PROM, ein RAM, ein ROM oder ein Magnetband. Im Allgemeinen können die computerlesbaren Programme in einer beliebigen Programmiersprache implementiert sein. Einige Beispiele für Sprachen, die genutzt werden können, sind C, C++ oder JAVA. Die Softwareprogramme können ferner in Maschinensprache oder Anweisungen für virtuelle Maschinen übersetzt und in einer Programmdatei in jener Form gespeichert werden. Die Programmdatei kann dann auf oder in einem oder mehreren der Fertigungsartikel gespeichert werden.
-
Bestimmte Ausführungsformen der vorliegenden Erfindung wurden oben beschrieben. Es wird jedoch ausdrücklich darauf hingewiesen, dass die vorliegende Erfindung nicht auf jene Ausführungsformen beschränkt ist, sondern es ist vielmehr beabsichtigt, dass Zusätze und Modifikationen zu dem, was hierin ausdrücklich beschrieben wurde, ebenfalls im Umfang der Erfindung enthalten sind. Darüber hinaus versteht es sich, dass sich die Merkmale der verschiedenen hierin beschriebenen Ausführungsformen nicht gegenseitig ausschlossen und in verschiedenen Kombinationen und Permutationen vorliegen können, selbst wenn derartige Kombinationen oder Permutationen hierin nicht ausdrücklich zum Ausdruck gebracht wurden, ohne vom Geist und Umfang der Erfindung abzuweichen. Tatsächlich werden Variationen, Modifikationen und andere Implementierungen dessen, was hierin beschrieben wurde, dem Durchschnittsfachmann einfallen, ohne vom Geist und Umfang der Erfindung abzuweichen. Daher soll die Erfindung nicht nur durch die vorangehende erläuternde Beschreibung definiert sein.