Deteksi nada piano

8

Saya sedang mengerjakan program penyetelan piano dan sebagian darinya membutuhkan deteksi nada waktu-nyata. Berikut adalah skema yang saya miliki sejauh ini yang bekerja sampai batas tertentu tetapi mungkin bisa menggunakan beberapa penyempurnaan.

Saya merekam audio PCM mono, 44.1kHz, 16-bit dalam potongan 2 ^ 14 sampel. Saya menggabungkan 4 sampel terakhir ke dalam buffer 2 ^ 16 panjang, menerapkan jendela Hann ke buffer dan menjalankan FFT di atasnya. Lalu, saya menimbun hasil FFT dalam dua resolusi. Pertama, saya menimbun menjadi 200 ember dan kemudian menjalankan algoritma deteksi pitch HPS di rincian ini. Saya tidak perlu mendapatkan frekuensi yang tepat di sini, saya hanya ingin dekat. Lalu, saya menautkan ke 12000 bucket yang memberi saya resolusi 1 sen dari 10Hz ke 10kHz. Setelah saya tahu perkiraan frekuensi dari algoritma HPS 200 bin, saya mencari rentang case 12000 bin untuk mencari puncak untuk mendapatkan frekuensi yang lebih tepat.

Ini sepertinya berfungsi baik untuk not di tengah keyboard. Apa yang terjadi dengan not rendah adalah sekitar 1,5 detik identifikasi salah not sebagai biasanya parsial ke-2 atau ke-3 dari not asli dan kemudian identifikasi yang benar dari not tersebut.

Di semua plot spektral yang saya buat untuk melihat apa yang terjadi, ada lebih banyak lebar ke puncak yang saya harapkan. Lebar ini secara visual agak konsisten dari 200 nampan hingga 12000 nampan. Saya akan mengharapkan puncaknya menjadi lebih sempit dalam case 200 bin.

Jadi, pemrosesan sinyal adalah hal baru bagi saya sehingga mungkin ada hal-hal yang merupakan masalah yang saya tidak akan pikirkan untuk ditanyakan tetapi dalam hal pertanyaan spesifik, apakah ukuran sampel cukup untuk tugas ini? Apakah Hann pilihan jendela yang tepat? Haruskah saya memuluskan data juga sebelum FFT? Seberapa sensitifkah HPS terhadap jumlah sampah? Saya berpikir bahwa jika saya menggunakan banyak sampah maka ketidakharmonisan mungkin tidak membuat sebagian tumpang tindih dengan fundamental mereka dengan pendekatan sederhana algoritma HPS untuk membagi dengan 2, 3, 4, dll.

DrTodd13
sumber
Apakah transformasi konstanta-Q dapat digunakan untuk aplikasi ini? wellesley.edu/Physics/brown/pubs/cq1stPaper.pdf
Atul Ingle
Hanya ingin tahu: apa jenis perangkat keras yang Anda gunakan untuk asupan sinyal, mikrofon biasa?
amfibi
Saya menggunakan mikrofon Samson CO1U.
DrTodd13

Jawaban:

6

Mirip dengan utas ini:

Apakah ada algoritma untuk mencari frekuensi tanpa DFT atau FFT?

FFT bukanlah cara efisien untuk membangun tuner. Metode yang lebih baik (dan lebih murah) termasuk korelasi-otomatis, loop terkunci bertahap dan loop loop tertunda, dll.

Salah satu contoh adalah dengan menggunakan pelacakan maxima dan minima lokal untuk mengasah sekitar pada frekuensi dasar dan kemudian menggunakan osilator lokal dan loop terkunci fase untuk melacak frekuensi ini dengan tepat. Ini dapat melacak fundamental bergerak selama penyetelan dengan cepat, terus-menerus, dan dengan akurasi tinggi bahkan jika frekuensinya rendah dan jika fundamentalnya lemah.

Hilmar
sumber
Yah, saya menggunakan FFT di tempat lain dalam program ini untuk pengukuran ketidakharmonisan dan perhitungan pencocokan sebagian. Jadi, itu paling mudah bagi saya untuk menggunakannya kembali untuk tujuan ini juga. Saya tidak terlalu peduli dengan murah tetapi jika loop terkunci lebih baik saya akan memeriksanya. Mengingat bahwa ini bukan bidang keahlian saya, menerapkan beberapa hal ini tampaknya tidak dapat ditembus.
DrTodd13
2

