Seperti yang saya komentari pada posting sebelumnya, metode analisis frekuensi waktu yang dikenal sebagai "transformasi Fourier jangka pendek" setara dengan bank filter, menganalisis sinyal Anda x . Untuk jendela analisis diberikan w n , ukuran N , filter pada frekuensi k / N adalah:
h n = w - n e j 2 π n kXxwnNk / N
hn= w- nej 2 πn kN
Untuk analisis biasa jendela (Hann, Hamming, atau bahkan persegi panjang), ini sesuai dengan low-pass filter, dengan frekuensi cut-off sekitar , yang "bergeser" ke frekuensi bin k1 / Nk (berkat modulasi eksponensial kompleks) , oleh karena itu mengarah ke filter band-pass.
fkfk + 1= 21 / 12fk21 / 12- 12fk
Anda dapat menemukan implementasi CQT di sana-sini, yang baru-baru ini oleh Prof. Klapuri, datang dengan invers yang lumayan dapat ditemukan di sini . Grup Audio di Telecom ParisTech juga memiliki implementasi oleh Prof. Prado, tetapi saya belum mencobanya.
[Brown91] J. Brown, "Perhitungan Transformasi Spektrum Q Konstan", Jurnal Masyarakat Akustik Amerika, 1991, 89, 425-434
EDIT 20121014: beberapa jawaban dan komentar untuk pertanyaan (bryhoyt) Anda.
Hanya ide-ide umum pada komentar Anda sendiri untuk pertanyaan utama: Anda tampaknya tertarik pada banyak aplikasi yang, bagi saya, bukan masalah sepele untuk ditangani. "Pemodelan Timbre" bagi saya lebih terkait dengan pengenalan suara atau sejenisnya, yang nada atau resolusi frekuensi atau ketepatannya tidak terlalu menjadi masalah (pertimbangkan bagaimana MFCC biasanya dihitung).
Pertimbangkan juga berapa banyak peneliti top ( F. Pachet dan tim repmus di IRCAM, Prancis , untuk mengutip beberapa) bekerja pada topik improvisasi dan pendampingan otomatis: tugas itu tidak mustahil, tetapi membutuhkan keahlian di banyak bidang. Untuk meringkas, sistem yang khas perlu meniru sistem pendengaran manusia (setidaknya), menerapkan persepsi suara / musik / nada / ritme, tahu tentang teori musik dan mengambil keputusan berdasarkan estimasi semua langkah sebelumnya. Transformasi Fourier, atau representasi sinyal apa pun, hanyalah satu (kecil) langkah menuju tujuan akhir - dan, menurut pendapat saya, berpotensi paling baik dipahami sejauh ini.
Yang mengatakan, masih ada kemungkinan bahwa semua orang melihat jauh melampaui apa yang sebenarnya terjadi, dan bahwa Anda dapat mengatasinya dalam solusi yang sederhana dan elegan! Jangan lupa untuk mempublikasikannya setelah selesai! :-)
sampel 0,1s pada 44kHz sudah cukup untuk memuat berbagai frekuensi
Fs/ N= 44100 / 4410 = 10 Hz
FFT tidak dapat mendeteksi ini untuk frekuensi rendah dan tinggi, tetapi Anda mengatakan algoritma lain dapat: apa untungnya?
Jawaban singkat: baca tesis saya tentang estimasi melodi!
Untuk menguraikan lebih banyak: banyak algoritma estimasi pitch melampaui batasan FT, berkat asumsi pada suara untuk diproses. Kami berharap nada dari suara alami (suara manusia, oboe, saksofon, piano ...) lebih kompleks daripada sinusoid tunggal. Sebagian besar suara bernada lebih atau kurang harmonis, yang berarti bahwa mereka dapat dimodelkan sebagai jumlah sinusoid yang frekuensinya merupakan kelipatan dari frekuensi dasar.
Oleh karena itu berguna untuk memperhitungkan harmonik ini ketika memperkirakan pitch, dengan metode yang menggunakan fungsi deteksi seperti jumlah spektral, produk spektral atau fungsi auto-korelasi ada. Seseorang memulai topik terkait baru-baru ini.
Apa pengorbanannya? Lebih khusus lagi, tingkat akurasi frekuensi apa yang dapat saya harapkan untuk jendela yang cukup pendek? (Saya mengerti ukuran jendela dalam CQT adalah variabel - seberapa banyak?) Bahkan lebih khusus lagi, seberapa dekat saya bisa mendapatkan kira-kira. Tujuan dari perbedaan frekuensi 0,5% dengan jendela 0,005?
Seperti yang dikatakan sebelumnya, dengan jendela 0,005, Anda dapat mengharapkan sekitar 200Hz "kebocoran frekuensi". Itu benar-benar masalah hanya ketika Anda memiliki 2 sinusoid dengan frekuensi yang lebih dekat dari 200Hz, sehingga FT tidak akan dapat menunjukkan bahwa mereka adalah 2 sinusoid yang berbeda. Yah, kami jauh dari 0,5% Anda (ngomong-ngomong, semitone berada di 6% dari frekuensi!) Dan 0,005s benar-benar agak kecil untuk tujuan Anda. Namun, jika Anda ingin memberikan perkiraan setiap 0,005, Anda masih dapat memproses frame yang tumpang tindih lebih lama, seperti yang biasanya dilakukan dalam pemrosesan suara / musik. Itukah yang sebenarnya Anda inginkan?
Nk= Fsfk( 21 / B- 1 )
BB = 48fk= 100 Hzmembutuhkan sekitar 0,7 jendela panjang. Bukan apa-apa untuk mengatakan bahwa kita kemudian kehilangan sedikit resolusi temporal ... Tetapi seperti yang disebutkan sebelumnya, ini hanya masalah jika kita melupakan struktur bunyi. Selain itu, psychoacoustics menganggap bahwa di bawah 500Hz, manusia tidak benar-benar membedakan sinusoid dengan baik: bahkan manusia ditantang di sana. Tentu saja, kita dapat berharap komputer kita dapat melakukan lebih baik daripada kita, tetapi di sini, kita menghadapi masalah yang sulit!
Akhirnya, perhatikan bahwa ada cara lain untuk menghitung representasi frekuensi waktu dari suara, pertimbangkan misalnya bank filter gammatone. Keuntungan dari CQT yang saya sebutkan sebelumnya adalah bahwa ada perangkat lunak untuk transformasi dan pembalikannya. Secara pribadi, saya masih tetap menggunakan STFT, karena kesederhanaannya dan karena, sejauh ini, saya tidak pernah membutuhkan resolusi yang lebih baik dalam frekuensi rendah, bahkan untuk pemisahan sumber.
[Schoerkhuber2010] Schoerkhuber, C. dan Klapuri, A., "Constant-Q transform toolbox untuk pemrosesan musik,", Konferensi Suara dan Musik ke-7, Barcelona, Spanyol, 2010.