Saya butuh bantuan untuk memahami output dari komputasi DFT / FFT.
Saya seorang insinyur perangkat lunak berpengalaman dan perlu menafsirkan beberapa bacaan akselerometer ponsel cerdas, seperti menemukan frekuensi utama. Sayangnya, saya tidur sepanjang sebagian besar kelas EE kuliah saya lima belas tahun yang lalu, tetapi saya telah membaca tentang DFT dan FFT selama beberapa hari terakhir (tampaknya sedikit berhasil).
Tolong, tidak ada tanggapan "ambil kelas EE". Saya sebenarnya berencana melakukan itu jika majikan saya akan membayar saya. :)
Jadi inilah masalah saya:
Saya telah menangkap sinyal pada 32 Hz. Berikut adalah sampel 1 detik dari 32 poin, yang telah saya buat grafiknya di Excel.
Saya kemudian mendapat beberapa kode FFT yang ditulis di Java dari Columbia University (setelah mengikuti saran dalam posting di " FFT handal dan cepat di Java ").
Output dari program ini adalah sebagai berikut. Saya yakin ini menjalankan FFT di tempat, jadi ini menggunakan kembali buffer yang sama untuk input dan output.
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 ]
Jadi, pada titik ini, saya tidak bisa membuat head atau tail output. Saya memahami konsep DFT, seperti bagian sebenarnya adalah amplitudo gelombang kosinus komponen dan bagian imajinernya adalah amplitudo gelombang sinus komponen. Saya juga dapat mengikuti diagram ini dari buku hebat " The Scientist and Engineer's Guide to Digital Signal Processing ":
Jadi pertanyaan spesifik saya adalah:
Dari keluaran FFT, bagaimana cara menemukan "frekuensi yang paling sering terjadi"? Ini adalah bagian dari analisis saya terhadap data akselerometer saya. Haruskah saya membaca array nyata (cosinus) atau imajiner (sinus)?
Saya memiliki input 32-poin dalam domain waktu. Bukankah seharusnya keluaran dari FFT berupa larik 16 elemen untuk real dan larik 16 elemen untuk imajiner? Mengapa program ini memberi saya keluaran larik nyata dan imajiner, keduanya berukuran 32?
Terkait dengan pertanyaan sebelumnya, bagaimana cara mengurai indeks dalam larik keluaran? Mengingat input saya dari 32 sampel yang diambil sampelnya pada 32 Hz, pemahaman saya adalah bahwa output array 16-elemen harus memiliki indeksnya tersebar secara seragam hingga 1/2 tingkat pengambilan sampel (dari 32 Hz), jadi saya benar dalam memahami bahwa setiap elemen dari array mewakili (32 Hz * 1/2) / 16 = 1 Hz?
Mengapa keluaran FFT memiliki nilai negatif? Saya pikir nilai mewakili amplitudo dari sinusoid. Sebagai contoh, keluaran dari Real [3] = -1.075 berarti amplitudo -1.075 untuk gelombang kosinus frekuensi 3. Apakah benar? Bagaimana amplitudo bisa negatif?