Saya mencoba membuat program deteksi pitch yang mengekstraksi frekuensi puncak dalam spektrum daya yang diperoleh dari FFT ( fftpack
). Saya mengekstraksi frekuensi puncak dari spektrum saya menggunakan Penaksir Pertama Quinn untuk menginterpolasi antara nomor bin. Skema ini tampaknya bekerja dengan baik dalam kondisi tertentu. Misalnya, menggunakan fungsi jendela persegi panjang dengan ukuran jendela 1024 dan laju sampel 16000, algoritma saya dengan benar mengidentifikasi frekuensi nada A440 murnisebagai 440,06 dengan frekuensi parsial kedua 880,1. Namun, dalam kondisi lain, itu menghasilkan hasil yang tidak akurat. Jika saya mengubah laju sampel (misalnya menjadi 8000) atau ukuran jendela (misalnya menjadi 2048), ia masih mengidentifikasi dengan benar parsial pertama sebagai 440, tetapi parsial kedua ada di sekitar 892. Masalahnya menjadi lebih buruk untuk nada inharmonik seperti yang diproduksi oleh gitar atau piano.
Pertanyaan umum saya adalah: Dengan cara apa laju sampel, ukuran jendela, dan fungsi jendela memengaruhi estimasi frekuensi puncak FFT? Asumsi saya adalah bahwa hanya meningkatkan resolusi spektrum akan meningkatkan akurasi estimasi frekuensi puncak, tetapi ini jelas bukan pengalaman saya (zero padding juga tidak membantu). Saya juga berasumsi bahwa pilihan fungsi jendela tidak akan banyak berpengaruh karena kebocoran spektral seharusnya tidak mengubah lokasi puncak (meskipun, sekarang saya berpikir tentang hal itu, kebocoran spektral berpotensi mempengaruhi perkiraan frekuensi yang diinterpolasi jika besarnya tempat sampah yang berdekatan dengan puncak secara artifisial ditingkatkan oleh kebocoran dari puncak lainnya ...).
Adakah pikiran?