Saya ingin menggunakan STFT untuk analisis multipitch. Saya menyadari mendeteksi parsial yang ada dalam sinyal hanyalah awal. Masih saya punya masalah dengan itu.
Katakanlah saya memiliki sampel sinyal dengan frekuensi 'CD' 44100Hz
. Dengan jendela 1024
sampel saya mendapatkan resolusi frekuensi bin 22500Hz/512=43Hz
. Ini cukup hanya untuk membedakan nada piano tinggi seperti:
C5 = 523.251Hz
dan C#5 = 554.365
.
Dulu kupikir 1024
jendela itu cukup besar. Tapi mungkin tidak dan biasanya jendela yang lebih besar digunakan untuk mendeteksi parsial?
Dapatkah resolusi frekuensi ditingkatkan dengan metode lain selain meningkatkan ukuran jendela, yang memperburuk resolusi waktu? Saya memikirkan dua metode:
Metode1:
- Membagi sinyal menjadi pita frekuensi dengan bandpassfilters (misalnya
0-11.25Hz
dan11.25-22.5Hz
). - Turunkan band-band yang lebih tinggi sehingga frekuensi tinggi asli sekarang menjadi frekuensi rendah (jadi lakukan untuk band kedua
11.25-22.5Hz -> 0Hz-22.5Hz
) - tidak yakin ini mungkin. - Set tempat sampah yang dihasilkan dengan label yang disesuaikan.
Metode2:
- Gunakan serangkaian filter lowpass dengan batas yang meningkat.
- Lakukan FFT pada peningkatan rentang frekuensi.
- Untuk setiap frekuensi gunakan resolusi sebaik mungkin (nampan dari FFT pertama di mana frekuensi ini dimasukkan).
- Ini akan menyebabkan frekuensi rendah untuk memiliki resolusi yang lebih baik tetapi saya pikir ini ok karena untuk catatan yang lebih tinggi perbedaan frekuensi adalah parutan.
Saya akan berterima kasih atas komentar tentang masalah ini.
Saya juga baca di sini: Bagaimana ukuran jendela, laju sampel memengaruhi estimasi pitch FFT? tentang metode meningkatkan hasil pengambilan puncak. Saya pikir akan mencoba menggunakannya.
Jawaban:
Jika Anda benar-benar bersikeras menggunakan FFT (daripada metode parametrik, yang tidak akan menderita pertukaran waktu / frekuensi), Anda dapat memalsukan resolusi yang jauh lebih baik dengan menggunakan informasi fase untuk memulihkan frekuensi sesaat untuk setiap nampan FFT. Partial kemudian dapat dideteksi dengan mencari plateaus dalam fungsi yang memberikan frekuensi sesaat sebagai fungsi indeks bin FFT. Implementasi umum dari teknik ini seperti yang dijelaskan dalam makalah ini akan "biaya" Anda satu STFT tambahan (frekuensi sesaat dipulihkan oleh operasi pada STFT sinyal, dan STFT turunan dari sinyal).
Lihat misalnya fungsi ifgram dalam implementasi Matlab ini untuk pemodelan sinusoidal dari sinyal audio.
Perhatikan bahwa ini tidak akan membantu menyelesaikan dua parsial yang jatuh ke nampan FFT yang berdekatan. Ini hanya akan memberikan perkiraan frekuensi yang jauh lebih akurat daripada hanya mengkonversi ke frekuensi indeks bin FFT dari puncak spektral.
sumber
Istilah "resolusi" memiliki banyak arti. Secara umum, Anda tidak dapat meningkatkan kemampuan Anda untuk memisahkan (atau "menyelesaikan") puncak spektral jarak dekat dengan interpolasi menggunakan panjang data jendela yang sama. Tetapi Anda dapat memperkirakan frekuensi puncak spektral stasioner terisolasi yang jauh di atas lantai kebisingan dengan resolusi lebih halus (kadang-kadang resolusi jauh lebih halus) daripada jarak FFT bin dengan berbagai metode interpolasi.
Metode interpolasi hasil FFT umum untuk perkiraan resolusi yang lebih tinggi termasuk interpolasi parabola, interpolasi Sinc, zero-padding data menjadi FFT yang lebih lama, dan metode fase vocoder menggunakan (sedikit) offset windows yang tumpang tindih.
FFT pada dasarnya adalah bank filter bandpass, masing-masing dengan transisi yang sangat curam tetapi banyak riak stop-band untuk panjang kernel filter FIR yang diberikan. Dengan demikian, filter ini tidak memiliki penolakan noise yang hebat terhadap noise non-periodik di jendela. Jika Anda mencurigai jenis gangguan ini sebagai masalah, maka FFT berjendela atau bank filter khusus mungkin berkinerja lebih baik.
sumber
Setelah penelitian lebih lanjut yang diajukan oleh pertanyaan Jim Clay dan jawaban pichenettes dalam komentar, saya menemukan bahwa Method2 saya diciptakan kembali B-transformed Q-transform dijelaskan misalnya oleh Kashima dan Mont-Reynaud (saya tidak yakin saya dapat menautkan ke artikel ini, file terlihat robek ) .
Pendekatan mereka secara algoritmik lebih efisien karena mereka mulai dari rentang frekuensi terbesar dan secara iteratif menurunkannya 2 hingga mereka mencapai oktaf terendah.
Manfaat transformasi Q juga dieksplorasi oleh Brown misalnya di sini . Ini mungkin tidak seefisien FFT tunggal, tetapi memiliki keuntungan tidak menghitung FFT tebal pada pita frekuensi tinggi yang tidak memerlukan ini.
Terima kasih atas semua jawaban, komentar, dan tautan.
sumber
Jika Anda menyimpan "histori" input, dan menggunakannya untuk tumpang tindih DFT Anda, maka itu akan memberikan lebih banyak informasi untuk mengekstrak dari konten spektral. Tentu saja, itu tergantung pada sifat waktu sinyal Anda yang berbeda-beda. Ini akan serupa dalam bentuk dengan fungsi distribusi probabilitas.
Ini akan memberi Anda DFT yang berjarak lebih dekat dalam waktu. Namun, itu masih akan meningkatkan ketidakpastian temporal dari masing-masing DFT, yang dibatasi oleh hukum alam: nilai pasti perilaku temporal dan spektral tidak dapat secara bersamaan ditentukan.
Namun, jika konten frekuensi tidak banyak berbeda di dalam jendela, maka itu akan baik-baik saja.
sumber