Apakah ada algoritma untuk mencari frekuensi tanpa DFT atau FFT?


34

Saya mencari di toko aplikasi Android untuk tuner gitar. Saya menemukan aplikasi tuner yang mengklaim lebih cepat daripada aplikasi lain. Ia mengklaim dapat menemukan frekuensi tanpa menggunakan DFT (saya berharap saya masih memiliki URL untuk spesifikasi ini).

Saya belum pernah mendengar ini. Bisakah Anda mendapatkan sinyal audio dan menghitung frekuensi tanpa menggunakan algoritma DFT atau FFT?

Jawaban:


29

FFT sebenarnya bukan cara yang bagus untuk membuat tuner. FFT secara inheren memiliki resolusi frekuensi yang terbatas dan tidak mudah untuk mendeteksi perubahan frekuensi yang sangat kecil tanpa membuat jendela waktu sangat lama yang membuatnya sulit dan lambat.

Solusi yang lebih baik dapat didasarkan pada loop-fase-terkunci , loop -terkunci-loop , korelasi otomatis, deteksi dan pelacakan zero crossing, deteksi dan pelacakan max atau min dan tentu saja kombinasi cerdas dari metode ini.

Pra-pemrosesan selalu membantu.


5
Apakah FFT dapat mendeteksi perubahan frekuensi kecil tidak melekat dalam panjangnya, tetapi tergantung pada rasio signal-to-noise. Dengan noise dan interferensi yang cukup rendah, interpolasi hasil FFT dapat dengan mudah menghasilkan resolusi frekuensi tunggal sub-bin.
hotpaw2


12

FFT melaporkan puncak atau puncak frekuensi spektrum (dikuantisasi oleh ukuran bin FFT), yang berbeda dari nada musik. Frekuensi pitch yang dirasakan mungkin benar-benar hilang dari spektrum FFT.

Beberapa tuner gitar paling sederhana hanya menggunakan penyaringan low-pass atau band-pass dan mengukur waktu antara zero-crossing. Kebalikan memberikan estimasi frekuensi.

Autokorelasi adalah metode estimasi pitch umum lainnya; dan korelasi geser atau ukuran kemiripan diri lainnya memiliki banyak variasi, seperti geser ASDF (perbedaan kuadrat), AMDF (perbedaan rata-rata), pencocokan pola non-linier, pemeriksaan adaptif hanya untuk rentang jeda terbatas, interpolasi jeda, jendela dan pemilihan jendela adaptif, berbagai pembobotan, atau menggunakan teori keputusan untuk memilih di antara beberapa sekuens riwayat lag potensial, dan lain-lain. Salah satu masalah dengan sebagian besar ukuran kemiripan diri adalah memilih oktaf yang tepat, karena sub-oktaf dapat menunjukkan kemiripan yang hampir sama.

Kemungkinan lain termasuk menggunakan PLL, demodulator quadrature yang difilter, transformasi Hilbert yang difilter, dan lain-lain.

Tetapi perhatikan bahwa beberapa metode penyaringan dan demodulasi DSP secara komputasi hampir setara dengan melakukan 1-bin dari DFT berjendela, yang mungkin cocok atau tidak cocok sebagai jawaban untuk pertanyaan Anda.


8

Pendeteksian pitch dapat dilakukan dalam banyak cara yang serba guna dan penuh rasa ingin tahu. Salah satu cara untuk melakukannya adalah dengan menggunakan autocorrelation . Makalah ini memberikan contoh bagaimana dapat digunakan. Autokorelasi dapat dibuat sangat sederhana dengan menggunakan korelator 1-bit (tidak dapat menemukan makalah yang layak tentang itu karena beberapa alasan). Jadi secara teoritis, nada dapat dideteksi lebih cepat daripada dengan FFT, tetapi saya ragu bahwa itu akan jauh lebih tepat tanpa pra-pemrosesan yang benar - benar pintar.


Saya pikir tautannya rusak? ...
Spacey

Tidak, semua berhasil. Saya baru saja memeriksanya.
Phonon

7

Juga lihat Hilbert-Huang Transform (HHT) yang didefinisikan secara algoritmik dan relatif baru . Ini dapat menangani sinyal non-stasioner-non-linear yang mungkin relevan untuk aplikasi Anda.


Ini adalah permata ketika saya menemukannya, meskipun tidak memberi Anda dekomposisi empat, tetapi lebih tepatnya, dekomposisi frekuensi sesaat .
Spacey

Kebanyakan sinyal kehidupan nyata agak non-stasioner, yaitu mereka sedikit berbeda dalam amplitudo dan frekuensi. HHT kurang peka terhadap variasi-variasi ini dan karenanya menguraikan sinyal-sinyal semacam itu dengan cara yang lebih alami, di mana bagian-bagiannya lebih erat terkait dengan fenomena fisik yang mendasarinya.
Nordlöw



2

Anda benar-benar dapat menghitung frekuensi sinyal menggunakan pseudo-spectrum, yang melihat vektor eigen dari matriks autokorelasi. Ini pada dasarnya menguraikan sinyal Anda menjadi subruang kebisingan dan sinyal. Dari sana, Anda dapat menemukan spektrumnya. (Anda juga dapat membatasi dan memberikan rentang frekuensi untuk diperiksa). Ini juga noise yang cukup kebal. Tentu saja, ini adalah metode parametrik, bukan metode unparametrik seperti DFT.



1
@endolith Anda dapat menghitungnya tanpa melibatkan FFT. Dari matriks korelasi, Anda mendapatkan vektor eigen, dan kemudian subruang noise. Kemudian Anda dapat membuat vektor frekuensi Anda sendiri untuk diproyeksikan, jadi tidak ada FFT yang digunakan.
Spacey

1

Itu semua tergantung pada platform apa yang Anda ingin memprosesnya, jika Anda memerlukan rangkaian sederhana, saya sarankan peledakan sinyal dengan gain dan mengubahnya menjadi gelombang persegi dan mengukur periode dengan mikrokontroler menggunakan timer.

Tetapi jika Anda ingin menyukai pemrosesan sinyal, lihat metode MUSIC:

http://en.wikipedia.org/wiki/Multiple_signal_classification

Semoga ini bisa membantu


0

Ada banyak metode estimasi pitch tanpa menggunakan DFT / FFT, beberapa dari mereka termasuk metode MUSIC tercantum dalam makalah ini: https://ieeexplore.ieee.org/abstract/document/6521410/ Hasil simulasi dalam makalah ini menunjukkan bahwa ketika frekuensi dasar sangat rendah, metode NLS yang tepat mengungguli yang lain di antara yang terdaftar.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.