Was ist der Müll am Ende meiner FFT in LTSPICE?


8

Warum haben FFTs am Hochfrequenzende Müll? Angenommen, ich gehe, um diese Schaltung in LTSPICE zu simulieren:

schematisch

simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab

Wo die LTSPICE-Sinus- und Simulationsparameter sind:

SINE(0 1 1K 0 0 0 1000)
.tran 1 startup

Dann bitte ich LTSPICE, mir eine FFT ohne Fenster und 1.000.000 Punkte zu geben: FFT

Wofür ist der ganze Müll am Ende? Ich würde nur eine Spitze bei 1 kHz erwarten, keine zusätzliche bei 3 kHz usw. Passiert dies allen FFTs? Was steuert die Spitzen, die Sie nach Ihrem Fundament erhalten?


Können Sie die anderen Frequenzen wirklich genau bestimmen? Sind sie zufällig alle ungeraden Vielfachen von 1 kHz? In diesem Fall verzerrt etwas Ihren "perfekten" Sinus, um "rechteckiger" auszusehen, und es könnte nur die numerische Genauigkeit sein, die ltspice intern verwendet.
Marcus Müller

1
Ich würde nicht unter -100 dB schauen, sondern mit der 3. Harmonischen beginnen, kein Fenster scheint ein Problem zu sein
Tony Stewart Sunnyskyguy EE75

1
Könnte etwas mit der Wellenformkomprimierung zu tun haben. In dieser anderen Frage erfahren Sie mehr darüber, wie Sie überprüfen können, ob dies der Fall ist. electronic.stackexchange.com/questions/338292/…
mkeith

Ich kann diese Daten nicht reproduzieren. Meine Version von LTspice möchte, dass über 1e6 simulierte Punkte eine FFT von 1e6 Punkten erhalten, dh einen maximalen Zeitschritt von 1e-6.
laute Geräusche

Benötigen Sie Quasi Peak, um das Audiospektrum für die Modulation BW anzupassen?
Tony Stewart Sunnyskyguy EE75

Antworten:


4

@ D.Browns Antwort ist bereits sehr gut, daher werde ich nur ein paar Kleinigkeiten hinzufügen. Der Algorithmus von LTspice ist benutzerdefiniert und akzeptiert eine Anzahl von Punkten ohne Zweierpotenz. Dies bedeutet nicht, dass die Auflösung nicht wichtig ist. 1kHz über 1s bedeutet jedoch eine ganzzahlige Anzahl von Perioden, sodass keine Fensterung oder Binomialglättung erforderlich ist, um das Rauschen zu reduzieren (Einstellungen im FFT-Fenster). Was jedoch @mkeith erwähnt hat, ist, dass LTspice standardmäßig eine Wellenformkomprimierung (300 Punkte pro Anzeige, IIRC) verwendet, was bedeutet, dass alle anderen Punkte reduziert werden und die Auflösung der Wellenform leidet. Die Lösung hierfür ist entweder ein engerer Zeitschritt oder .option plotwinsize=0der letzte, der die Wellenformkomprimierung eliminiert. Folgendes passiert, wenn diese Option hinzugefügt wird, aber kein Zeitschritt festgelegt wird:

Standard

Dies ist wahrscheinlich das, was Sie mehr oder weniger sehen. Wofür ist also die Option? Sie simulieren eine 1- kHz- Wellenform über einen Zeitraum von 1 s . Die Schaltung, wenn man das so nennen kann, ist eine einfache Quelle und Last, und die Quelle ist eine harmonische, eine mühsame Aufgabe für den Matrixlöser verdoppelt seinen Zeitschritt, um die Simulation nicht zu verlangsamen, und verdoppelt ihn weiter, bis ein internes Limit erreicht ist. An diesem Punkt fliegt er über die Simulation. Das Ergebnis ist eine grobe Wellenform, die sich nicht einmal plotwinsizezu stark verbessern kann.

μ

10u

μnumdgt

Ultra

Es gibt immer noch ein leicht wackeliges Grundrauschen, aber der Pegel liegt jetzt unter -250 dB. Dies kommt der Maschinenpräzision nahe. Wenn Sie den Zeitschritt 1/1048576 (2 ^ -20) ausführen, werden die Ergebnisse nicht verbessert (Sie können dies selbst überprüfen).

μ


