Saya ingin mengonversi sinyal ke domain frekuensi. Rentang frekuensi yang diinginkan adalah 0.1 Hz
untuk 1 Hz
dan resolusi frekuensi 0.01 Hz
.
Dengan laju pengambilan sampel sebesar 30 Hz
, FFT memberikan komponen frekuensi hingga 15 Hz. Meningkatkan laju pengambilan sampel memberikan resolusi frekuensi yang lebih baik. Namun, FFT memberikan rentang frekuensi yang lebih luas. Dalam kasus saya, saya hanya ingin 0.1 Hz
untuk 1 Hz
, FFT memberikan hingga 15 Hz
(Ekstra perhitungan).
Pertanyaan saya adalah, adakah cara standar yang dapat saya lakukan untuk menghitung domain frekuensi dari sinyal dengan rentang frekuensi tertentu dan resolusi tinggi?
Jawaban:
Saya pikir solusi terbaik untuk masalah Anda adalah dengan menggunakan kicauan-DFT. Ini seperti kaca pembesar untuk rentang frekuensi tertentu. Ini lebih efisien daripada implementasi langsung DFT (tanpa FFT), karena algoritma FFT dapat digunakan dengan beberapa pra-dan pasca-pemrosesan yang sesuai. Anda pada dasarnya perlu memodulasi sinyal Anda dengan sinyal kicauan, kemudian memfilter menggunakan FFT, dan kemudian lagi kicauan-memodulasi sinyal Anda untuk mendapatkan respons frekuensi yang diinginkan. Lihat di sini dan di sini untuk perincian tentang bagaimana menerapkan kicauan-DFT.
sumber
Ada juga kemungkinan menggunakan frekuensi warping (juga berfungsi sebagai kaca pembesar di mana Anda mendapatkan resolusi yang ditingkatkan dalam rentang minat freqency Anda untuk FFT ukuran yang sama dengan mengorbankan resolusi yang lebih rendah pada frekuensi yang lebih tinggi). Namun, Anda tidak menyimpan MIPS karena ukuran FFT tidak berkurang dan frekuensi warping jauh dari murah.
Jika Anda hanya ingin menghitung tempat sampah tertentu di FFT (dan dengan demikian menghemat MIPS) ada beberapa metode untuk melakukannya. Misalnya sliding DFT. Referensi dalam makalah ini memberikan penjelasan yang sangat bagus http://www.comm.utoronto.ca/~dimitris/ece431/slidingdft.pdf . Saya juga berpikir goertzel algo melakukan sesuatu yang serupa tetapi saya tidak mengetahuinya.
Lalu ada opsi downsampling sebelum FFT. Itu mungkin juga akan menghemat beberapa MIPS.
Sunting: Hanya untuk mengklarifikasi komentar mengenai algoritma Goertzel tidak berguna. Dengan langsung memasukkan nilai ke dalam ekspresi yang ditemukan di bagian bawah halaman wiki ini http://en.wikipedia.org/wiki/Goertzel_algorithm maka pendekatan Goertzel akan lebih kompleks daripada FFT ketika ukuran FFT yang dibutuhkan lebih besar dari 128 (dengan asumsi ukuran FFT adalah faktor 2 dan implementasi radix-2).
Namun, ada faktor-faktor lain yang harus diperhitungkan yang mendukung Goertzel. Hanya dengan mengutip halaman wiki: "Implementasi FFT dan platform pemrosesan memiliki dampak yang signifikan pada kinerja relatif. Beberapa implementasi FFT [9] melakukan perhitungan bilangan kompleks internal untuk menghasilkan koefisien on-the-fly, secara signifikan meningkatkan" biaya K per unit of work. "Algoritma FFT dan DFT dapat menggunakan tabel nilai koefisien pra-komputasi untuk efisiensi numerik yang lebih baik, tetapi ini membutuhkan lebih banyak akses ke nilai koefisien yang disangga dalam memori eksternal, yang dapat mengarah pada peningkatan pertikaian cache yang melawan beberapa keunggulan numerik . "
"Kedua algoritma mendapatkan sekitar 2 faktor efisiensi saat menggunakan data input bernilai nyata dan bukan kompleks. Namun, keuntungan ini wajar untuk algoritma Goertzel tetapi tidak akan tercapai untuk FFT tanpa menggunakan varian algoritma tertentu yang khusus untuk mentransformasikan real - nilai data. "
sumber
sumber