Apa hubungan antara panjang FFT dan resolusi frekuensi?

67

Jika saya telah mengambil sampel sinyal menggunakan metode pengambilan sampel yang tepat (Nyquist, filtering, dll.) Bagaimana cara menghubungkan panjang FFT saya dengan resolusi frekuensi yang dihasilkan yang dapat saya peroleh?

Seperti jika saya memiliki gelombang sinus 2.000 Hz dan 1.999 Hz, bagaimana saya menentukan panjang FFT yang dibutuhkan untuk secara akurat membedakan antara kedua gelombang tersebut?

Kellenjb
sumber

Jawaban:

81

Resolusi frekuensi tergantung pada hubungan antara panjang FFT dan laju sampling dari sinyal input.

Jika kami mengumpulkan 8192 sampel untuk FFT maka kami akan memiliki:

8192 samples2=4096 FFT bins

Jika laju pengambilan sampel kami adalah 10 kHz, maka teorema pengambilan sampel Nyquist-Shannon mengatakan bahwa sinyal kami dapat berisi konten frekuensi hingga 5 kHz. Kemudian, resolusi bin frekuensi kami adalah:

5 kHz4096 FFT bins1.22 Hzbin

Ini mungkin cara yang lebih mudah untuk menjelaskannya secara konseptual tetapi disederhanakan: resolusi nampan Anda hanya , di mana adalah laju pengambilan sampel sinyal input dan N adalah jumlah poin FFT digunakan (panjang sampel).fsampNfsamp

Kita dapat melihat dari atas bahwa untuk mendapatkan nampan FFT yang lebih kecil, kita dapat menjalankan FFT yang lebih lama (yaitu, mengambil lebih banyak sampel dengan laju yang sama sebelum menjalankan FFT) atau menurunkan laju sampling kami.

Tangkapan:

Selalu ada trade-off antara resolusi temporal dan resolusi frekuensi.

Pada contoh di atas, kita perlu mengumpulkan 8192 sampel sebelum kita dapat menjalankan FFT, yang ketika pengambilan sampel pada 10 kHz membutuhkan 0,82 detik.

Jika kami mencoba mendapatkan nampan FFT yang lebih kecil dengan menjalankan FFT yang lebih lama, akan dibutuhkan waktu lebih lama untuk mengumpulkan sampel yang dibutuhkan.

Itu mungkin baik-baik saja, mungkin tidak. Poin penting adalah bahwa pada laju pengambilan sampel yang tetap, peningkatan resolusi frekuensi mengurangi resolusi temporal. Itu adalah semakin akurat pengukuran Anda dalam domain frekuensi, semakin tidak akurat Anda dalam domain waktu. Anda secara efektif kehilangan semua informasi waktu di dalam panjang FFT.

Dalam contoh ini, jika nada 1999 Hz mulai dan berhenti di paruh pertama sampel 8192 FFT dan nada 2002 Hz diputar di paruh kedua jendela, kita akan melihat keduanya, tetapi tampaknya akan terjadi pada saat yang sama. waktu.

Anda juga harus mempertimbangkan waktu pemrosesan. Titik 8192 FFT membutuhkan daya pemrosesan yang layak. Cara untuk mengurangi kebutuhan ini adalah dengan mengurangi laju sampling, yang merupakan cara kedua untuk meningkatkan resolusi frekuensi.

Dalam contoh Anda, jika Anda menurunkan laju sampling ke sesuatu seperti 4096 Hz, maka Anda hanya membutuhkan 4096 titik FFT untuk mencapai 1 Hz sampah * 4096 Hz, maka Anda hanya perlu 4096 poin FFT untuk mencapai 1 hz sampah dan masih dapat menyelesaikan Sinyal 2khz. Ini mengurangi ukuran bin FFT, tetapi juga mengurangi bandwidth sinyal.

Akhirnya dengan FFT akan selalu ada trade off antara resolusi frekuensi dan resolusi waktu. Anda harus melakukan sedikit tindakan penyeimbang untuk mencapai semua sasaran.

Menandai
sumber
dengan tag tajuk dan beberapa pemformatan pos ini dapat berubah dari bagus menjadi hebat. Anda menyentuh semua yang ingin saya catat, dan dengan sangat baik, tetapi cara postingan diformat lebih sedikit orang akan membacanya karena panjangnya adalah penghalang, jika Anda memberikan tajuk dengan setiap bagian dari apa yang Anda diskusikan orang akan melompat ke bit yang berair yang sesuai dengan mereka dan jumlah +1 Anda akan meningkat banyak. Bukan dari saya tentu saja, karena Anda sudah mendapatkannya.
Kortuk
@kurtuk Saya meludahkan yang satu ini dengan tergesa-gesa, saya akan membersihkan format ketika saya punya waktu luang (atau merasa bebas untuk mengeditnya jika Anda mau).
Tandai
1
@kortuk, nama dimulai dengan 'o'. Saya berasumsi Anda telah, saya hanya berbagi pandangan saya, baik untuk Anda jika Anda belum tahu, tetapi lebih untuk masyarakat secara keseluruhan.
Kortuk
1
Perhatikan bahwa Anda tidak harus menghitung FFT. Jika Anda hanya ingin mengetahui beberapa nampan, lebih murah untuk menghitung DFT dari hanya nampan itu, daripada menjalankan FFT yang dioptimalkan yang menghitung semua nampan sekaligus dengan berbagi banyak operasi.
Chris Stratton
Perlu dicatat juga bahwa trade-off domain frekuensi / waktu yang serupa berlaku untuk filter analog dan IIR.
Caleb Reister
10

