2012-05-11 25 views
7

Nauczyłem się o transformacji Fouriera na zajęciach z matematyki i myślałem, że ją zrozumiałem. Teraz próbuję grać z R (język statystyczny) i interpretować wyniki dyskretnej FFT w praktyce. To co mam zrobić:Dlaczego otrzymuję dwa skoki częstotliwości od prostej funkcji sin przez FFT w R?

x = seq(0,1,by=0.1) 
y = sin(2*pi*(x)) 

calcenergy <- function(x) Im(x) * Im(x) + Re(x) * Re(x) 

fy <- fft(y) 
plot(x, calcenergy(fy)) 

i dostać tę działkę:

energy density spectrum of sin(2*pi*(x)) from 0 to 1 with a 0.1 step

Jeśli rozumiem tego prawa, to oznacza „połowę” widma gęstości energii. Ponieważ transformacja jest symetryczna, mogę po prostu odzwierciedlić wszystkie wartości do ujemnych wartości x, aby uzyskać pełne widmo.

Jednak nie rozumiem, dlaczego dostaję dwa skoki? Tutaj jest tylko jedna częstotliwość zatok. Czy to efekt aliasowania?

Ponadto, nie mam pojęcia, jak uzyskać częstotliwości z tego wątku. Załóżmy, że jednostki funkcji zatokowej były sekundami, to jest szczyt przy 1,0 w widmie gęstości 1 Hz?

Jeszcze raz: rozumiem teorię FFT; praktyczna aplikacja to problem :).

Dzięki za pomoc!

+0

Stycznie "calcenergy" można zapisać jako 'function (x) abs (x)^2'. (To będzie bardziej wydajne). – huon

+0

@dbaupp oh dzięki. Wiedziałem, że jest jakiś zbudowany, aby to zrobić, ale leniwego szukałem go :) –

Odpowiedz

10

Dla czysto rzeczywistego sygnału wejściowego o wartości N otrzymuje się złożony wynik N punktów o zespolonej symetrii sprzężonej o N/2. Możesz zignorować punkty wyjściowe powyżej N/2, ponieważ nie dostarczają one żadnych użytecznych informacji dodatkowych dla rzeczywistego sygnału wejściowego, ale jeśli je wykreślisz, zobaczysz wspomnianą wyżej symetrię, a dla pojedynczej fali sinusoidalnej zobaczysz szczyty na pojemnikach n i N - n. (Uwaga: możesz myśleć o górnych pojemnikach N/2 jako o reprezentujących ujemnych częstotliwościach.) Podsumowując, dla rzeczywistego sygnału wejściowego N punktów, otrzymasz N/2 użytecznych złożonych pojemników wyjściowych z FFT, które reprezentują częstotliwości od DC (0 Hz) do Nyquist (Fs/2).

+0

Dzięki za odpowiedź. Po prostu próbowałem użyć nieparzystej liczby wartości z '' seq (0,1.1, by = 0.1) '' i rzeczywiście symetria była dokładnie wokół szóstego wiadra, jak powiedziałeś. To już odpowiada na moje pierwsze pytanie. Co powiesz na drugi, jak mogę określić częstotliwość tych pojemników? Gdybym mógł (upragnił 15 powtórzeń), zgodziłbym się:/ –

+0

Och, właśnie cię widziałem, że już w międzyczasie :) Dziękuję! –

+2

+1 Wreszcie otrzymałem powtórkę, aby awansować :) –

2

Aby uzyskać częstotliwości z wyniku FFT, należy znać częstotliwość próbkowania danych wprowadzonych do FFT i długość FFT. Częstotliwość środkowa każdego z pojemników to wskaźnik bin pomnożony przez częstotliwość próbkowania podzieloną przez długość FFT. W ten sposób otrzymasz częstotliwości od DC (0 Hz) do Fs/2 w połowie pojemnika.

Druga połowa wyników FFT to tylko złożone sprzężenia pierwszego dla rzeczywistych danych wejściowych. Powodem jest to, że wyimaginowane części złożonych koniugatów ulegają anulowaniu, co jest wymagane do przedstawienia zsumowanego wyniku z zerową wyimaginowaną treścią, np. ściśle rzeczywisty.

Powiązane problemy