Vielen Dank, dass Sie sich für diese Antwort eingesetzt haben. Abgesehen davon hat es mir gezeigt, dass LTspice unter macOS im Vergleich zu Windows eine drastisch andere Leistung erbringt. (Ich gehe davon aus, dass dies die Windows-Version ist)
Lautgeräusche

@loudnoises Ja, aber unter Wein, nicht dass es darauf ankommt. Ich habe hier und da einige Punkte in der Yahoo LTspice Group gesehen, aber da ich kein Mac-Benutzer bin, habe ich nicht darauf bestanden. Es könnte sein, dass es auch um Einstellungen geht, die unter der anderen Haube versteckt sind, aber ich bin mir nicht sicher.
ein besorgter Bürger

Ausgezeichnet! Wenn ich jetzt auf die LTSPICE-Hilfedatei zurückblicke, hätte ich Folgendes bemerken müssen: "LTspice verwendet einen proprietären FFT-Algorithmus, der eine beliebige Anzahl von Datenpunkten zulässt, dh nicht auf eine Potenz von 2 beschränkt ist. Wenn Sie erwarten, FFTs Ihrer Simulation durchzuführen Bei Daten möchten Sie wahrscheinlich die Wellenformkomprimierung deaktivieren, einen maximalen Zeitschritt festlegen und möglicherweise sogar das Wellenformdateiformat mit doppelter Genauigkeit verwenden, um das numerische Grundrauschen zu reduzieren. "
Watkipet

@ein betroffener Bürger: Als Sie sagten: "Hier ist das Ergebnis mit einem Zeitschritt von 1 μs", meinten Sie "Hier ist das Ergebnis mit einem Zeitschritt von 10 μs"?
Watkipet

@loudnoises Ich verwende die native MacOS-Version. Aber ich sehe die gleichen Ergebnisse wie bei einem betroffenen Bürger.
Watkipet

14

Diese Antwort besteht aus mehreren Teilen. Ich stütze diese Antwort auf die Eigenschaften des FFT-Algorithmus. Ich bin mit der spezifischen LTSpice-Implementierung nicht vertraut, aber das von Ihnen gemeldete Verhalten ist genau das, was ich erwarten würde.

Die gängigsten FFT-Implementierungen arbeiten mit einer ganzzahligen Potenz von 2 Datenpunkten. Die meisten Implementierungen würden also Ihre 1.000.000 Datenpunkte auf 1.048.576 Datenpunkte auffüllen und die FFT darauf ausführen. Beachten Sie, dass diese Länge keine ganzzahlige Anzahl von Sinuswellen ist.

Es gibt alternative Fourier-Transformationsmethoden, die die Daten unterschiedlich zerlegen. Diese Methoden werden normalerweise als DFT-Methoden (Discrete Fourier Transform) bezeichnet und sind sowohl langsamer als auch erheblich komplexer zu implementieren. Ich bin ihnen in praktischen Anwendungen fast nie begegnet. Die FFT ist eine spezifische DFT-Implementierung, bei der die Anzahl der Datenpunkte eine ganzzahlige Potenz von 2 (oder manchmal eine ganzzahlige Potenz von 4) betragen muss.

Ich gehe also davon aus, dass LTSpice Ihre Daten auf 1.048.576 Datenpunkte auffüllt, wobei die hinzugefügten 48.576 Datenwerte am Ende eine Konstante enthalten.

Jetzt können Sie das Problem sehen: Ihr Puffer mit 1.048.576 Abtastwerten hat 1.000 Sinuswellen mit jeweils 1.000 Abtastwerten, gefolgt von 48.576 konstanten Werten. Dies kann nicht durch eine Summe von Sinuswellen mit einer Frequenz von 1 kHz dargestellt werden. Stattdessen zeigen die FFT-Ergebnisse die zusätzlichen Hochfrequenzwerte, die zur Rekonstruktion Ihres Signals erforderlich sind.

Um festzustellen, ob dies das Problem ist, erstellen Sie einen Puffer mit 1.048.576 Abtastwerten, der eine Sinuswelle mit einer Periode von 1.024 Abtastwerten enthält. Die hohen Frequenzen sollten in ihrer Größe erheblich reduziert werden.

Nun zum Effekt der Anwendung eines Fensters:

