Schnelle Fourier-Transformation

Ein Beispiel FFT-Algorithmusstruktur unter Verwendung einer Zersetzung in halbgroße FFTs
Eine diskrete Fourier -Analyse einer Summe von Cosinus -Wellen bei 10, 20, 30, 40 und 50 Hz

A Schnelle Fourier-Transformation (Fft) ist ein Algorithmus das berechnet die diskrete Fourier-Transformation (DFT) einer Sequenz oder ihrer inversen (IDFT). Fourier -Analyse konvertiert ein Signal aus seiner ursprünglichen Domäne (oft Zeit oder Raum) in eine Darstellung in der Frequenzbereich und umgekehrt. Das DFT wird durch Zersetzung a erhalten Reihenfolge von Werten in Komponenten unterschiedlicher Frequenzen.[1] Dieser Vorgang ist in vielen Bereichen nützlich, aber es ist oft zu langsam, sie direkt aus der Definition zu berechnen, um praktisch zu sein. Eine FFT berechnet solche Transformationen schnell durch Faktorisierung das DFT -Matrix in ein Produkt von spärlich (meistens Null) Faktoren.[2] Infolgedessen schafft es die Reduzierung der Komplexität von der DFT von berechnen , was entsteht, wenn man einfach die Definition von DFT anwendet, um auf , wo ist die Datengröße. Der Geschwindigkeitsunterschied kann enorm sein, insbesondere für lange Datensätze, bei denen N Kann in den Tausenden oder Millionen sein. In Anwesenheit von RundenfehlerViele FFT -Algorithmen sind viel genauer als die DFT -Definition direkt oder indirekt. Es gibt viele verschiedene FFT -Algorithmen, die auf einer Vielzahl von veröffentlichten Theorien basieren, von einfach komplexes Arithmetik zu Gruppentheorie und Zahlentheorie.

Schnelle Fourier -Transformationen werden häufig verwendet Anwendungen In Ingenieurwesen, Musik, Wissenschaft und Mathematik. Die grundlegenden Ideen wurden 1965 populär gemacht, aber einige Algorithmen waren bereits 1805 abgeleitet.[1] Im Jahr 1994, Gilbert Strang beschrieb die FFT als "das Wichtigste Numerischer Algorithmus von unserem Leben ",[3][4] und es wurde in den Top 10 Algorithmen des 20. Jahrhunderts von der enthalten IEEE Zeitschrift Computing in Science & Engineering.[5]

Die bekanntesten FFT-Algorithmen hängen von der ab Faktorisierung von N, aber es gibt FFTs mit Ö(NProtokollN) Komplexität für alle N, sogar für Prime N. Viele FFT -Algorithmen hängen nur von der Tatsache ab, dass ist ein N-Th primitive Wurzel der Einheitund kann so auf analoge Transformationen über jeden angewendet werden endliches Feld, wie zum Beispiel zahlentheoretische Transformationen. Da der inverse DFT das gleiche ist wie der DFT, aber mit dem entgegengesetzten Zeichen im Exponenten und einem 1////N Faktor, jeder FFT -Algorithmus kann leicht dafür angepasst werden.

Geschichte

Die Entwicklung schneller Algorithmen für DFT kann auf verfolgt werden Carl Friedrich Gauß's unveröffentlichte Arbeit im Jahr 1805, als er es brauchte, um die Umlaufbahn von Asteroiden zu interpolieren Pallas und Juno Aus Probenbeobachtungen.[6][7] Seine Methode war der 1965 veröffentlichten Methode sehr ähnlich von James Cooley und John Tukey, denen allgemein für die Erfindung des modernen generischen FFT -Algorithmus zugeschrieben wird. Während Gaußs Arbeit sogar vorliegt Joseph FourierIn den Ergebnissen von 1822 analysierte er die Berechnungszeit nicht und verwendete schließlich andere Methoden, um sein Ziel zu erreichen.

Zwischen 1805 und 1965 wurden einige Versionen von FFT von anderen Autoren veröffentlicht. Frank Yates 1932 veröffentlichte seine Version genannt Interaktionsalgorithmus, was zur Verfügung stellte Effiziente Berechnung von Hadamard- und Walsh -Transformationen.[8] Der Algorithmus von Yates wird immer noch auf dem Gebiet des statistischen Designs und der Analyse von Experimenten verwendet. 1942, G. C. Danielson und Cornelius Lanczos veröffentlichte ihre Version, um DFT für zu berechnen Röntgenkristallographie, ein Feld, in dem die Berechnung von Fourier -Transformationen einen beeindruckenden Engpass darstellte.[9][10] Während sich viele Methoden in der Vergangenheit darauf konzentriert hatten, den konstanten Faktor für zu verringern Berechnung durch Nutzung von "Symmetrien" stellten Danielson und Lanczos fest analysieren, dies führte zu Skalierung.[11]

James Cooley und John Tukey haben diese früheren Algorithmen unabhängig wiederentdeckt[7] und veröffentlicht a Allgemeiner Fft 1965 ist das anwendbar, wenn N ist zusammengesetzt und nicht unbedingt eine Leistung von 2 sowie die Analyse der Skalierung.[12] Tukey hatte die Idee während eines Treffens von Präsident Kennedy's Science Advisory Committee, bei dem ein Diskussionsthema dazu beinhaltete, Atomtests der Sowjetunion zu erkennen, indem Sensoren für die Umgebung des Landes von außen eingerichtet wurden. Um den Ausgang dieser Sensoren zu analysieren, wäre ein FFT -Algorithmus erforderlich. In Diskussion mit Tukey, Richard Garwin Erkannte die allgemeine Anwendbarkeit des Algorithmus nicht nur auf nationale Sicherheitsprobleme, sondern auch auf eine Vielzahl von Problemen, einschließlich eines von unmittelbarem Interesse, das die Periodizität der Spinorientierungen in einem 3-D-Kristall von Helium-3 bestimmt.[13] Garwin gab Tukeys Idee Cooley (beide arbeiteten bei IBMs Watson Labs) Für die Umsetzung.[14] Cooley und Tukey veröffentlichten das Papier in einer relativ kurzen Zeit von sechs Monaten.[15] Da Tukey bei IBM nicht arbeitete, wurde die Patentierbarkeit der Idee bezweifelt und der Algorithmus ging in die Öffentlichkeitsbereich, was durch die Computerrevolution des nächsten Jahrzehnts FFT zu einem der unverzichtbaren Algorithmen in machte digitale Signalverarbeitung.

