interpretasi FFT

Saya sedang mengerjakan proyek Android di mana saya menggunakan FFT untuk memproses data akselerometer dan saya memiliki masalah dalam memahami cara kerja hal-hal ini. Saya menggunakan perpustakaan jTransform oleh Piotr Wendykier dengan cara berikut:

        int length = vectors.length;
        float[] input = new float[length*2];
        for(int i=0;i<length;i++){
            input[i]=vectors[i];
        }

        FloatFFT_1D fftlib = new FloatFFT_1D(length);
        fftlib.complexForward(input);

        float outputData[] = new float[(input.length+1)/2];
        if(input.length%2==0){
            for(int i = 0; i < length/2; i++){

                outputData[i]= (float) Math.sqrt((Math.pow(input[2*i],2))+(Math.pow(input[2*(i)+1], 2)));
            }
        }else{
            for(int i = 0; i < length/2+1; i++){

                outputData[i]= (float) Math.sqrt((Math.pow(input[2*i],2))+(Math.pow(input[2*i+1], 2)));
            }
        }

        List<Float> output = new ArrayList<Float>();
        for (float f : outputData) {
            output.add(f);
        }

hasilnya adalah array dengan data berikut output data visualization.

Saya memiliki masalah dengan menafsirkan data keluaran..Data berasal dari interval panjang 10 detik, dan frekuensi pengambilan sampel adalah 50Hz..Saat mengambil gambar, saya menggerakkan ponsel ke atas dan ke bawah setiap 3/4 detik di tangan saya, jadi mungkin saja bahwa titik ekstrim sekitar nilai x 16 dapat menjadi periode komponen sinyal terkuat? Saya perlu mendapatkan frekuensi komponen terkuat dalam sinyal..


person simekadam    schedule 06.01.2012    source sumber


Jawaban (2)


Frekuensi yang diwakili oleh setiap bin hasil fft adalah jumlah bin dikalikan laju sampel dibagi dengan panjang fft (dikonversi dengan fungsi Sinc yang memberikan lebar bukan nol, agar lebih teknis). Jika laju sampel Anda adalah 50 Hz dan panjang fft Anda adalah panjang fft adalah 512, maka bin 16 dari hasil fft akan mewakili sekitar 1,6 Hz yang mendekati periode 0,7 detik.

Lonjakan pada bin 0 (DC) mungkin mewakili gaya gravitasi bukan nol pada akselerometer.

person hotpaw2    schedule 07.01.2012
comment
Gravitasi tidak berpengaruh pada akselerometer... Lonjakan pada DC kemungkinan besar hanya berupa bias keluaran pada sensor, atau bahkan integral percepatan perangkat pada jendela pengukuran tidak nol (dengan kata lain, ada perubahan bersih kecepatan). - person Oliver Charlesworth; 07.01.2012
comment
@Oli: Menarik. Akselerometer di iPhone saya yang tergeletak di meja melaporkan konstanta -1 pada sumbu Z. Arah -1 adalah bagaimana orientasi perangkat ditentukan. Apakah Android berbeda? - person hotpaw2; 07.01.2012
comment
Hmm, saya tidak tahu apa-apa tentang sensor yang digunakan di ponsel, jadi saya cabut pernyataan saya sebelumnya! Namun, menurut saya nama akselerometer agak menyesatkan jika dirancang untuk melaporkan angka bukan nol saat perangkat tidak bergerak. - person Oliver Charlesworth; 07.01.2012
comment
@Oli : Cari arti kesetaraan dalam Teori Relativitas Umum Einstein. - person hotpaw2; 07.01.2012
comment
Jadi, sebagai pendukung setan, adakah cara yang diterima secara umum untuk menghilangkan kebisingan awal? Atau apakah itu 'fitur' khusus perangkat keras? - person Pedantic; 07.01.2012
comment
di Android ada beberapa mode SENSOR..Saya menggunakan akselerasi linier developer.android. com/reference/android/hardware/Sensor.html, sehingga tidak ada gravitasi sama sekali..saat menggunakan tipe lain saya mendapatkan nilai seperti cca 9.8 m/s^2..Sensor mengembalikan saya sebuah array dengan tiga nilai, masing-masing untuk satu sumbu..Yang saya proses seperti sqrt(values[0]^2+values[1]^2+values[2]^2).. Saya melihat grafiknya sayangnya sangat kecil, co ini dia lebih besar cl.ly/3r2J2K2p3M02321a2o37 - person simekadam; 07.01.2012
comment
Perlu disebutkan bahwa array input saya yang saya masukkan ke dalam fft setengah kosong, karena seperti yang saya ketahui, perpustakaan berfungsi di tempatnya, dan karena menghasilkan bagian imajiner dan nyata, saya memerlukan slot dua kali lebih banyak di array saya.. menurut saya ini agak aneh, tetapi menarik juga, bahwa elemen pertama dalam array keluaran selalu sangat besar dibandingkan dengan yang lain..sayangnya saya tidak menemukan dokumen yang bagus untuk perpustakaan.. - person simekadam; 07.01.2012

Karena Anda memiliki data sebenarnya, Anda harus meneruskan nilai ini ke fungsi realForward (bukan complexForward) seperti yang dinyatakan di sini.

person mostar    schedule 30.08.2012