Pencarian untuk 'perangkat lunak penyetelan piano' atau item serupa akan menghasilkan banyak hit - beberapa bagus, beberapa tidak begitu baik.

Setiap jenis alat musik memiliki karakteristik akustik / fisik / lingkungan yang unik yang memengaruhi suaranya. Dan itu bisa menjadi rumit, seperti yang disarankan oleh ribuan buku dan penelitian (misalnya: nada suara, karakteristik serangan / peluruhan, inharmonisitas, dll.).

Deteksi pitch sendiri merupakan bidang yang luas jangkauannya. Berikut ini hanyalah sebagian kecil dari apa yang tersedia: ikhtisar artikel 1 dan tumpukan pos pertukaran dan ikhtisar artikel 2

Adapun pertanyaan spesifik Anda: 1) ukuran sampel Anda tampak seperti berlebihan - tergantung pada SNR dan stabilitas bentuk gelombang, Anda bisa mendapatkan akurasi frekuensi tinggi menggunakan metode lain menggunakan lebih sedikit siklus. (beberapa metode berbasis FFT). Dan Anda mungkin menangkap serangan / pembusukan dengan waktu sampel yang panjang, 2) jendela apa pun selain persegi panjang akan memperluas lebar balok di domain frekuensi, tetapi itu tidak berarti Anda tidak boleh menggunakannya - Hann tampaknya sama dengan HPS , dari apa yang saya lihat, 3) seperti disebutkan dalam tautan pertama di atas, HPS tidak berfungsi dengan baik pada frekuensi rendah, dan ketidakarmonisan akan memengaruhi Anda pada string yang lebih rendah. Adapun metode keseluruhan Anda, tanpa harus menulis banyak halaman, saya hanya bisa mengatakan bahwa saya akan melakukannya secara berbeda, tergantung pada rentang frekuensi dan harmonik yang saya hadapi.

Kevin McGee
sumber
Beberapa varian cepstrum terlihat menarik untuk dicoba, jadi saya akan mulai dengan itu. Mungkin saya harus membuang bagian sampel yang sesuai dengan "serangan" / serangan palu. Adakah yang tahu berapa lama waktu yang dibutuhkan untuk mencapai kondisi agak stabil atau ada cara untuk mengkarakterisasi kondisi awal sehingga saya dapat memfilternya?
DrTodd13
Info ada di luar sana, tetapi mungkin sulit untuk menemukan - lihat, misalnya, di utas ini dari forum 'dunia piano' di 'serangan'karakteristik: pianoworld.com/forum/ubbthreads.php/topics/1125286/What% 20 adalah
Kevin McGee
2

Jawaban lain menyarankan PLL. Saya pikir Anda harus menjauh dari PLL: kebanyakan literatur tentang pelacakan pitch berfokus pada korelasi-otomatis (mencari "YIN Pitch Tracking" - YIN adalah algoritma pelacakan pitch modern berdasarkan korelasi-otomatis) dan FFT. Saya percaya PLL lebih cocok untuk melacak fluktuasi kecil dalam frekuensi, seperti dengan radio.

Korelasi otomatis adalah tempat yang baik untuk memulai. Cepat, efisien, dan akurat. Namun, ada trik untuk membuat FFT sangat akurat dan cepat (sebagian besar teknik yang menggunakan FFT hanya melihat besarnya, tetapi Anda juga dapat menggunakan informasi fase), jadi jika Anda terbiasa dengan FFT Anda dapat menggunakan teknik itu juga.

Jika Anda menggunakan salah satu dari teknik ini, saya sarankan prefiltering dengan lowpass untuk mengurangi harmonik dan fokus pada yang mendasar. Dengan FFT, Anda bisa, sebaliknya, atau sebagai tambahan, menggunakan trik seperti melihat maksimum lokal pertama.

Ini mungkin merupakan titik awal yang baik untuk memfilter dan sebagainya. Ini juga akan memberi Anda beberapa tips tentang menghindari melakukan terlalu banyak pekerjaan, dan tautan ke kode sumber: http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html

Buku ini memiliki bagian yang menjelaskan YIN dan FFT menggunakan informasi fase: http://www.amazon.com/DAFX-Digital-Udo-ouml-lzer/dp/0470665998