Definition

Lassen ,…, sein komplexe Zahlen. Das DFT wird durch die Formel definiert

wo ist ein Primitive NDie Wurzel von 1.

Die direkte Bewertung dieser Definition erfordert direkt Operationen: Es gibt N Ausgänge Xkund jeder Ausgang erfordert eine Summe von N Bedingungen. Eine FFT ist jede Methode, um die gleichen Ergebnisse zu berechnen Operationen. Alle bekannten FFT -Algorithmen erfordern OperationenObwohl es keinen Beweis gibt, dass eine geringere Komplexität unmöglich ist.[16]

Um die Einsparungen eines FFT zu veranschaulichen, berücksichtigen Sie die Anzahl komplexer Multiplikationen und Ergänzungen für N= 4096 Datenpunkte. Die direkte Bewertung der DFT -Summen beinhaltet direkt N2 Komplexe Multiplikationen und N(N - 1) komplexe Ergänzungen, von denen Operationen können gespeichert werden, indem triviale Operationen wie Multiplikationen um 1 beseitigt werden, wobei rund 30 Millionen Operationen zurückbleiben. Im Gegensatz dazu der Radix-2 Cooley -Tukey -Algorithmus, zum N Eine Leistung von 2 kann das gleiche Ergebnis nur mit (nur mit (N/2) Protokoll2(N) komplexe Multiplikationen (erneut ignorieren Vereinfachungen von Multiplikationen mit 1 und ähnlich) und NProtokoll2(N) Komplexe Ergänzungen insgesamt etwa 30.000 Operationen - tausendmal weniger als bei direkter Bewertung. In der Praxis wird die tatsächliche Leistung auf modernen Computern normalerweise von anderen Faktoren als der Geschwindigkeit von arithmetischen Operationen dominiert, und die Analyse ist ein kompliziertes Thema (z. B. siehe Frigo & siehe Johnson, 2005),[17] Aber die allgemeine Verbesserung von zu Überreste.

Algorithmen

Cooley -Tukey -Algorithmus

Der mit Abstand am häufigsten verwendete FFT ist der Cooley -Tukey -Algorithmus. Das ist ein Divide-and-Conquer-Algorithmus das rekursiv bricht eine DFT von jedem ab zusammengesetzt Größe in viele kleinere DFTs von Größen und , zusammen mit Multiplikationen mit Komplex Wurzeln der Einheit traditionell genannt Twiddle -Faktoren (Nach Gentleman und Sande, 1966[18]).

Diese Methode (und die allgemeine Idee eines FFT) wurde durch eine Veröffentlichung von Cooley und Tukey im Jahr 1965 populär gemacht.[12] aber es wurde später entdeckt[1] dass diese beiden Autoren einen Algorithmus, der bekannt ist Carl Friedrich Gauß Um 1805[19] (und anschließend mehrmals in begrenzten Formen wieder entdeckt).

Die bekannteste Verwendung des Cooley -Tukey -Algorithmus besteht darin, die Transformation in zwei Größe der Größe zu unterteilen N/2 bei jedem Schritt und ist daher auf zwei Zweigrößen beschränkt, aber jede Faktorisierung kann im Allgemeinen verwendet werden (wie es sowohl Gauß als auch Cooley/Tukey bekannt war[1]). Diese werden die genannt Radix-2 und gemischtes Radix Fälle (bzw. andere Varianten wie die Split-Radix FFT habe auch ihre eigenen Namen). Obwohl die Grundidee rekursiv ist, ordnen die meisten herkömmlichen Implementierungen den Algorithmus neu an, um eine explizite Rekursion zu vermeiden. Da der Cooley -Tukey -Algorithmus das DFT in kleinere DFTs zerlegt, kann er willkürlich mit jedem anderen Algorithmus für die DFT kombiniert werden, wie sie unten beschrieben sind.

Andere FFT -Algorithmen

Es gibt andere FFT -Algorithmen als Cooley -tukey.

Zum N = N1N2 mit Coprime N1 und N2, man kann das verwenden Prime-Faktor (Good -Thomas) -Algorithmus (PFA), basierend auf dem Chinesischer Rest -Theorem, um die DFT ähnlich wie Cooley -tukey zu faktorisieren, jedoch ohne die Twiddle -Faktoren. Der Rader -Brenner -Algorithmus (1976)[20] ist eine Cooley-tukey-ähnliche Faktorisierung, aber mit rein imaginären Twiddle-Faktoren, wodurch die Multiplikationen auf Kosten erhöhter Ergänzungen reduziert und verringert werden Numerische Stabilität; es wurde später von der ersetzt Split-Radix Variante von Cooley -tukey (die die gleiche Multiplikationsanzahl, jedoch mit weniger Ergänzungen und ohne Opfergenauigkeit erreicht). Algorithmen, die die DFT rekursiv in kleinere Operationen als DFTs faktorisieren, umfassen die Bruun- und QFT -Algorithmen. (Der Rader -Brenner[20] und QFT-Algorithmen wurden für zwei2er Größen vorgeschlagen, aber es ist möglich, dass sie an allgemeine Komposit angepasst werden können N. Der Algorithmus von Bruun gilt für willkürliche, gleichmäßige Verbundgrößen.) Bruuns Algorithmusinsbesondere basiert auf der Interpretation der FFT als rekursive Faktorisierung der Polynom zN-1, hier in real-zoeffizienische Polynome der Form zM- 1 und z2M+AZM+1.

Ein weiterer polynomialer Standpunkt wird vom Winograd FFT -Algorithmus ausgenutzt.[21][22] was faktorisiert zN- 1 in Zyklotomische Polynome-Diese haben häufig Koeffizienten von 1, 0 oder –1 und erfordern daher nur wenige (falls vorhanden) Multiplikationen, sodass Winograd verwendet werden kann, um FFTs mit minimaler Multiplikation zu erhalten, und wird häufig verwendet, um effiziente Algorithmen für kleine Faktoren zu finden. In der Tat zeigte Winograd, dass die DFT nur mit O (nur O () berechnet werden kannN) irrationale Multiplikationen, was zu einer nachgewiesenen erreichbaren niedrigeren Größenzahl für die Anzahl der zwei2er Größen führt; Leider ist dies zu so viel mehr Ergänzungen, ein Kompromiss für die moderne Kompromisse Prozessoren mit Hardware -Multiplikatoren. Insbesondere winograd nutzt auch das PFA sowie einen Algorithmus von Strahl für FFTs von Prime Größen.

Rader -Algorithmus, die Existenz von a ausnutzen Generator für das multiplikative Gruppe Modulo Prime Ndrückt eine DFT von Primgröße aus N als zyklisch Faltung von (zusammengesetzter) Größe N - 1, das dann durch ein Paar gewöhnlicher FFTs über die berechnet werden kann Faltungssatz (Obwohl Winograd andere Faltungsmethoden verwendet). Ein weiterer FFT in Prime-Größe ist L. I. Bluestein und manchmal als das genannt Chirp-Z-Algorithmus; Es exprimiert auch eine DFT als Faltung, aber diesmal der gleich Größe (die zu einem Null-Padd zu a Kraft von zwei und bewertet beispielsweise durch Radix-2 Cooley-Tukey-FFTs) über die Identität

Hexagonal Fast Fourier Transformation (HFFT) zielt darauf ab, einen effizienten FFT für die hexagonal-Sampled-Daten mithilfe eines neuen Adressierungsschemas für hexagonale Gitter mit dem Namen Array Set Addressing (ASA) zu berechnen.

FFT -Algorithmen spezialisiert auf reale oder symmetrische Daten

In vielen Anwendungen sind die Eingabedaten für das DFT rein real. In diesem Fall erfüllen die Ausgänge die Symmetrie

Für diese Situation wurden effiziente FFT -Algorithmen entwickelt (siehe z. B. Sorensen, 1987).[23][24] Ein Ansatz besteht darin, einen gewöhnlichen Algorithmus (z. B. Cooley -tukey) und die redundanten Teile der Berechnung zu entfernen, was ungefähr Zeit und Speicher einen Faktor von zwei spart. Alternativ ist es möglich, eine auszudrücken eben-Length realeinput DFT als komplexe DFT der halben Länge (deren reale und imaginäre Teile die geraden/ungeraden Elemente der ursprünglichen realen Daten sind), gefolgt von O (N) Nachbearbeitungsvorgänge.

Es wurde einst angenommen, dass DFTs mit realem Eingang mithilfe dessen effizienter berechnet werden könnten Diskrete Hartley -Transformation (DHT), aber es wurde anschließend argumentiert, dass ein spezialisierter DFT-Algorithmus (FFT) in der Regel festgestellt werden kann, dass weniger Operationen als der entsprechende DHT-Algorithmus (FHT) für die gleiche Anzahl von Eingaben erforderlich sind.[23] Bruuns Algorithmus (oben) ist eine andere Methode, die ursprünglich vorgeschlagen wurde, um echte Eingaben zu nutzen, hat sich jedoch nicht als beliebt erwiesen.

Es gibt weitere FFT -Spezialisierungen für die Fälle realer Daten, die haben gerade ungerade Symmetrie, in diesem Fall kann man einen weiteren Faktor von ungefähr zwei zeitlich und Gedächtnis gewinnen, und der DFT wird zum Diskreter Cosinus/Sinus -Transformationen (en) (DCT/Dst). Anstatt einen FFT -Algorithmus für diese Fälle direkt zu modifizieren, können DCTs/DSTs auch über FFTs realer Daten in Kombination mit O berechnet werden ((N) Vor- und Nachbearbeitung.

Rechenprobleme

Grenzen für Komplexität und Betriebszahlen

Ungelöstes Problem in der Informatik:

Was ist die untere Grenze für die Komplexität schneller Fourier -Transformationsalgorithmen? Können sie schneller sein als ?

Eine grundlegende Frage des langjährigen theoretischen Interesses besteht darin, die unteren Grenzen der Komplexität und genaue Betriebszahlen schneller Fourier -Transformationen, und es bleiben viele offene Probleme. Es ist nicht streng bewiesen, ob DFTs wirklich ω benötigen (NProtokollN) (d. H. Bestellung NProtokollN oder größere) Operationen, selbst für den einfachen Fall von Kraft von zwei Obwohl keine Algorithmen mit geringerer Komplexität bekannt sind. Insbesondere ist die Anzahl arithmetischer Operationen in der Regel der Schwerpunkt solcher Fragen, obwohl die tatsächliche Leistung auf modernen Computern durch viele andere Faktoren wie z. Zwischenspeicher oder CPU -Pipeline Optimierung.

Nach Arbeit von Shmuel Winograd (1978),[21] eine enge θ (N) Die untere Grenze ist für die Anzahl der realen Multiplikationen bekannt, die von einem FFT erforderlich sind. Es kann nur gezeigt werden, dass nur Irrationale reale Multiplikationen sind erforderlich, um eine dft-zwei-Länge-Leistung zu berechnen . Darüber hinaus sind explizite Algorithmen, die diese Anzahl erreichen, bekannt (Heideman & Burrus1986;[25] Duhamel, 1990[26]). Diese Algorithmen erfordern jedoch zu viele Ergänzungen, um zumindest auf modernen Computern mit Hardware -Multiplikatoren praktisch zu sein (Duhamel, 1990;[26] Frigo & Johnson, 2005).[17]

Eine enge untere Grenze ist nicht in der Anzahl der erforderlichen Ergänzungen bekannt, obwohl unter einigen restriktiven Annahmen an den Algorithmen untere Grenzen nachgewiesen wurden. 1973 Morgenstern[27] bewies ein ω (NProtokollN) Untergrenze an der Additionszahl für Algorithmen, bei denen die multiplikativen Konstanten Größen begrenzt haben (was für die meisten, aber nicht alle FFT -Algorithmen zutrifft). Pfanne (1986)[28] bewies ein ω (NProtokollN) Untergrenze unter der Annahme einer Grenze an einem Maß des FFT -Algorithmus "Asynchronizität" des FFT -Algorithmus, aber die Allgemeinheit dieser Annahme ist unklar. Für den Fall von zwei zwei Jahren N, Papadimitriou (1979)[29] argumentierte, dass die Zahl von komplexen Zahlenergänzungen, die von Cooley-Tukey-Algorithmen erzielt werden, ist optimal unter bestimmten Annahmen über die Graph des Algorithmus (seine Annahmen implizieren unter anderem, dass keine additiven Identitäten in den Wurzeln der Einheit ausgenutzt werden). (Dieses Argument würde das zumindest bedeuten Es sind reale Ergänzungen erforderlich, obwohl dies keine enge gebundene Grenze ist, da im Rahmen komplexer Zahlenmultiplikationen zusätzliche Ergänzungen erforderlich sind.) Bisher hat kein veröffentlichter FFT-Algorithmus weniger erreicht als Komplexnummer Ergänzungen (oder ihr Äquivalent) für die zweite KraftN.

Ein drittes Problem besteht darin, die zu minimieren gesamt Anzahl der realen Multiplikationen und Ergänzungen, die manchmal als "arithmetische Komplexität" bezeichnet werden (obwohl es in diesem Zusammenhang die genaue Anzahl und nicht die asymptotische Komplexität ist, die berücksichtigt wird). Auch hier wurde keine enge Untergrenze nachgewiesen. Seit 1968 ist jedoch der niedrigste veröffentlichte Zähler für die zweifache Leistung N wurde lange durch die erreicht Split-Radix-FFT-Algorithmus, welches benötigt echte Multiplikationen und Ergänzungen für N > 1. Dies wurde kürzlich auf reduziert auf (Johnson und Frigo, 2007;[16] Lundy und Van Buskirk, 2007[30]). Eine etwas größere Anzahl (aber immer noch besser als Split Radix für N Es wurde gezeigt, dass ≥ 256) nachweislich optimal ist für N ≤ 512 unter zusätzlichen Einschränkungen der möglichen Algorithmen (split-radix-ähnliche Durchflussgraphen mit multiplikativen Faktoren mit Einheitenmodulus) durch Reduktion zu a Befriedigungsmodulo -Theorien Problem lösbar durch rohe Gewalt (Haynal & Haynal, 2011).[31]

Die meisten Versuche, die Komplexität von FFT-Algorithmen zu senken oder zu beweisen, haben sich auf den normalen Fall mit komplexen Daten konzentriert, da dies am einfachsten ist. Komplexen Daten fft sind jedoch so eng mit Algorithmen für verwandte Probleme wie Real-Data-FFTs verbunden. Diskrete Cosinus -Transformationen, Diskrete Hartley transformiertund so weiter, dass jede Verbesserung in einer davon sofort zu Verbesserungen in den anderen führen würde (Duhamel & Vetterli, 1990).[32]

Annäherungen

Alle oben diskutierten FFT -Algorithmen berechnen die DFT genau (d. H. Vernachlässigung Schwimmpunkt Fehler). Es wurden jedoch einige "FFT" -Algorithmen vorgeschlagen, die die DFT berechnen etwamit einem Fehler, der auf Kosten erhöhter Berechnungen willkürlich gering gemacht werden kann. Solche Algorithmen handeln den Approximationsfehler gegen erhöhte Geschwindigkeit oder andere Eigenschaften. Zum Beispiel ein ungefährer FFT -Algorithmus von Edelman et al. (1999)[33] Erreicht niedrigere Kommunikationsanforderungen für Parallele Computing mit Hilfe von a Schnelle Multipole -Methode. EIN Wavelet-Basierend ungefähre FFT von Guo und Burrus (1996)[34] Berücksichtigt spärliche Eingänge/Ausgänge (Zeit-/Frequenzlokalisierung) effizienter als bei einem exakten FFT möglich. Ein weiterer Algorithmus zur ungefähren Berechnung einer Untergruppe der DFT -Ausgänge ist auf Shentov et al. (1995).[35] Der Edelman-Algorithmus funktioniert gleich gut für spärliche und nicht-sparige Daten, da er eher auf der Kompressibilität (Rangmangel) der Fourier-Matrix selbst als auf der Kompressibilität (Sparsity) der Daten basiert. Umgekehrt, wenn die Daten spärlich sind - das heißt, wenn auch nur K aus N Fourier -Koeffizienten sind ungleich Null - dann kann die Komplexität auf O reduziert werden ((KProtokoll(N) Protokoll(N/K)), und es wurde gezeigt, dass dies zu praktischen Beschleunigungen im Vergleich zu einem gewöhnlichen FFT für führt N/K> 32 in einem großen-N Beispiel (N= 222) unter Verwendung eines probabilistischen ungefähren Algorithmus (der das größte schätzt K Koeffizienten an mehreren Dezimalstellen).[36]

Genauigkeit

FFT-Algorithmen weisen Fehler auf, wenn die Schwimmpunktarithmetik für endliche Präzision verwendet wird, aber diese Fehler sind in der Regel recht klein. Die meisten FFT -Algorithmen, z. Cooley -tukey haben als Folge der hervorragenden numerischen Eigenschaften hervorragende Eigenschaften paarweise Summe Struktur der Algorithmen. Die Obergrenze auf der relativer Fehler Für den Cooley -Tukey -Algorithmus ist o (ε Protokoll N), im Vergleich zu O (εn3/2) für die naive DFT -Formel,[18] wobei ε die relative Präzision des Maschinenfloatspunkts ist. In der Tat die quadratischer Mittelwert (RMS) Fehler sind viel besser als diese Obergrenzen, nur O ((ε Protokoll N) für Cooley -tukey und o (ε N) für die naive DFT (Schatzman, 1996).[37] Diese Ergebnisse sind jedoch sehr empfindlich für die Genauigkeit der im FFT verwendeten Twiddle -Faktoren (d. H. Die Trigonometrische Funktion Werte), und es ist nicht ungewöhnlich, dass unnachgiebige FFT -Implementierungen eine viel schlechtere Genauigkeit haben, z. Wenn sie ungenau verwenden Trigonometrisches Rezidiv Formeln. Einige andere FFTs als Cooley -Tukey, wie der Rader -Brenner -Algorithmus, sind anwesend weniger stabil.

Im Fixpunktarithmetik,N) für den Cooley -Tukey -Algorithmus (Welch, 1969).[38] Das Erreichen dieser Genauigkeit erfordert sorgfältige Aufmerksamkeit auf die Skalierung, um den Präzisionsverlust zu minimieren, und FFT-FFT-Algorithmen mit festen Punkten beinhalten in jeder Zwischenstufe von Zersetzungen wie Cooley-tukey.

Um die Richtigkeit einer FFT -Implementierung zu überprüfen, können strenge Garantien in O ((NProtokollN) Zeit nach einem einfachen Verfahren, das die Linearität, die Impulsantwort und die Zeitverschiebungseigenschaften der Transformation bei zufälligen Eingaben überprüft (Ergün, 1995).[39]

Mehrdimensionale FFTs

Wie in der definiert Mehrdimensionaler DFT Artikel, der mehrdimensionale DFT

verwandelt ein Array xn mit einer d-Dimensional Vektor von Indizes durch eine Reihe von d verschachtelte Summierungen (über für jeden j), wo die Teilung n/N, definiert als , wird elementisch ausgeführt. Äquivalent ist es die Zusammensetzung einer Sequenz von d Sätze eindimensionaler DFTs, die entlang einer Dimension gleichzeitig (in beliebiger Reihenfolge) durchgeführt wurden.

Dieser sachdurchschnittliche Standpunkt bietet sofort den einfachsten und am häufigsten zu mehrdimensionalen DFT -Algorithmus, der als der bekannt ist Zeile Spalte Algorithmus (nach dem zweidimensionalen Fall unten). Das heißt, man führt einfach eine Sequenz von durch d Eindimensionale FFTs (nach einem der oben genannten Algorithmen): Zuerst verwandeln Sie sich entlang der n1 Dimension, dann entlang der n2 Dimension usw. (oder tatsächlich jede Bestellung funktioniert). Diese Methode kann leicht das übliche O haben (NProtokollN) Komplexität, wo Ist die Gesamtzahl der Datenpunkte transformiert. Insbesondere gibt es N/N1 Transformationen der Größe N1usw., also ist die Komplexität der Abfolge von FFTs:

In zwei Dimensionen die xk kann als als angesehen werden Matrixund dieser Algorithmus entspricht der ersten Durchführung der FFT aller Zeilen (bzw. Spalten), wobei die resultierenden transformierten Zeilen (bzw. Säulen) als eine andere zusammengefasst werden Matrix, und dann die FFT auf jeder der Spalten (bzw. Zeilen) dieser zweiten Matrix ausführen und die Ergebnisse in ähnlicher Weise in die Endergebnismatrix gruppieren.

In mehr als zwei Dimensionen ist es oft vorteilhaft für Zwischenspeicher Lokalität, um die Dimensionen rekursiv zu gruppieren. Zum Beispiel kann ein dreidimensionales FFT zuerst zweidimensionale FFTs jedes planaren "Slice" für jeden festgelegt durchführen n1und dann die eindimensionalen FFTs entlang der durchführen n1 Richtung. Allgemeiner ein Asymptotisch optimal cache-obliviös Der Algorithmus besteht darin, die Dimensionen rekursiv in zwei Gruppen zu unterteilen und das werden rekursiv transformiert (Rundung, wenn d ist nicht gerade) (siehe Frigo und Johnson, 2005).[17] Dennoch bleibt dies eine einfache Variation des Zeilen-Säulen-Algorithmus, der letztendlich nur einen eindimensionalen FFT-Algorithmus als Basisfall erfordert und immer noch O ((O) hat ((((NProtokollN) Komplexität. Eine weitere Variation besteht darin, Matrix durchzuführen Transpositionen zwischen den transformierenden nachfolgenden Dimensionen, so dass die Transformationen mit zusammenhängenden Daten arbeiten; Dies ist besonders wichtig für Out-of-Core und Verteilter Speicher Situationen, in denen der Zugriff auf nicht zusammenhängende Daten extrem zeitaufwändig ist.

Es gibt andere mehrdimensionale FFT-Algorithmen, die sich vom Zeilen-Säulen-Algorithmus unterscheiden, obwohl alle O O (O () ((NProtokollN) Komplexität. Vielleicht ist das einfachste FFT ohne Reihen-Säule die Vektor-Radix-FFT-Algorithmus, was eine Verallgemeinerung des gewöhnlichen Cooley -Tukey -Algorithmus ist, bei dem man die Transformationsdimensionen durch einen Vektor teilt von Radices bei jedem Schritt. (Dies kann auch Cache-Vorteile haben.) Der einfachste Fall von Vector-Radix ist der Ort, an dem alle Radices gleich sind (z. B. Vektor-Radix-2-Divids alle der Dimensionen um zwei), aber dies ist nicht notwendig. Vektorradix mit nur einem einzelnen Unit-Radix gleichzeitig, d.h. ist im Wesentlichen ein Zeilen-Spal-Algorithmus. Andere, kompliziertere Methoden umfassen polynomiale Transformationsalgorithmen aufgrund von Nussbaumer (1977).[40] die die Transformation in Bezug auf Konvolutionen und Polynomprodukte betrachten. Siehe Duhamel und Vetterli (1990)[32] Weitere Informationen und Referenzen.

Andere Verallgemeinerungen

Ein o (N5/2ProtokollN) Verallgemeinerung zu sphärische Harmonische auf der Sphäre S2 mit N2 Knoten wurden von Mohlenkamp beschrieben,[41] zusammen mit einem Algorithmus vermutet (aber nicht bewährt), O (N2 Protokoll2(N)) Komplexität; MoHlenkamp bietet auch eine Implementierung in der Bibliothek Libftsh.[42] Ein kugelharmonischer Algorithmus mit O (N2ProtokollN) Die Komplexität wird von Rokhlin und Tygert beschrieben.[43]

Das Schneller Faltalgorithmus ist analog zum FFT, außer dass es eher auf einer Reihe von Banned -Wellenformen als auf einer Reihe realer oder komplexer Skalarwerte arbeitet. Drehung (die in der FFT eine Multiplikation durch einen komplexen Phasor ist) ist eine kreisförmige Verschiebung der Komponentenwellenform.

Verschiedene Gruppen haben auch "FFT" -Algorithmen für nicht ausgeglichene Daten veröffentlicht, wie in Potts überprüft et al. (2001).[44] Solche Algorithmen berechnen das DFT (das nur für gleichberechtigte Daten definiert ist), sondern eher einige Annäherungen davon (a ungleichmäßige diskrete Fourier-Transformation, oder ndft, das selbst oft nur ungefähr berechnet wird). Allgemeiner gibt es verschiedene andere Methoden von Spektralschätzung.

Anwendungen

Die FFT wird bei der digitalen Aufnahme, Abtastung verwendet, Additive Synthese und Tonhöhenkorrektur Software.[45]

Die Bedeutung der FFT ergibt sich aus der Tatsache, dass sie in der Frequenzdomäne gleichermaßen rechnerisch wie in der zeitlichen oder räumlichen Domäne rechnerisch machbar gemacht hat. Einige der wichtigen Anwendungen des FFT sind:[15][46]

Forschungsgebiete

Große FFTs
Mit der Explosion von Big Data in Feldern wie Astronomie ist die Notwendigkeit von 512K -FFTs für bestimmte Interferometrieberechnungen entstanden. Die Daten, die von Projekten gesammelt wurden, z. WMAP und Ligo benötigen FFTs von zehn Milliarden Punkten. Da diese Größe nicht in das Hauptspeicher passt, sind so genannte FFTs außerhalb des Kerns ein aktives Forschungsbereich.[48]
Ungefähre FFTs
Für Anwendungen wie MRT ist es erforderlich, DFTs für ungleichmäßig verteilte Netzpunkte und/oder Frequenzen zu berechnen. Multipolbasierte Ansätze können ungefähre Größen mit dem Anstieg der Laufzeit berechnen.[49]
Gruppe FFTS
Die FFT kann auch mit Verwendung erklärt und interpretiert werden Gruppenrepräsentationstheorie eine weitere Verallgemeinerung ermöglichen. Eine Funktion in jeder kompakten Gruppe, einschließlich nicht-kyklischer, hat eine Ausdehnung in Bezug auf eine Grundlage irreduzibler Matrixelemente. Es bleibt ein aktives Forschungsbereich, um einen effizienten Algorithmus für die Durchführung dieser Basisänderung zu finden. Anwendungen einschließlich effizienter sphärische harmonische Expansion, analysieren bestimmter Markov Prozesse, Robotik usw.[50]
Quantum FFTs
Shors schneller Algorithmus für Ganzzahlfaktorisierung Auf einem Quantencomputer verfügt über eine Unterroutine zur Berechnung der DFT eines binären Vektors. Dies wird als Sequenz von 1- oder 2-Bit-Quantengatern implementiert, die heute als Quanten-FFT bezeichnet werden. Dies ist effektiv die Cooley-Tukey-FFT, die als bestimmte Faktorisierung der Fourier-Matrix realisiert wird. Die Erweiterung dieser Ideen wird derzeit untersucht.[51]

Sprach-Referenz

Sprache Befehl/Methode Voraussetzungen
R Statistiken :: FFT (x) Keiner
Oktave/Matlab FFT (x) Keiner
Python fft.fft (x) Numpy Scipy
Mathematica Fourier [x] Keiner
Forran fftw_one (Plan, in, out) Fftw
Julia fft (a [, dims]) Fftw
Rost fft.Process (& mut x); Rustfft
Haskell dft x fft

Siehe auch

FFT-bezogene Algorithmen:

FFT -Implementierungen:

  • Alglib -Eine Doppel/GPL-lizenzierte C ++-und C# -Bibliothek (auch andere Sprachen unterstützt) mit realer/komplexer FFT-Implementierung
  • Fftpack - Eine weitere Forran FFT -Bibliothek (gemeinfrei)
  • Architekturspezifisch:
  • Viele weitere Implementierungen sind verfügbar,[53] Für CPUs und GPUs wie Pocketfft für C ++

Andere Links:

Verweise

  1. ^ a b c d Heideman, Michael T.; Johnson, Don H.; Burrus, Charles Sidney (1984). "Gauß und die Geschichte der schnellen Fourier Transformation" (PDF). IEEE ASSP Magazine. 1 (4): 14–21. Citeseerx 10.1.1.309.181. doi:10.1109/massp.1984.1162257. S2CID 10032502.
  2. ^ Van Loan, Charles (1992). Rechenrahmen für die schnelle Fourier -Transformation. SIAM.
  3. ^ Strang, Gilbert (Mai - Juni 1994). "Wavelets". Amerikanischer Wissenschaftler. 82 (3): 250–255. JStor 29775194.
  4. ^ Kent, Ray D.; Read, Charles (2002). Akustische Sprachanalyse. ISBN 0-7693-0112-6.
  5. ^ Dongarra, Jack; Sullivan, Francis (Januar 2000). "Gastredakteure Einführung in die Top 10 Algorithmen". Computing in Science & Engineering. 2 (1): 22–23. Bibcode:2000cse ..... 2a..22d. doi:10.1109/mcise.2000.814652. ISSN 1521-9615.
  6. ^ Gauß, Carl Friedrich (1866). "Theoria interpolationis methodo nova Tractata" [Theorie über eine neue Methode der Interpolation]. Nachlass (Unveröffentlichtes Manuskript). Werke (in Latein und Deutsch). Vol. 3. Göttingen, Deutschland: Königlichen Gesellschaft der WISSSCHAFTEN Zu Göttingen. S. 265–303.
  7. ^ a b Heideman, Michael T.; Johnson, Don H.; Burrus, Charles Sidney (1985-09-01). "Gauß und die Geschichte der schnellen Fourier -Transformation". Archiv für die Geschichte der genauen Wissenschaften. 34 (3): 265–277. Citeseerx 10.1.1.309.181. doi:10.1007/bf00348431. ISSN 0003-9519. S2CID 122847826.
  8. ^ Yates, Frank (1937). "Das Design und Analyse von faktoriellen Experimenten". Technische Kommunikation Nr. 35 des Commonwealth Bureau of Bods. 142 (3585): 90–92. Bibcode:1938natur.142 ... 90f. doi:10.1038/142090a0. S2CID 23501205.
  9. ^ Danielson, Gordon C.; Lanczos, Cornelius (1942). "Einige Verbesserungen der praktischen Fourier-Analyse und deren Anwendung auf Röntgenstreuung aus Flüssigkeiten". Zeitschrift des Franklin Institute. 233 (4): 365–380. doi:10.1016/s0016-0032 (42) 90767-1.
  10. ^ Lanczos, Cornelius (1956). Angewandte Analyse. Prentice -Hall.
  11. ^ Cooley, James W.; Lewis, Peter A. W.; Welch, Peter D. (Juni 1967). "Historische Notizen über die schnelle Fourier -Transformation". IEEE -Transaktionen auf Audio und Elektroakustik. 15 (2): 76–79. Citeseerx 10.1.1.467.7209. doi:10.1109/tau.1967.1161903. ISSN 0018-9278.
  12. ^ a b Cooley, James W.; Tukey, John W. (1965). "Ein Algorithmus für die Maschinenberechnung der komplexen Fourier -Serie". Mathematik der Berechnung. 19 (90): 297–301. doi:10.1090/s0025-5718-1965-0178586-1. ISSN 0025-5718.
  13. ^ Cooley, James W. (1987). Die Neuentwicklung des Fast Fourier-Transformationsalgorithmus (PDF). Microchimica Acta. Vol. III. Wien, Österreich. S. 33–45.
  14. ^ Garwin, Richard (Juni 1969). "Die schnelle Fourier -Transformation als Beispiel für die Schwierigkeit, für eine neue Technik weit verbreitet zu werden." (PDF). IEEE -Transaktionen auf Audio und Elektroakustik. AU-17 (2): 68–72.
  15. ^ a b Rockmore, Daniel N. (Januar 2000). "Der FFT: Ein Algorithmus, den die ganze Familie verwenden kann". Computing in Science & Engineering. 2 (1): 60–64. Bibcode:2000cse ..... 2a..60r. Citeseerx 10.1.1.17.228. doi:10.1109/5992.814659. ISSN 1521-9615.
  16. ^ a b Frigo, Matteo; Johnson, Steven G. (Januar 2007) [2006-12-19]. "Ein modifizierter Split-Radix-FFT mit weniger arithmetischen Operationen". IEEE -Transaktionen zur Signalverarbeitung. 55 (1): 111–119. Bibcode:2007itsp ... 55..111j. Citeseerx 10.1.1.582.5497. doi:10.1109/TSP.2006.882087. S2CID 14772428.
  17. ^ a b c Frigo, Matteo; Johnson, Steven G. (2005). "Die Gestaltung und Implementierung von FFTW3" (PDF). Proceedings of the IEEE. 93 (2): 216–231. Citeseerx 10.1.1.66.3097. doi:10.1109/jproc.2004.840301. S2CID 6644892.
  18. ^ a b Gentleman, W. Morven; Sande, G. (1966). "Fast Fourier transformiert - für Spaß und Gewinn". Verfahren der AFIPs. 29: 563–578. doi:10.1145/1464291.1464352. S2CID 207170956.
  19. ^ Gauß, Carl Friedrich (1866) [1805]. Theoria interpolationis methodo nova Tractata. Werke (in Latein und Deutsch). Vol. 3. Göttingen, Deutschland: Königliche Gesellschaft der WISSENCHAFTEN. S. 265–327.
  20. ^ a b Brenner, Norman M.; Rader, Charles M. (1976). "Ein neues Prinzip für die schnelle Fourier -Transformation". IEEE -Transaktionen zur Akustik, Sprache und Signalverarbeitung. 24 (3): 264–266. doi:10.1109/tASP.1976.1162805.
  21. ^ a b Winograd, Shmuel (1978). "Bei der Berechnung der diskreten Fourier -Transformation". Mathematik der Berechnung. 32 (141): 175–199. doi:10.1090/s0025-5718-1978-0468306-4. JStor 2006266. PMC 430186. PMID 16592303.
  22. ^ Winograd, Shmuel (1979). "Über die multiplikative Komplexität der diskreten Fourier -Transformation". Fortschritte in der Mathematik. 32 (2): 83–117. doi:10.1016/0001-8708 (79) 90037-9.
  23. ^ a b Sorensen, Henrik V.; Jones, Douglas L.; Heideman, Michael T.; Burrus, Charles Sidney (1987). "Realed Fast Fourier-Transformationsalgorithmen". IEEE -Transaktionen zur Akustik, Sprache und Signalverarbeitung. 35 (6): 849–863. Citeseerx 10.1.1.205.4523. doi:10.1109/tASP.1987.1165220.
  24. ^ Sorensen, Henrik V.; Jones, Douglas L.; Heideman, Michael T.; Burrus, Charles Sidney (1987). "Korrekturen auf" realwerte schnelle Fourier-Transformationsalgorithmen "". IEEE -Transaktionen zur Akustik, Sprache und Signalverarbeitung. 35 (9): 1353. doi:10.1109/tASP.1987.1165284.
  25. ^ Heideman, Michael T.; Burrus, Charles Sidney (1986). "Über die Anzahl der Multiplikationen, die zur Berechnung einer Länge-2 erforderlich sindn DFT ". IEEE -Transaktionen zur Akustik, Sprache und Signalverarbeitung. 34 (1): 91–95. doi:10.1109/tASP.1986.1164785.
  26. ^ a b Duhamel, Pierre (1990). "Algorithmen, die die unteren Grenzen der multiplikativen Komplexität von Länge-2 treffenn DFTs und ihre Verbindung mit praktischen Algorithmen ". IEEE -Transaktionen zur Akustik, Sprache und Signalverarbeitung. 38 (9): 1504–1511. doi:10.1109/29.60070.
  27. ^ Morgsenstern, Jacques (1973). "Hinweis auf einer unteren Grenze der linearen Komplexität der schnellen Fourier -Transformation". Journal of the ACM. 20 (2): 305–306. doi:10.1145/321752.321761. S2CID 2790142.
  28. ^ Pan, Victor Ya. (1986-01-02). "Der Kompromiss zwischen der additiven Komplexität und der Asynchronizität von linearen und bilinearen Algorithmen". Informationsverarbeitungsbriefe. 22 (1): 11–14. doi:10.1016/0020-0190 (86) 90035-9. Abgerufen 2017-10-31.
  29. ^ Papadimitriou, Christos H. (1979). "Optimalität der schnellen Fourier -Transformation". Journal of the ACM. 26: 95–102. doi:10.1145/322108.322118. S2CID 850634.
  30. ^ Lundy, Thomas J.; Van Buskirk, James (2007). "Ein neuer Matrixansatz zu realen FFTs und Wällen von Länge 2k". Computer. 80 (1): 23–45. doi:10.1007/s00607-007-0222-6. S2CID 27296044.
  31. ^ Haynal, Steve; Haynal, Heidi (2011). "Generieren und Durchsuchen von Familien von FFT -Algorithmen" (PDF). Journal über Zufriedenheit, Boolesche Modellierung und Berechnung. 7 (4): 145–187. Arxiv:1103.5740. Bibcode:2011ArXIV1103.5740H. doi:10.3233/sat190084. S2CID 173109. Archiviert von das Original (PDF) Am 2012-04-26.
  32. ^ a b Duhamel, Pierre; Vetterli, Martin (1990). "Fast Fourier -Transformationen: Eine Tutorial Review und ein hochmoderner Kunst". Signalverarbeitung. 19 (4): 259–299. doi:10.1016/0165-1684 (90) 90158-U.
  33. ^ Edelman, Alan; McCorquodale, Peter; Toledo, Sivan (1999). "Die zukünftige Fast Fourier -Transformation?" (PDF). Siam Journal über wissenschaftliches Computer. 20 (3): 1094–1114. Citeseerx 10.1.1.54.9339. doi:10.1137/s1064827597316266.
  34. ^ Guo, Haitao; Burrus, Charles Sidney (1996). "Schnelle ungefähre Fourier -Transformation über Wavelets -Transformation". Verfahren von Spie. Wavelet -Anwendungen in Signal- und Bildverarbeitung iv. 2825: 250–259. Bibcode:1996spie.2825..250g. Citeseerx 10.1.1.54.3984. doi:10.1117/12.255236. S2CID 120514955.
  35. ^ Shentov, Ognjan V.; Mitra, Sanjit K.; Hute, Ulrich; Hossen, Abdul N. (1995). "Subband DFT. I. Definition, Interpretationen und Erweiterungen". Signalverarbeitung. 41 (3): 261–277. doi:10.1016/0165-1684 (94) 00103-7.
  36. ^ Hassanieh, Haitham; Indyk, Piotr; Katabi, Dina; Preis, Eric (Januar 2012). "Einfacher und praktischer Algorithmus für spärliche Fourier -Transformation" (PDF). ACM-SIAM-Symposium auf diskreten Algorithmen. (Nb. Siehe auch die SFFT -Webseite.))
  37. ^ Schatzman, James C. (1996). "Genauigkeit der diskreten Fourier -Transformation und der schnellen Fourier -Transformation". Siam Journal über wissenschaftliches Computer. 17 (5): 1150–1166. Citeseerx 10.1.1.495.9184. doi:10.1137/s1064827593247023.
  38. ^ Welch, Peter D. (1969). "Eine Fix-Point-Fast-Fourier-Transformationsfehleranalyse". IEEE -Transaktionen auf Audio und Elektroakustik. 17 (2): 151–157. doi:10.1109/tau.1969.1162035.
  39. ^ Ergün, Funda (1995). Testen multivariater lineare Funktionen: Überwindung des Generators Engpass. Verfahren des 27. ACM -Symposiums zur Computertheorie. Kyoto, Japan. S. 407–416. doi:10.1145/225058.225167. ISBN 978-0897917186. S2CID 15512806.
  40. ^ Nussbaumer, Henri J. (1977). "Digitale Filterung mit polynomialen Transformationen". Elektronikbuchstaben. 13 (13): 386–387. Bibcode:1977ell .... 13..386n. doi:10.1049/el: 19770280.
  41. ^ Mohrenkamp, ​​Martin J. (1999). "Eine schnelle Transformation für sphärische Harmonische" (PDF). Journal of Fourier Analysis und Anwendungen. 5 (2–3): 159–184. Citeseerx 10.1.1.135.9830. doi:10.1007/bf01261607. S2CID 119482349. Abgerufen 2018-01-11.
  42. ^ "Bibliothek libftsh". Archiviert von das Original Am 2010-06-23. Abgerufen 2007-01-09.
  43. ^ Rokhlin, Vladimir; Tygert, Mark (2006). "Schnelle Algorithmen für sphärische harmonische Erweiterungen" (PDF). Siam Journal über wissenschaftliches Computer. 27 (6): 1903–1928. Citeseerx 10.1.1.125.7415. doi:10.1137/050623073. Abgerufen 2014-09-18. [1]
  44. ^ Potts, Daniel; Steidl, Gabriele; Tasche, Manfred (2001). "Fast Fourier -Transformationen für nicht ergleichliche Daten: Ein Tutorial" (PDF). In Benedetto, J. J.; Ferreira, P. (Hrsg.). Moderne Stichprobenentheorie: Mathematik und Anwendungen. Birkhäuser.
  45. ^ Burgess, Richard James (2014). Die Geschichte der Musikproduktion. Oxford University Press. ISBN 978-0199357178. Abgerufen 1. August 2019.
  46. ^ Chu, Eleanor; George, Alan (1999-11-11) [1999-11-11]. "Kapitel 16". In der FFT Black Box: serielle und parallele schnelle Fourier -Transformationsalgorithmen. CRC Press. S. 153–168. ISBN 978-1-42004996-1.
  47. ^ Fernandez-de-Cossio Diaz, Jorge; Fernandez-de-Cossio, Jorge (2012-08-08). "Berechnung der isotopischen Peak-Mittelmasseverteilung durch Fourier-Transformation". Analytische Chemie. 84 (16): 7052–7056. doi:10.1021/AC301296a. ISSN 0003-2700. PMID 22873736.
  48. ^ Cormen, Thomas H.; Nicol, David M. (1998). "Durchführung außerhalb der Kern-FFTs auf parallelen Festplattensystemen". Parallele Computing. 24 (1): 5–20. Citeseerx 10.1.1.44.8212. doi:10.1016/s0167-8191 (97) 00114-2. S2CID 14996854.
  49. ^ Dutt, Alok; Rokhlin, Vladimir (1993-11-01). "Schnelle Fourier -Transformationen für nicht ergleichliche Daten". Siam Journal über wissenschaftliches Computer. 14 (6): 1368–1393. doi:10.1137/0914081. ISSN 1064-8275.
  50. ^ Rockmore, Daniel N. (2004). "Jüngste Fortschritte und Anwendungen in der Gruppe FFTS". In Byrnes, Jim (Hrsg.). Rechenin nicht kommutative Algebra und Anwendungen. NATO Science Series II: Mathematik, Physik und Chemie. Vol. 136. Springer Niederlande. S. 227–254. Citeseerx 10.1.1.324.4700. doi:10.1007/1-4020-2307-3_9. ISBN 978-1-4020-1982-1. S2CID 1412268.
  51. ^ Ryo, Asaka; Kazumitsu, Sakai; Ryoko, Yahagi (2020). "Quantenschaltung für die schnelle Fourier -Transformation". Quanteninformationsverarbeitung. 19 (277): 277. Arxiv:1911.03055. Bibcode:2020Quip ... 19..277a. doi:10.1007/s11128-020-02776-5. S2CID 207847474.
  52. ^ "Arm Performance Libraries". Arm. 2020. Abgerufen 2020-12-16.
  53. ^ "Komplette Liste der C/C ++ FFT -Bibliotheken". VCV -Community. 2020-04-05. Abgerufen 2021-03-03.

Weitere Lektüre

Externe Links