Próbuję zaimplementować FFT, aby zrozumieć, jak to działa. Używam losowego pliku dźwiękowego (więc i nie może kontrolować rozmiaru sygnału), z częstotliwością próbkowania 44,1 kHz. Korzystam z tej biblioteki
https://www.nayuki.io/res/free-small-fft-in-multiple-languages/Fft.java
Celem jest zastosowanie tej formuły do pobierz częstotliwość: F = n * Fs / N
Z n liczba pojemników. Fs częstotliwość próbkowania i N rozmiar FFT
1) Fft ma mieć długość, większość z nich używa potęgi 2 podstawy. Ale jak mogę poznać długość FFT, jeśli zastosuję ją do całej tablicy danych? czy to jest rozmiar tej tablicy?
2) Nie rozumiem pojemników, w jaki sposób są one przetwarzane? Wiem, że FFT działa z fragmentami danych, ale jeśli podam pełną tablicę danych, w jaki sposób są one „tworzone”.
Komentarze
- Odpowiedzi na te pytania można znaleźć, przeszukując internet i czytając. Polecam również rozpoczęcie programowania od matematycznej konstrukcji sygnały o dość krótkim czasie trwania i zastosuj do nich oprogramowanie FFT i przeanalizuj wyniki.
- Naprawdę dużo szukałem, ale nie mogłem ' rozumieć, ale może i ' m po prostu za wolno. Dziękuję za troskę.
- Spróbuj wyszukać " Dyskretna transformacja Fouriera " lub " jak działa DFT " zamiast " jak działa FFT ". Szybka transformata Fouriera to obliczeniowy skrót dyskretnej transformacji Fouriera Formularz. W przypadku tego ostatniego wyszukiwania istnieje większe prawdopodobieństwo, że znajdziesz informacje o wydajności obliczeniowej, a nie o samym procesie. Nie ' nie widzę, jak można oczekiwać, że ktoś lepiej wyjaśni podstawy w szybkiej odpowiedzi na forum niż garść witryn poświęconych temu właśnie to. Pierwsze cztery artykuły na moim blogu również powinny Ci się przydać. Zacznij od dsprelated.com/showarticle/754.php .
Odpowiedz
Pytanie 1
Jeśli zastosujesz ją na całej długości tablicy, długość FFT będzie długością tablicy. Ale FFT jest bardziej wydajna, jeśli długość jest potęgą dwóch, więc często umieszcza się 0 cali na końcu sygnału, aż jego długość osiągnie potęgę 2.
Zbyt prosty przykład …
x = [3.4, 2.56, 1.3]
x
ma długość 3, następna potęga z 2 po 3 to 4, więc zmieniamy x
na
x = [3.4, 2.56, 1.3, 0]
i zastosuj FFT o długości 4.
Kolejny duży ALE! Jeśli twój sygnał jest długi, staje się niezwykle nieefektywne, aby wykonać całą rzecz naraz. Nie chciałbyś próbować wykonać FFT na pliku audio o długości nawet krótkiej piosenki. W takim przypadku dzielimy sygnał na fragmenty o rozsądnym rozmiarze, wykonujemy FFT dla każdego i uśrednij wyniki.
Szanse są dobre, że to, co faktycznie chcesz zrobić ze swoimi danymi, to nie tylko standardowa FFT, ale raczej proces uśredniania, który opisałem powyżej. Google Bartlett i Welch metody na więcej d etails.
Pytanie 2
Nie jestem w 100% pewien, o co pytasz. Zinterpretuję to tak, jak chcesz wiedzieć, w jaki sposób szerokość przedziałów częstotliwości jest określana i wykonywana z tym.
Szerokość każdego przedziału częstotliwości jest określana wyłącznie na podstawie częstotliwości próbkowania sygnału i długość FFT. Szerokość każdego przedziału to częstotliwość próbkowania podzielona przez liczbę próbek w FFT.
df = fs / N
Przedziały częstotliwości zaczynają się od -fs/2
i sięgają do fs/2
. Oznacza to, że jeśli próbkowano przy 100 Hz dla 100 próbek, przedziały częstotliwości będą miały szerokość 1 Hz. Jeśli weźmiesz 200 próbek, będziesz mieć teraz 2x więcej przedziałów częstotliwości, a ich szerokość będzie wynosić 1/2 Hz każdy.
Komentarze
- Dziękuję bardzo, to wszystko, czego nie ' rozumiem.