Resolusi FFT dasar adalah , di mana adalah frekuensi sampling.fsNfs

Kemampuan untuk membedakan dua sinyal dengan jarak sangat dekat sangat bergantung pada amplitudo relatif dan fungsi windowing yang digunakan.

Anda mungkin menemukan bahwa bermain dengan penganalisa sinyal Baudline adalah cara yang baik untuk mengembangkan beberapa intuisi tentang masalah ini - dan tidak, menjalankan beberapa FFT dan merencanakan satu spektrum pada suatu waktu dalam Matlab atau Python / Numpy benar-benar tidak sama.

EDIT: Ada juga trik untuk mengisi input dengan nol dan mengambil FFT yang lebih besar. Ini tidak akan meningkatkan kemampuan diferensiasi Anda tetapi dapat membuat spektrum lebih mudah dibaca. Ini pada dasarnya adalah trik yang mirip dengan antialiasing dalam grafik vektor.

jpc
sumber
Apakah saya satu-satunya yang tidak melihat kode Lateks ditampilkan diformat dengan benar?
stevenvh
@stevenvh Tidak bekerja untuk saya juga.
teras
Bekerja untukku. Lateks hanya 2 tempat.
Kortuk
2
Diperbaiki (sudah beberapa waktu). Pengaya NoScript Firefox diblokir mathjax.org.
stevenvh
3

Perlu dicatat bahwa FFT adalah alternatif untuk menghitung sejumlah pasangan jumlah yang terpisah (k = 0..sample_length-1) dari Sampel [k] * SineRefWave [j] [k] dan Sampel [j] * CosRefWave [j ] [k], untuk semua j hingga setengah panjang sampel. Jika seseorang membutuhkan pembacaan amplitudo pada semua frekuensi tersebut, FFT akan menghitung semuanya dalam waktu O (NlgN), sedangkan menghitungnya secara individual akan membutuhkan waktu O (N ^ 2). Di sisi lain, jika seseorang hanya membutuhkan pembacaan amplitudo pada beberapa frekuensi, ia akan sering lebih baik hanya menghitungnya secara individual, terutama jika seseorang menggunakan prosesor atau DSP yang efisien dapat menghitung gaya penjumlahan tersebut.

Perlu juga dicatat bahwa sementara FFT dengan misalnya jendela pengambilan sampel 20ms tidak akan dapat membedakan antara nada 1975Hz tunggal, atau kombinasi frekuensi (1975-N) Hz dan (1975 + N) Hz untuk N <25, itu dapat digunakan untuk mengukur frekuensi terisolasi dengan akurasi lebih baik daripada jendela pengambilan sampel jika tidak ada konten spektral lain di dekatnya. Satu-satunya frekuensi 1975Hz akan meningkat secara merata pada nampan tahun 1950Hz dan 2000Hz, seperti kombinasi nada 1974Hz dan 1976Hz. Namun, nada 1974Hz yang terisolasi akan mengambil lebih kuat di nampan 1950Hz daripada di nampan 2000Hz, dan nada 1976Hz akan mengambil lebih kuat di nampan 2000Hz.

supercat
sumber
1

Resolusi frekuensi tidak tergantung pada panjang FFT, tetapi panjang total waktu pengambilan sampel T, yaitu 1 / T, yang juga merupakan komponen frekuensi terendah yang Anda peroleh.

Catatan, zero padding tidak meningkatkan resolusi frekuensi; DFT dari sinyal padding nol hanyalah perkiraan yang lebih baik dari DTFT dari sinyal asli.

chaohuang
sumber
0

Jika Anda mengetahui kisaran frekuensi input yang mungkin, dan kisarannya sempit, Anda dapat menerapkan undersampling untuk mengurangi jumlah sampel dan waktu untuk menghitung FFT. Dengan 256 sampel dan frekuensi sampel 256 Hz, Anda mendapatkan resolusi 1-Hz yang diinginkan dan bandwidth bebas alias 128 Hz.

Rainald62
sumber
-3

lihat gambar ini. itu sudah jelas. hubungan antara fs dan resolusi fft

masukkan deskripsi gambar di sini

hamid
sumber
5
Tidak sepenuhnya jelas dari gambar ini apa yang terjadi. (Itu tidak membantu bahwa gambar itu tidak dalam bahasa Inggris.) Apa yang ditambahkan dengan jawaban lain yang tidak disebutkan?
Greg d'Eon