FFT der Sinuswelle kommt nicht wie erwartet, dh einzelner Punkt


14

Die Cyan-Kurve ist ein Spektrum von 50 Hz und die Magenta-Kurve ist eine 50,1-Hz-Sinuswelle (mit einer Amplitude von 0,7). Beide werden mit 1024 Proben / s abgetastet. Ich habe eine 1024-Punkte-FFT durchgeführt, um dieses Spektrum zu erhalten.

Warum ist nur das 50-Hz-Spektrum ein Einzelwert? Warum besteht der 50,1-Hz-Sinus aus anderen Frequenzen als 50,1 Hz? Woher kommen diese neuen Frequenzen?

Ich habe das 50,1-Hz-Signal nicht linear verarbeitet! Auch die 50,1 Hz scheinen eine kleinere maximale Amplitude zu haben, dh sie ist nicht 0,7, obwohl die von mir erzeugte Sinuswelle tatsächlich eine Amplitude von 0,7 hat.

Warum ist das?

Zwei Spektren für 50 Hz bzw. 50,1 Hz Erhältlich mit dem MATALB-Befehl fft ();


Könnten Sie bitte den Code posten, mit dem Sie diese Handlung erstellt haben? Ich gehe davon aus, dass Ihre Signale so nahe beieinander liegen, dass das FFT sie nicht richtig auflösen kann. Das oder ein spektrales Verschmieren, weil die Samples nicht mit den Frequenzen übereinstimmen.
Tom Kealy

4
Die folgenden Antworten sind richtig. Der Begriff für das, was Sie beobachten, wird als spektrale Streuung bezeichnet und wird beobachtet, wenn Sie eine Sinuskurve analysieren, deren Frequenz nicht genau in der Mitte eines Ihrer DFT-Ausgabefächer liegt.
Jason R

Kann ich bitte wissen, was Sie gegen was geplant haben, damit Sie Ihre Spitze bei der
50-

In dieser Antwort finden Sie eine detaillierte Beschreibung des Problems und dessen Behebung.
Dilip Sarwate

Antworten:


14

Tatsächlich gibt Matts Antwort hier bereits einen Überblick über das Problem: Die DFT ist sowohl im Zeit- als auch im Frequenzbereich implizit periodisch (siehe diese Frage ). Aus Ihren Parametern können wir berechnen, dass Ihr Beobachtungszeitraum 1 s beträgt. Das heißt, Sie beobachten 50 Perioden eines 50-Hz-Tons. Eine periodische Verlängerung dieses Beobachtungsintervalls führt immer zu einer scheinbaren Sinuswelle. Wenn Sie den 50,1-Hz-Ton nehmen, transformieren Sie 50,1-Perioden einer Schwingung. Eine periodische Verlängerung dieses Signals führt zu Phasensprüngen, die zusätzliche spektrale Nebenflüsse verursachen.

fs/NDFT=1024Hz/1024=1Hz

Beide oben beschriebenen Effekte tragen zum beobachteten Spektrum bei.


1
Das macht Sinn. Aber nur um die von Ihnen beschriebene spektrale Streuung klarer zu machen, liegt ein Problem mit dem Werkzeug (FFT) zur Beobachtung von Spektren vor. Es ist kein Fehler im Signal. Bedeutet, wenn ich ein Audiosignal von 50,1 Hz "höre", erscheint es meinen Ohren als ein einzelner Ton und nicht als irgendeine Art von "Rauschen". Habe ich recht?
GPUGUY

1
Du hast absolut recht. Es zeigt, wie wichtig es ist, zu verstehen, was die DFT tatsächlich tut, um sie richtig interpretieren zu können. Als Randbemerkung: Was Sie in einer tatsächlichen Implementierung "hören" würden, hängt auch davon ab, wie Sie das diskrete Signal in ein analoges Signal konvertieren.
Deve

11

Dies ist der Effekt des Abschneidens oder Fensters des Sinussignals. Sie müssen das Signal so abschneiden, dass es immer noch die ursprüngliche Sinuswelle ist, wenn Sie das verschobene Signal zu dem abgeschnittenen Signal hinzufügen.


6

Sie erhalten nur einen FFT-Punkt mit einem einzigen Ergebnis für eine Frequenz von reinem unmoduliertem Sinus, die in der FFT-Apertur oder -Breite genau ganzzahlig periodisch ist. Jede andere Frequenz der Sinuskurve wird mit der Transformation (einem periodischen Sinc) des Standardfensters (einem Rechteck) als gefaltet angezeigt.

50,1 Hz sind im 1-Sekunden-Fenster Ihrer FFT nicht genau periodisch.

Diese anderen "Leck" -FFT-Ergebnisbereiche oder -Frequenzen werden benötigt, um die Diskontinuität darzustellen, die zwischen den Fenstergrenzen durch jedes Signal erzeugt wird, das in der FFT-Breite nicht genau ganzzahlig periodisch ist. Dies liegt daran, dass alle Basisvektoren einer DFT innerhalb der Breite der DFT genau ganzzahlig sind und somit keine scharfe Diskontinuität zwischen dem Ende und dem Anfang des Basisvektors aufweisen. Daher kann jedes Signal, das diese Eigenschaften nicht aufweist, nicht durch nur einen DFT-Basisvektor (und sein komplexes Konjugat) dargestellt werden, sodass die Informationen über den Rest des Signals irgendwo abgelegt werden müssen.

Da die Gesamtenergie durch die FFT-Transformation (Parseval'a-Theorem) erhalten bleibt, nimmt die Energie in den "Leck" -Behältern dem Peak-Bin ab. Daher muss die Größe des Peak-Bins niedriger sein.


5

Ich wette, Ihre Sinuswelle ist beim ersten und letzten Sample Null? Das sollte nicht sein. Es sollte so ausgerichtet sein, dass das nächste Sample nach dem letzten Sample Null ist, so dass Sie Kopien des Signals nacheinander kopieren und einfügen können und sie fortlaufend aussehen, ohne doppelte Samples. Stellen Sie es sich vielleicht wie ein gekacheltes Desktop-Hintergrundbild vor, bei dem eine Kante beim Kacheln nahtlos mit der gegenüberliegenden Kante zusammentreffen muss. :)

Ein Python-Beispiel finden Sie unter https://gist.github.com/endolith/236567 :

# Sampling rate
fs = 128 # Hz

# Time is from 0 to 1 seconds, but leave off the endpoint, so that 1.0 seconds is the first sample of the *next* chunk
length = 1 # second
N = fs * length
t = linspace(0, length, num = N, endpoint = False)

# Generate a sinusoid at frequency f
f = 10 # Hz
a = cos(2 * pi * f * t)

# Use FFT to get the amplitude of the spectrum
ampl = 1/N * abs(fft(a))

Sehen Sie, wie zwei Kopien des Signals zu einer kontinuierlichen Welle zusammenpassen:

Bildbeschreibung hier eingeben

In diesem Fall ist die FFT-Energie vollständig in einem einzelnen Behälter enthalten:

Bildbeschreibung hier eingeben


1
Ich hatte das gleiche Problem wie OP. Es wurde behoben, indem Endpunkt = False Flag gesetzt wurde. Ich dachte, dass der Zeilenbereich standardmäßig (geschlossen, offen) ist, aber es stellt sich heraus, dass er (geschlossen, geschlossen) ist. Ich habe den Fehler dank Ihres Codes gefunden.
Trismegistos

-1

Dies tritt aufgrund von spektralen Leckagen und Fenstern auf. Die ideale Antwort, dh die Impulsfunktion, ist für eine kontinuierliche Zeitsinuswelle. Wenn Sie die DFT einer diskreten Sinuswelle in einem Digitalcomputer aufnehmen, nehmen Sie im Grunde eine Fourier-Transformation von Sinus mit Fenster und Abtastung und tasten sie dann im Frequenzbereich ab. Dies verursacht die spektrale Leckage. Siehe: http://w.astro.berkeley.edu/~jrg/ngst/fft/leakage.html

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.