Der FFT-Algorithmus "umschließt" die Daten konzeptionell, sodass auf den letzten Punkt der Eingabedaten der erste Punkt der Eingabedaten folgt. Das heißt, die FFT wird so berechnet, als ob die Daten unendlich sind, kreisförmig wiederholt, als ein Vektor mit der Sequenz: x [0], x [1], ..., x [1048574], x [1048575], x [ 0], x [1], ...

Diese Umhüllung kann zu einem schrittweisen Übergang zwischen dem letzten Punkt im Datenpuffer und dem ersten Punkt führen. Dieser Schrittübergang erzeugt FFT-Ergebnisse mit großen (Stör-) Beiträgen von hohen Frequenzen. Der Zweck eines Fensters besteht darin, dieses Problem zu beseitigen. Die Fensterfunktion geht an beiden Enden auf Null. In Ihrem Fall wären also w [0] und w [999999] beide Null. Wenn die Daten mit dem Fenster multipliziert werden, werden die Werte am Anfang und am Ende Null, sodass beim Umbruch kein Schrittübergang stattfindet.

Die Fensterfunktion, die Sie anwenden, ändert den Frequenzinhalt des Puffers. Sie wählen eine Funktion aus, die einen akzeptablen Kompromiss darstellt. Ein Gaußscher ist ein guter Ausgangspunkt. Für jede praktische Anwendung, bei der Sie den Frequenzinhalt der Daten nicht genau steuern können, müssen Sie eine Fensterfunktion anwenden, um den impliziten Schrittübergang aufgrund der Datenlänge zu eliminieren.

Restprobleme:

Es gibt eine weitere mögliche Quelle für hochfrequentes spektrales Rauschen in der FFT. Der Effekt nimmt mit der FFT-Länge zu und kann in einigen Fällen an 1.000.000 Datenpunkten auftreten.

Die innere Schleife des FFT-Algorithmus verwendet die Punkte um einen Kreis in der komplexen Ebene: e ^ (i * theta), wobei der Algorithmus 'Theta' in aufeinanderfolgend feineren Schritten von 0 bis 2 * pi bis zur Anzahl der Punkte in der wiederholt FFT. Das heißt, wenn Sie eine FFT für 1.048.576 Abtastwerte in einer der Iterationen der äußeren Schleife berechnen, berechnet die innere Schleife e ^ (i * Theta), wobei Theta = 2 * pi * n / N, wobei N 1.048.576 ist iteriert n von 0 auf 1.048.575. Dies geschieht durch die offensichtliche Methode der sukzessiven Multiplikation mit e ^ (i * 2 * pi / N).

Sie können das Problem sehen: Wenn N groß wird, wird e ^ (i * 2 * pi / N) sehr nahe an 1 und es wird N-mal multipliziert. Mit Gleitkomma mit doppelter Genauigkeit sind die Fehler gering, aber ich denke, Sie können das resultierende Grundrauschen sehen, wenn Sie genau hinschauen. Mit Gleitkomma mit einfacher Genauigkeit erzeugt die FFT-Berechnung selbst bei 1.000.000 Datenpunkten ein signifikantes Grundrauschen.

Es gibt alternative Techniken zur Berechnung von e ^ (i * theta), die dieses Problem beseitigen, aber die Implementierung ist komplexer. Ich musste eine solche Implementierung nur einmal erstellen.


In Bezug auf DFT gegenüber FFT wird es im Kontextmenü von LTSPICE als "FFT" bezeichnet, während im Konfigurationsdialog als "DFFT" bezeichnet wird. Wenn ich jetzt die Hilfedatei lese, sehe ich, was ein betroffener Bürger darüber erwähnt hat, dass LTSPICE eine Anzahl von Punkten ohne Zweierpotenz akzeptiert.
Watkipet

0

Möglicher Grund: -

Wenn Sie eine transiente Welle in einem Simulator zeichnen, interpoliert sie zwischen realen Berechnungen, um die harte Arbeit zu minimieren und ein schnelleres Ergebnis auf dem Bildschirm anzuzeigen.

Die Standardeinstellung für den maximalen Zeitschritt in LTSpice ist möglicherweise 100 us. Zwischen diesen Punkten haben Sie also Ergebnisse interpoliert, dh sie sind nicht perfekt und tragen zu Verzerrungen bei, die in der FFT als Harmonische angesehen werden.

Versuchen Sie, Ihren maximalen Zeitschritt so einzustellen, dass er viel kleiner als der aktuelle ist, und sehen Sie, was passiert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.