Potrzebuję pomocy w zrozumieniu wyników obliczeń DFT / FFT.
Jestem doświadczonym inżynierem oprogramowania i muszę zinterpretować niektóre odczyty akcelerometru smartfona, takie jak znajdowanie głównych częstotliwości. Niestety piętnaście lat temu przespałem większość moich zajęć na uczelniach EE, ale czytałem o DFT i FFT przez ostatnie kilka dni (najwyraźniej bezskutecznie).
Proszę, nie ma odpowiedzi „idź na zajęcia EE”. Planuję to zrobić, jeśli mój pracodawca mi zapłaci. :)
Oto mój problem:
Przechwyciłem sygnał przy 32 Hz. Oto 1-sekundowa próbka 32 punktów, które sporządziłem na wykresie w programie Excel.
Potem dostałem kod FFT napisany w Javie z Columbia University (postępując zgodnie z sugestiami w poście „ Niezawodny i szybki FFT w Javie ”).
Wynik tego programu jest następujący. Uważam, że działa w miejscu FFT, więc ponownie używa tego samego bufora zarówno dla wejścia, jak i wyjścia.
Before:
Re: [0.887 1.645 2.005 1.069 1.069 0.69 1.046 1.847 0.808 0.617 0.792 1.384 1.782 0.925 0.751 0.858 0.915 1.006 0.985 0.97 1.075 1.183 1.408 1.575 1.556 1.282 1.06 1.061 1.283 1.701 1.101 0.702 ]
Im: [0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ]
After:
Re: [37.054 1.774 -1.075 1.451 -0.653 -0.253 -1.686 -3.602 0.226 0.374 -0.194 -0.312 -1.432 0.429 0.709 -0.085 0.0090 -0.085 0.709 0.429 -1.432 -0.312 -0.194 0.374 0.226 -3.602 -1.686 -0.253 -0.653 1.451 -1.075 1.774 ]
Im: [0.0 1.474 -0.238 -2.026 -0.22 -0.24 -5.009 -1.398 0.416 -1.251 -0.708 -0.713 0.851 1.882 0.379 0.021 0.0 -0.021 -0.379 -1.882 -0.851 0.713 0.708 1.251 -0.416 1.398 5.009 0.24 0.22 2.026 0.238 -1.474 ]
Tak więc w tym momencie nie mogę zrobić orzeł ani reszki z wyjścia. Rozumiem pojęcia DFT, takie jak część rzeczywista to amplitudy składowych fal cosinusowych, a część urojona to amplitudy składowych fal sinusoidalnych. Mogę również postępować zgodnie z tym schematem ze wspaniałej książki „ The Scientist and Engineer's Guide to Digital Signal Processing ”:
Więc moje konkretne pytania to:
Jak na podstawie danych wyjściowych FFT znaleźć „najczęściej występujące częstotliwości”? To część mojej analizy danych z akcelerometru. Czy powinienem czytać tablice rzeczywiste (cosinus) czy urojone (sinus)?
Mam 32-punktowe wejście w dziedzinie czasu. Czy wynikiem FFT nie powinna być 16-elementowa tablica dla liczb rzeczywistych i 16-elementowa tablica dla urojonych? Dlaczego program daje mi rzeczywiste i urojone tablice wyjściowe o rozmiarze 32?
W związku z poprzednim pytaniem, jak przeanalizować indeksy w tablicach wyjściowych? Biorąc pod uwagę moje dane wejściowe 32 próbek próbkowanych z częstotliwością 32 Hz, rozumiem, że 16-elementowa tablica wyjściowa powinna mieć swój indeks równomiernie rozłożony do 1/2 częstotliwości próbkowania (32 Hz), więc mam rację, rozumiejąc, że każdy element tablicy reprezentuje (32 Hz * 1/2) / 16 = 1 Hz?
Dlaczego wynik FFT ma wartości ujemne? Myślałem, że wartości reprezentują amplitudy sinusoidy. Na przykład wyjście Real [3] = -1,075 powinno oznaczać amplitudę -1,075 dla fali cosinusowej o częstotliwości 3. Czy to prawda? Jak amplituda może być ujemna?