Akhirnya, Anda harus memahami spesifikasi piano. Saya tidak yakin apakah tuner itu sendiri perlu melakukan sesuatu WRT khusus, misalnya, tala panjang, atau jika itu diserahkan kepada orang yang menyetel piano, tetapi Anda setidaknya harus memahami hal-hal itu. Poster lain menyarankan melihat harmonik yang tidak selaras, tetapi masalah utamanya adalah mengidentifikasi dan menyelaraskan fundamental, sehingga harmonik yang tidak selaras seharusnya tidak menjadi masalah selama Anda mengidentifikasi fundamental dengan tepat.

Bjorn Roche
sumber
Informasi yang bagus, terima kasih! Yang membuat saya tertarik adalah sebuah makalah yang disebut "Tuning Alat Musik berbasis Entropy." Ia menggunakan ukuran entropi untuk menghitung tuning untuk piano yang diberikan berdasarkan ketidakharmonisan khusus piano. Saya mencoba menduplikasi hasil dari kertas dan kemudian pergi dari sana. Sekali / jika itu berhasil saya dapat menggunakan apa posting ini akan menyetel piano ke tala dihitung. Ketika Anda berbicara tentang menggunakan fase FFT, apakah itu output yang biasanya dibuang yang bisa saya gunakan atau sesuatu yang internal? Saya menggunakan paket FFT orang lain.
DrTodd13
Saya tidak akrab dengan teknik-teknik itu (kedengarannya menarik). Saya akan mulai dengan teknik standar sebelum pindah ke domain itu. Meskipun saya akan memilih teknik standar yang paling mirip dengan teknik canggih yang ingin Anda tiru.
Bjorn Roche
Output FFT biasanya dalam bagian nyata dan imajiner. Anda dapat menerjemahkan ini menjadi magnitudo dan fase dengan cara biasa (real + imajiner dan mag & fase keduanya merupakan representasi valid dari bilangan kompleks). Cara menggunakan ini untuk pelacakan pitch sangat halus - Anda harus membaca buku DAFX untuk deets.
Bjorn Roche
2

Puncak lebar yang Anda lihat mungkin merupakan hasil dari fenomena fisik, bukan artefak pemrosesan sinyal. Secara umum, puncak sempit dalam hasil FFT mewakili sinusoid yang tidak dimodifikasi persis periodik di jendela dalam domain waktu. Tapi getaran senar piano tidak stasioner itu. Mereka berkembang dari waktu ke waktu, menciptakan modulasi yang nyata.

Beberapa efek: beberapa string piano per not akan bertukar energi melalui papan suara; energi getaran total akan membusuk seiring waktu; mode getaran mungkin sedikit tidak harmonis untuk memulai; frekuensi getaran yang tepat dari masing-masing mode (harmonik) dapat berubah dengan peluruhan dalam amplitudo karena kekakuan dan diameter tali bukan-nol; dan setiap harmonik dapat meluruh pada tingkat yang berbeda, dll.

Anda mungkin harus memutuskan mana dari beberapa modulasi ini yang ingin Anda sebut "pitch" (buku tentang audiologi dapat membantu), dan menemukan metode untuk melacaknya dengan lebih baik di dalam "puncak lebar" FFT.

hotpaw2
sumber
1

Dengan nada piano yang lebih rendah, terutama untuk uprights, spektrum cenderung memanjang (jarak antara nada dasar dan nada pertama sedikit lebih dari satu oktaf, dll). Inilah yang memberi piano suara perkusi mereka, nada terendah pada uprights yang lebih tua sering terdengar lebih seperti gedebuk daripada not, dan seperti yang saya pahami inilah sebabnya ciak uprights memiliki suara honk tonk perkusi khusus mereka. Karena piano tuner yang baik ini (orang-orang yang bukan algoritma) akan menyetel piano dengan nada rendah daripada nada dasar untuk nada rendah, telinga manusia cenderung fokus pada interaksi nada rendah untuk nada ini. Peregangan seri harmonik juga bisa menjadi penyebab puncak spektrum yang lebih luas dari yang diharapkan.

Nathan Day
sumber
Nah, ketidakarmonisan tidak sama dengan variabilitas. Ketidakarmonisan akan menyebabkan puncak berada pada titik yang berbeda, tetapi saya tidak mengerti mengapa hal itu akan membuat puncaknya lebih luas. Mungkin lebar puncak adalah karena varians sinyal yang melekat dari waktu ke waktu sehingga memperpendek periode sampel akan mengurangi varians?
DrTodd13