FFT fali sinusoidalnej nie nadchodzi zgodnie z oczekiwaniami, tj. Pojedynczy punkt


14

Wykres cyjanowy ma widmo 50 Hz, a magenta - fala sinusoidalna 50,1 Hz (o amplitudzie 0,7). Oba są próbkowane przy 1024 próbkach / s. Wykonałem 1024-punktowy FFT, aby uzyskać to widmo.

Dlaczego tylko widmo 50 Hz jest pojedynczą wartością? Dlaczego sinus 50,1 Hz składa się z innych częstotliwości oprócz 50,1 Hz; skąd pochodzą te nowe częstotliwości?

Nie wykonałem żadnego nieliniowego przetwarzania sygnału 50,1 Hz! Również 50,1 Hz wydaje się mieć mniejszą maksymalną amplitudę, tj. Nie jest to 0,7, podczas gdy w rzeczywistości generowana przeze mnie fala sinusoidalna ma amplitudę 0,7.

Dlaczego to?

Dwa widma, odpowiednio dla 50 Hz i 50,1 Hz Otrzymane przez komendę MATALB fft ();


Czy możesz podać kod użyty do wyprodukowania tego wątku? Domyślam się, że ponieważ twoje sygnały są tak blisko siebie, fft nie może ich poprawnie rozwiązać. To lub jakieś rozmazanie spektralne, ponieważ próbki nie pokrywają się z częstotliwościami.
Tom Kealy 11.04.13

4
Odpowiedzi poniżej są poprawne. Termin tego, co obserwujesz, nazywa się wyciekiem spektralnym i jest obserwowany, gdy analizujesz sinusoidę, której częstotliwość nie leży dokładnie w środku jednego z twoich pojemników wyjściowych DFT.
Jason R

proszę, czy mogę wiedzieć, co knułeś przeciwko czemu możesz uzyskać swój skok przy znaku 50 Hz
Nazario_Jnr,

Zobacz tę odpowiedź, aby uzyskać szczegółowy opis problemu i sposobu jego rozwiązania.
Dilip Sarwate,

Odpowiedzi:


14

Właściwie odpowiedź Matta już pokazuje tutaj jedno spojrzenie na problem: DFT jest domyślnie okresowy zarówno w dziedzinie czasu, jak i częstotliwości (patrz to pytanie ). Na podstawie twoich parametrów możemy obliczyć, że twój okres obserwacji wynosi 1 s. Oznacza to, że obserwujesz 50 okresów tonu 50 Hz. Okresowe wydłużanie tego interwału obserwacji zawsze spowoduje niewyobrażalną falę sinusoidalną. Jeśli weźmiesz ton 50,1 Hz, transformujesz 50,1 okresów oscylacji. Okresowe przedłużanie tego sygnału spowoduje skoki fazowe, które powodują dodatkowe dopływy widmowe.

fas/N.refaT.=1024Hz/1024=1Hz

Oba opisane powyżej efekty przyczyniają się do obserwowanego spektrum.


1
To ma sens. Ale dla jasności, że opisany wyciek widma jest problemem z narzędziem (FFT) do obserwacji widm. To nie jest defekt perse w sygnale. Oznacza Jeśli „usłyszę” sygnał audio o częstotliwości 50,1 Hz, będzie on wydawał się moim uszom jako pojedynczy dźwięk, a nie jakiś rodzaj „szumu”. Czy mam rację?
gpuguy

1
Masz całkowitą rację. Pokazuje, jak ważne jest zrozumienie, co tak naprawdę robi DFT, aby móc poprawnie go zinterpretować. Na marginesie: to, co „usłyszysz” w rzeczywistej implementacji, zależy również od tego, w jaki sposób konwertujesz dyskretny na sygnał analogowy.
Deve,

11

Jest to efekt obcinania lub okienkowania sygnału sinusoidalnego. Musisz obciąć w taki sposób, że jeśli dodasz przesunięty sygnał do obciętego, nadal będzie to oryginalna fala sinusoidalna.


6

Otrzymasz tylko jeden wynik punktu FFT dla częstotliwości czystego niemodulowanego sinusoidy, która jest dokładnie liczbą całkowitą okresową w otworze lub szerokości FFT. Każda inna częstotliwość sinusoidy pojawi się jako splątana z transformacją (okresowy Sinc) domyślnego okna (prostokąt).

50,1 Hz nie jest dokładnie okresowe w 1-sekundowym oknie twojego FFT.

Te inne przedziały lub częstotliwości wyniku FFT „wycieku” są potrzebne do przedstawienia nieciągłości wytwarzanej między granicami okna przez dowolny sygnał, który nie jest dokładnie liczbą całkowitą okresową w szerokości FFT. Jest tak, ponieważ wszystkie wektory podstawowe DFT są dokładnie liczbami całkowitymi okresowymi w obrębie szerokości DFT, a zatem nie mają wyraźnej nieciągłości między końcem i początkiem wektora podstawowego. Tak więc każdy sygnał, który nie ma tych cech, nie może być reprezentowany przez jeden wektor bazowy DFT (i jego złożoną koniugat), więc informacja o reszcie sygnału musi gdzieś iść.

Ponieważ całkowita energia jest zachowywana przez transformację FFT (twierdzenie Parseval'a), energia w przedziałach „wycieków” odbiera się z przedziału wartości szczytowej. Zatem wielkość szczytu bin musi być mniejsza.


5

Założę się, że Twoja fala sinusoidalna wynosi zero przy pierwszej i ostatniej próbce? Nie powinno tak być. Powinien być ustawiony w linii, aby następna próbka po ostatniej próbce wynosiła zero, aby można było kopiować i wklejać kopie sygnału jeden po drugim, aby wyglądały na ciągłe, bez powielonych próbek. Może pomyśl o tym jak o kafelkowej tapecie na pulpicie, gdzie jedna krawędź musi płynnie stykać się z drugą krawędzią po ułożeniu kafelków. :)

Zobacz https://gist.github.com/endolith/236567 na przykład Pythona:

# 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))

Zobacz, jak dwie kopie sygnału pasują do siebie, tworząc ciągłą falę:

wprowadź opis zdjęcia tutaj

Kiedy tak się dzieje, energia FFT jest zawarta w całości w jednym pojemniku:

wprowadź opis zdjęcia tutaj


1
Miałem taki sam problem jak OP. Zostało to rozwiązane dzięki ustawieniu parametru endpoint = False flag. Myślałem, że przestrzeń liniowa jest domyślnie (zamknięta, otwarta), ale okazuje się, że jest (zamknięta, zamknięta). Znalazłem błąd dzięki Twojemu kodowi.
Trismegistos,

-1

Dzieje się tak z powodu wycieku widmowego i okienkowania. Idealna reakcja, tj. Funkcja impulsu, służy do ciągłej fali sinusoidalnej. Kiedy weźmiesz DFT dyskretnej fali sinusoidalnej w komputerze cyfrowym, w zasadzie bierzesz transformatę Fouriera sinusoidy okienkowanej i próbkowanej, a następnie próbkujesz ją w dziedzinie częstotliwości. To powoduje wyciek widmowy. Patrz: http://w.astro.berkeley.edu/~jrg/ngst/fft/leakage.html

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.