Saya perlu mendeteksi nada (mengukur frekuensi sinyal) saat para musisi memutar musik, memberikan peringatan jika mereka tidak selaras, tetapi musik kebetulan terlalu cepat untuk FFT (Fast Fourier Transform).
Di bawah ini saya mencoba memberikan deskripsi teknis tentang masalah tersebut.
Musisi memutar musik pada 90-140 bpm. Ini berarti bahwa ada 90-140 kelompok catatan setiap menit, hingga 8 (lebih sering, hingga 4) catatan dalam setiap kelompok (60/140/8 = 0,0536 dtk, 60/90/4 = 0,167 dtk), yang adalah, catatan dapat berubah pada tingkat 6-19 catatan per detik.
Musik menggunakan skala logaritmik (lihat gambar terlampir): rentang antara, katakanlah, 440Hz dan 880Hz dibagi menjadi 12 catatan, hanya 7 yang digunakan untuk melodi. (Pada dasarnya, mereka hanya menggunakan tombol putih pada piano; ketika mereka ingin menggeser frekuensi awal, mereka menggunakan beberapa tombol hitam dan tidak menggunakan beberapa tombol putih.) Artinya, frekuensi setiap nada selanjutnya dikalikan dengan 2 ^ (1/12) = 1.05946.
Untuk membuat segalanya lebih rumit, frekuensi A (La) dapat bervariasi dari 438 hingga 446 Hz. Instrumen dawai secara teori dapat disetel, sedangkan instrumen angin bergantung pada suhu dan kelembaban udara, sehingga frekuensi kebetulan dinegosiasikan kembali oleh para musisi selama pemeriksaan suara.
Kadang-kadang musisi dan vokalis membuat kesalahan dalam frekuensi, mereka menyebutnya "tidak selaras". Mereka menginginkan perangkat yang akan memberitahu mereka tentang "kesalahan tidak selaras". Mereka memiliki tuner, tetapi tuner membutuhkan memainkan suara yang sama selama sekitar 1 detik sebelum mereka mulai menunjukkan apa pun. Ini berfungsi untuk penyetelan, tetapi tidak berfungsi saat musik dimainkan.
Kemungkinan besar, tuner melakukan FFT, dan karena formula menunggu 1 detik untuk mendapatkan resolusi 1Hz.
Untuk A = 440Hz, perbedaan frekuensi antara dua not adalah 440 * 0,05946 = 26,16 Hz, untuk mendapatkan resolusi frekuensi itu, kita harus menggunakan waktu akuisisi 0,038 detik, yaitu, pada tempo = 196bpm FFT hanya dapat membedakan dua Catatan, pada 98 bpm ia mampu mengatakan kesalahan out-of-tune 50% asalkan mulai akuisisi pada saat pitch berubah. Jika kami membiarkan perubahan pitch selama periode akuisisi, kami mendapatkan 49 bpm, yang terlalu lambat. Selain itu, sangat diinginkan untuk lebih tepat tentang frekuensi, katakanlah, mendeteksi kesalahan out-of-tune 25% atau 12%.
Apakah ada cara untuk mengukur frekuensi (deteksi nada) lebih baik daripada FFT, yaitu, dengan resolusi yang lebih baik dalam waktu akuisisi yang lebih sedikit? (Setidaknya 2 kali lebih baik, idealnya, 8-16 kali lebih baik.) Sebagai gantinya, saya tidak perlu membedakan antara not oktaf yang berbeda, misalnya 440 dan 880 dapat dikenali sebagai A. Saya tidak memerlukan linearitas FFT output, skala logaritmik akan lebih baik. (Mungkin, lebih banyak trade-off yang mungkin, hanya tidak ada yang terlintas di pikiran saya saat ini.)
Ini gambar yang sangat bagus: