Próbowałem różnych kodów transformacji Fouriera na pojedynczych falach sinusoidalnych i wszystkie wytwarzają rozproszone widmo z rezonansem na częstotliwości sygnału, kiedy teoretycznie powinny wyświetlać pojedynczy słupek.
Częstotliwość próbkowania ma niewielki wpływ (tutaj 10 kHz), jednak liczba cykli:
Jeden cykl:
100 cykli:
100000 cykli:
Wygląda na to, że transformata Fouriera zbiega się tylko dla nieskończonej liczby cykli, dlaczego tak jest? Czy okno czasowe dokładnie jednego cyklu nie powinno dawać takich samych wyników jak w przypadku N cykli?
Zastosowanie: Wynika to zarówno z ciekawości, jak i dlatego, że chcę dowiedzieć się, jak bardzo reakcja krokowa systemu pierwszego rzędu będzie ekscytująca rezonans zespołu mechanicznego. Dlatego potrzebuję dokładnej transformaty Fouriera odpowiedzi ... której już nie ufam. Co mogę zrobić, aby poprawić dokładność w oparciu o przypadek „fali sinusoidalnej”?
PS: Te konkretne zrzuty ekranu są oparte na kodzie tutaj .
źródło
Odpowiedzi:
To artefakt okienkowania.
Połączony kod uzupełnia sygnał próbki o wartości 10.000 zerami, dzięki czemu długość wynosi potęgę dwóch.
Zauważ, że w powyższym kodzie FFT jest pobierany z rozmiarem FFT,
NFFT
który jest następną potęgą 2 większą niż długość sygnału (w tym przypadku 16 384). Z dokumentacji Mathworksfft()
:Oznacza to, że tak naprawdę nie bierzesz FFT „czystej fali sinusoidalnej” - bierzesz FFT fali sinusoidalnej z płaskim sygnałem po niej.
Jest to równoważne z wzięciem FFT fali sinusoidalnej pomnożonej przez funkcję kwadratowego okna. Widmo FFT jest wówczas splotem widma częstotliwości fali sinusoidalnej (funkcja impulsu) z widmem częstotliwości fali prostokątnej (sinc (f).)
Jeśli zmienisz się
L = 16,384
tak, że nie będzie padania zera sygnału, zaobserwujeszperfect
FFT.Dalsze słowa kluczowe wyszukiwania: „Wyciek spektralny”, „Funkcja okna”, „Okno Hamminga”.
Edycja: Oczyściłem trochę materiału, który napisałem na ten temat na uniwersytecie, który jest znacznie bardziej szczegółowy. Opublikowałem to na swoim blogu .
źródło