Transformasi Fourier diskrit - menemukan dasar dengan cepat?

9

Pertama, saya minta maaf karena saya seorang pengembang perangkat lunak dan sudah lama sekali saya tidak terjun ke matematika murni, jadi pertanyaan saya mungkin tampak bodoh. Saya harap tidak.

Konteksnya adalah pengenalan nada dalam musik.

Jika Anda mengambil not musik, dan menerapkan transformasi Fourier untuk itu, Anda akan memiliki dan jumlah amplitudo tak terbatas untuk frekuensi yang diberikan. Sebagai contoh, jika saya bermain catatan yang mendasar adalah , pada instrumen, setelah Fourier transform, saya akan memiliki harmonik di di F , 2 F , 3 F , ... , n F . Setiap frekuensi akan memiliki amplitudo yang diberikan yang menentukan timbre instrumen (piano, suara, trompet, ... semua mengikuti hukum ini, tetapi Anda akan memiliki amplitudo yang berbeda untuk setiap harmonik)FF,2F,3F,,nF

Sekarang apa yang saya ingin lakukan adalah dari sinyal audio yang diberikan, menemukan . Hanya itu saja. Ini lebih rumit daripada yang tampaknya karena Anda akan selalu memiliki kebisingan latar belakang dan seterusnya ... Lebih jauh lagi, F tidak perlu frekuensi dengan amplitudo tertinggi!FF

Jadi ide saya untuk menemukan adalah untuk menerapkan DFT (yah sebenarnya FFT untuk kecepatan) dan menemukan frenquency F , sehingga F + 2 F + 3 F + ... + n F adalah maksimal dalam output FFT.FFF+2F+3F++nF

Apakah Anda pikir itu mungkin? Apakah Anda pikir itu mungkin dalam waktu yang sangat singkat (katakanlah <5 milidetik)?

Dinaiz
sumber
Mungkin ini bisa menjadi jawaban: edaboard.com/thread197897.html
Ya, tapi itu metode yang berbeda bukan? IMHO, ini lebih mudah tetapi jauh lebih tidak dapat diandalkan karena tidak dapat membedakan antara suara harmonik dan tidak harmonis ...
Dinaiz

Jawaban:

6

Apa yang Anda gambarkan sangat mirip dengan metode estimasi pitch Harmonic Product Spectrum, seperti yang tercantum dalam makalah Stanford CCRMA ini .

FFT tidak memberi Anda "jumlah amplitudo yang tak terbatas", tetapi sejumlah terbatas dari nampan hasil tergantung pada panjang FFT.

5 mS hanya 1 periode catatan 200 Hz, dan hanya sebagian kecil dari periode di bawah 200 Hz. Pengenalan nada musik biasanya membutuhkan pendengaran atau analisis beberapa periode dari periodisitas suara bernada. Dan banyak musik menggunakan catatan di bawah G2. Jika Anda memiliki data yang cukup panjang, menghitung estimasi pitch dari data itu mungkin hanya akan mengambil urutan mikrodetik daripada milidetik pada PC modern atau perangkat seluler.

hotpaw2
sumber
Poin yang bagus. Namun jika Anda sudah memiliki 2F dan 3F, Anda tidak benar-benar membutuhkan F, bukan? Dalam contoh Anda, 2F = 400hz dan 3F = 600hz, jadi Anda mungkin dapat mengetahui bahwa F adalah 200 bahkan tanpa mendengar suara yang cukup untuk memiliki periode 5 ms, bukan? Saya juga mendengar tentang transformasi wavelet. Apakah Anda pikir ini metode yang lebih baik untuk melakukan ini?
Dinaiz
@Dinaiz: Tergantung pada sumber suara bernada, dan apakah fragmen frekuensi nada itu sebenarnya diam atau tidak. Wavelet adalah pertanyaan yang sepenuhnya terpisah.
hotpaw2
Jadi metode ini tidak cocok untuk menemukan f0 dalam "hampir waktu nyata". Dalam keadaan seni saat ini, mungkinkah menemukan f0, dalam waktu kurang dari beberapa milidetik, dengan instrumen apa pun, atau apakah itu penyebab yang hilang dan saya harus menyerah dalam pencarian saya? : D
Dinaiz