Bisakah saya menggunakan FFT untuk mengartikan gerakan accelerometer?

10

Saya memiliki kebutuhan untuk mendeteksi dua gerakan berbeda yang terjadi ketika melihat data accelerometer. Berikut ini run down (sesingkat yang saya bisa lakukan):

Katakanlah iPhone sedang bolak-balik sambil tetap menghadap ke atas. Pengguna dapat melakukan satu osilasi (sekali maju atau mundur, gerakan satu) atau osilasi terus menerus untuk jumlah waktu berapa pun (gerakan dua).

Saat ini kode saya menyimpan daftar data accelerometer perangkat (sumbu-y) dari 50 frame terakhir. Setiap frame data ini dimasukkan melalui algoritma FFT (ini http://goo.gl/yi3mn ), dan kemudian saya mencoba menginterpretasikan domain frekuensi yang diberikan. Saya telah memperhatikan hubungan yang kuat antara kecepatan osilasi, dan kekuatan rentang frekuensi menengah hingga rendah.

Masalahnya adalah bahwa saya perlu mendeteksi (secara real-time ketika gerakan itu menggerakkan sesuatu di layar) apakah osilasi yang baru saja selesai adalah yang tunggal, atau yang terus berlanjut ke osilasi lain di arah yang berlawanan. Di sini saya harus menunjukkan bahwa accelerometer bekerja dengan pelat tekanan. Ketika osilasi berhenti, data input akan menunjukkan nilai yang berlawanan dari saat osilasi dilakukan. Ini membuatnya sulit untuk melihat perbedaan yang jelas antara gerakan maju tunggal dan ganda maju lalu mundur (pada akhir setiap osilasi pertama).

Adakah yang bisa menyarankan bagaimana saya bisa menggunakan FFT untuk menguraikan nilai besaran yang akurat (atau sesuatu yang berguna lainnya) yang bisa saya gunakan untuk memberi tahu perbedaan antara gerakan yang dijelaskan di atas?

Saya telah mencatat data yang saya gunakan untuk file teks. Ini adalah data mentah (nilai g-force) sepanjang sumbu y dari input accelerometer.

http://pastebin.ca/2108123 menunjukkan data untuk 2 osilasi tunggal (saya memegang perangkat masih di awal, akhir, dan di antara dua osilasi).

masukkan deskripsi gambar di sini

CATATAN: data mentah baru dengan 20 osilasi telah diunggah, tetapi belum diplot. http://pastebin.ca/2108387 menunjukkan data untuk 20 osilasi terus menerus (saya memegang perangkat masih di awal dan akhir).

masukkan deskripsi gambar di sini

rykardo
sumber
Tidak melihat data sendiri, kesan pertama saya adalah bahwa ini tampaknya bukan aplikasi yang baik untuk FFT. Apakah Anda memiliki beberapa data yang diambil yang dapat Anda poskan, baik dalam format mentah atau sebagai plot?
Jason R
Hai, terima kasih atas umpan baliknya. Apakah hanya sebuah file yang menunjukkan setiap nilai secara kronologis dapat diterima, dengan pembatas ','? Saya mendapatkan sekitar 60 nilai per detik. Saya menduga bahwa ini mungkin bukan aplikasi yang bagus juga. Mungkin kita bisa menyelesaikannya dengan beberapa data.
rykardo
2
Jika Anda memposting data mentah, kemungkinan seseorang dapat mengubahnya menjadi plot dan mengedit posting Anda dengannya.
Jason R
OK bagus. Akan segera mengunggah beberapa.
rykardo
Itu memakan waktu lebih lama dari yang saya harapkan. Saya menjalankan proyek dengan Unity, yang hanya dapat menerima data input dari perangkat pada 60 frame / detik. Ini berarti saya tidak dapat memiliki tingkat sampel yang tinggi, namun demikian. Apakah ini yang Anda maksud dengan saran Anda?
rykardo

Jawaban:

2

Melihat data yang saya tidak dapat melihat mengapa Anda ingin menggunakan FFT untuk tujuan ini (saya mungkin salah). Katakanlah Anda ingin mendeteksi gerakan tunggal atau ganda berdasarkan kumpulan data ini (yang telah Anda lampirkan) metode yang akan saya lihat adalah

  1. Sesuatu di garis laju perubahan nilai absolut. Derivatif pertama akan dilakukan dengan baik kurasa.
  2. Transformasi wavelet mungkin? Saya tidak bisa menguraikan lebih lanjut tentang kegunaannya sampai saya tahu apakah Anda ingin mengetahui posisi puncak atau tidak.

Jika satu-satunya hal yang ingin Anda deteksi adalah osilasi tunggal vs multipel maka FFT adalah, menurut saya, bukan pilihan yang sangat baik untuk analisis.

anasimtiaz
sumber
Terima kasih untuk umpan baliknya! Seorang teman menyarankan FFT mungkin cara untuk pergi, sebelum itu saya belum pernah menggunakannya. Yang perlu saya deteksi adalah apakah osilasi baru dimulai pada akhir setiap osilasi, atau tidak. Plot di atas harus memperlihatkan mengapa itu sulit. Saya pikir saya bisa menggunakan algoritma magnitudo, tetapi ini rumit karena kekuatan / kecepatan osilasi akan berbeda per pengguna.
rykardo