Metodologi apa yang digunakan untuk diskriminasi nada (musikal) yang berbeda

12

Saya mencoba untuk meneliti dan mencari cara terbaik untuk menyerang masalah ini. Ini mengangkangi pemrosesan musik, pemrosesan gambar, dan pemrosesan sinyal, sehingga ada banyak sekali cara untuk melihatnya. Saya ingin menanyakan cara terbaik untuk mendekatinya karena apa yang tampaknya rumit dalam domain sig-proc murni mungkin sederhana (dan sudah diselesaikan) oleh orang-orang yang melakukan pemrosesan gambar atau musik. Bagaimanapun, masalahnya adalah sebagai berikut:masukkan deskripsi gambar di sini

Jika Anda memaafkan saya menggambar masalah ini, kita dapat melihat yang berikut ini:

Dari gambar di atas, saya memiliki 3 'tipe' sinyal yang berbeda. Yang pertama adalah denyut nadi yang semacam 'naik' dalam frekuensi dari ke , dan kemudian mengulangi. Ini memiliki durasi pulsa tertentu, dan waktu pengulangan pulsa tertentu.f 4f1f4

Yang kedua hanya ada di , tetapi memiliki panjang pulsa lebih pendek dan frekuensi pengulangan pulsa lebih cepat.f1

Akhirnya yang ketiga hanyalah nada di .f1

Masalahnya adalah, dengan cara apa saya mendekati masalah ini, sehingga saya dapat menulis classifier yang dapat membedakan antara sinyal-1, sinyal-2, dan sinyal-3. Artinya, jika Anda memberi makan salah satu sinyal, itu harus dapat memberi tahu Anda sinyal ini begitu dan begitu. Pengklasifikasi terbaik apa yang akan memberi saya matriks kebingungan diagonal?

Beberapa konteks tambahan dan apa yang telah saya pikirkan sejauh ini:

Seperti yang saya katakan ini mengangkangi sejumlah bidang. Saya ingin menanyakan metodologi apa yang mungkin sudah ada sebelum saya duduk dan pergi berperang dengan ini. Saya tidak ingin secara tidak sengaja menemukan kembali roda. Berikut adalah beberapa pemikiran yang telah saya cari dari berbagai sudut pandang.

Sudut Pemrosesan Sinyal: Satu hal yang saya perhatikan adalah melakukan Analisis Cepstral , dan kemudian mungkin menggunakan Bandwidth Gabor cepstrum dalam membedakan sinyal-3 dari 2 lainnya, dan kemudian mengukur puncak tertinggi cepstrum dalam membedakan sinyal- 1 dari sinyal-2. Itulah solusi kerja pemrosesan sinyal saya saat ini.

Sudut Pemrosesan Gambar: Di sini saya berpikir karena saya BISA sebenarnya membuat gambar berhadapan dengan spektrogram, mungkin saya bisa memanfaatkan sesuatu dari bidang itu? Saya tidak akrab dengan bagian ini, tetapi bagaimana dengan melakukan 'line' mendeteksi menggunakan Hough Transform , dan kemudian entah bagaimana 'menghitung' garis (bagaimana jika mereka bukan garis dan gumpalan?) Dan pergi dari sana? Tentu saja kapan saja ketika saya mengambil spektogram, semua pulsa yang Anda lihat mungkin bergeser di sepanjang sumbu waktu, jadi apakah ini masalah? Tidak yakin...

Sudut Pemrosesan Musik: Sebagian dari pemrosesan sinyal untuk memastikan, tetapi saya sadar bahwa sinyal-1 memiliki kualitas (musik?) Tertentu yang berulang-ulang yang dilihat orang-orang di proc musik sepanjang waktu dan telah diselesaikan di mungkin instrumen yang membedakan? Tidak yakin, tetapi pikiran itu muncul di benak saya. Mungkin titik berdiri ini adalah cara terbaik untuk melihatnya, mengambil sebagian dari domain waktu dan menghilangkan langkah-langkahnya? Sekali lagi, ini bukan bidang saya, tetapi saya sangat curiga ini adalah sesuatu yang telah dilihat sebelumnya ... dapatkah kita melihat semua 3 sinyal sebagai berbagai jenis alat musik?

Saya juga harus menambahkan bahwa saya memiliki jumlah data pelatihan yang layak, jadi mungkin menggunakan beberapa metode itu mungkin hanya membiarkan saya melakukan beberapa ekstraksi fitur yang kemudian dapat saya manfaatkan dengan K-Nearest Neighbor , tapi itu hanya sebuah pemikiran.

Pokoknya di sinilah saya berdiri sekarang, bantuan apa pun dihargai.

Terima kasih!

EDIT BERDASARKAN KOMENTAR:

  • Ya, , , , semuanya diketahui sebelumnya. (Beberapa variasi tetapi sangat sedikit. Misalnya, katakanlah kita tahu bahwa = 400 Khz, tetapi mungkin masuk pada 401,32 Khz. Namun jarak ke tinggi, sehingga mungkin dengan perbandingan 500 Khz.) Signal-1 akan SELALU menginjak 4 frekuensi yang diketahui. Sinyal-2 akan SELALU memiliki 1 frekuensi.f 2 f 3 f 4 f 1 f 2 f 2f1f2f3f4f1f2f2

  • Tingkat pengulangan nadi dan panjang nadi dari ketiga kelas sinyal juga semuanya diketahui sebelumnya. (Lagi beberapa varian tetapi sangat sedikit). Namun, beberapa peringatan, tingkat pengulangan nadi dan panjang sinyal 1 dan 2 nadi selalu diketahui, tetapi itu adalah kisaran. Untungnya, rentang tersebut tidak tumpang tindih sama sekali.

  • Input adalah rangkaian waktu kontinu yang datang secara real time, tetapi kita dapat mengasumsikan bahwa sinyal 1, 2, dan 3 saling eksklusif, dalam hal itu, hanya satu dari mereka yang ada pada titik waktu mana pun. Kami juga memiliki banyak fleksibilitas pada seberapa banyak waktu yang Anda ambil untuk diproses pada suatu titik waktu.

  • Data bisa berisik ya, dan mungkin ada nada palsu, dll, di band yang tidak dikenal di , , , . Ini sangat mungkin. Kita dapat mengasumsikan SNR med-high hanya untuk 'memulai' pada masalah.f 2 f 3 f 4f1f2f3f4

Spacey
sumber
Apa yang akan menjadi input Anda? 1 / Aliran kontinu di mana Anda ingin memisahkan kemunculan sinyal 1/2/3 (masalah segmentasi + klasifikasi) atau 2 / sampel individu dengan hanya satu jenis sinyal yang perlu Anda klasifikasikan ke dalam kategori 1/2/3? Anda menggambarkan beberapa karakteristik sinyal: PRT dari sinyal 1; frekuensi pengulangan sinyal 2; frekuensi sinyal 3; nilai f1 / f2 / f3 / f4. Apakah parameter ini diketahui sebelumnya atau variabel? Terakhir, jika input Anda memiliki beberapa kemunculan sinyal-sinyal ke segmen, berapakah durasi khas suatu segmen?
pichenettes
Pertanyaan lain: dari gambar Anda sepertinya Anda berurusan dengan nada murni (tidak ada harmonik, dan tidak ada suara). Apakah itu masalahnya, atau apakah datanya lebih kotor dari gambar Anda?
pichenettes
@pichenettes Terima kasih, saya menambahkan info yang Anda butuhkan dalam pengeditan.
Spacey
Tindak lanjut atas kemajuan Anda dan solusi untuk pertanyaan ini akan dihargai. Analisis sebagian besar tergantung pada variabilitas waktu dari suara yang dipelajari. jika mereka lebih cepat daripada jendela fft, katakanlah di bawah 256 sampel Anda akan memerlukan spektrogram beresolusi tinggi. Semakin tepat spektrogramnya, semakin Anda dapat melihat informasi detail kecil dalam suara Anda. FFT mungkin baik-baik saja, Setelah itu pertanyaannya hanyalah kasus menambahkan operator logika untuk mengklasifikasikan suara menggunakan rutinitas analisis pola sederhana. menganalisis durasi pulsa, jarak di antara mereka, sifat chordal keseluruhan, seterusnya.
com. Dimengerti
mudah untuk menemukan harmonik utama hanya dengan memeriksa nilai puncak setiap x baris, dan kemudian Anda hanya berakhir dengan grafik untuk dianalisis menggunakan pemrograman analisis tanda tangan pola, yang berkembang sama seperti jika Anda menganalisisnya dalam retorika, hanya gambar aturan pembeda terbaik yang Anda gunakan dengan sadar saat membandingkan dan mengklasifikasikan perkembangan angka.
com. Dimengerti

Jawaban:

7

Langkah 1

Hitung STFT dari sinyal menggunakan ukuran bingkai lebih kecil dari durasi pulsa. Saya berasumsi bahwa ukuran frame ini masih akan menawarkan diskriminasi frekuensi yang cukup antara f1, f2, f3 dan f4. adalah indeks bingkai, adalah indeks bin FFT.m kS(m,k)mk

Langkah 2

Untuk setiap frame STFT, hitung frekuensi fundamental dominan menggunakan sesuatu seperti YIN, bersama dengan indikator "pitch confidence", seperti kedalaman "dip" DMF yang dihitung oleh YIN.

Mari kita sebut f0 dominan yang diperkirakan pada frame dan kepercayaan pitch terdeteksi pada frame .m v ( m ) mf(m)mv(m)m

Perhatikan bahwa jika data Anda tidak terlalu berisik, Anda bisa lolos dengan menggunakan autokorelasi sebagai penaksir nada, dan rasio puncak sekunder autokorelasi yang lebih besar dengan sebagai indikator kepercayaan nada. YIN murah untuk diimplementasikan.r0

e(m)m

Langkah 3

MMM=50

Ekstrak fitur berikut:

  • σf(k)(f(m))m[kM,k+M],v(m)>τ
  • σv(k)(v(m))m[kM,k+M]
  • σe(k)(e(m))m[kM,k+M]

σfσvσe

σfσvσeσfσvσeσfσvσe

Hitung 3 fitur ini pada data pelatihan Anda dan latih classifier bayesian naif (hanya sekelompok distribusi gaussian). Bergantung pada seberapa bagus data Anda, Anda bahkan bisa lolos dengan pengklasifikasi dan menggunakan ambang batas yang ditentukan sendiri pada fitur-fiturnya, meskipun saya tidak merekomendasikan ini.

Langkah 4

M

Jika data dan klasifikasi Anda bagus, Anda akan melihat sesuatu seperti ini:

1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3

Ini membatasi waktu mulai dan berakhir dengan baik, dan jenis setiap sinyal.

Jika data Anda berisik, pasti ada frame yang salah diklasifikasikan:

1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 3, 2, 2, 1, 1, 1, 3, 1, 1, 1, 3, 3, 3, 3, 2, 3, 3, 3

Jika Anda melihat banyak omong kosong seperti dalam kasus kedua, gunakan filter mode pada data melalui lingkungan 3 atau 5 deteksi; atau gunakan HMM.

Pesan rumah

Apa yang ingin Anda jadikan dasar pendeteksian Anda bukanlah fitur spektral, tetapi statistik temporal teragregasi dari fitur spektral pada windows yang pada skala yang sama dengan durasi sinyal Anda. Masalah ini benar-benar memerlukan pemrosesan pada dua skala waktu: kerangka STFT tempat Anda menghitung properti sinyal yang sangat lokal (amplitudo, nada dominan, kekuatan pitch), dan jendela yang lebih besar tempat Anda mengintip variabilitas temporal dari properti sinyal tersebut.

pichenettes
sumber
Perhatikan bahwa Anda juga bisa melakukannya dengan gaya pengenalan suara jika Anda ingin memanfaatkan HTK atau sejenisnya ... Model akustik: 4 ponsel P1, P2, P3, P4 (nada pada f1, nada di f2, nada di f3, nada di f4, nada di f4 ) + 1 simbol S untuk diam. 1 atau 2 gaussians per telepon. Model Word W1 untuk sinyal 1: (P1 S P2 S P3 S P4 S) +. Model Word W2 untuk sinyal 2: (P1 S) +. Model Word W3 untuk sinyal 3: (P1) +. Model kalimat: (W1 | W2 | W3) *. Satu-satunya peringatan adalah bahwa jika Anda menggunakan kotak pengenalan suara, Anda harus men-tweak front-end ekstraksi fitur karena MFCC terlalu beresolusi rendah dan pitch-agnostik untuk membedakan f1 / f2 / f3 / f4.
pichenettes
@pichenettes Terima kasih pichenettes, itu adalah jawaban yang sangat bagus - saya punya beberapa tindak lanjut: 1) Apa itu 'YIN' yang Anda sebutkan, dan apa itu 'DMF'? Saya tidak dapat menemukan apa pun pada mereka melalui google. 2) Apa sebenarnya 'nada percaya diri' sebagai ukuran? 3) Anda menyebutkan bahwa Anda dapat menggunakan korelasi-otomatis untuk menemukan kepercayaan-pitch - autokorelasi apa, kerangka waktu domain atau STFT bingkai itu? (Saya tidak mengerti ini mungkin karena saya tidak tahu apa yang Anda maksudkan dengan percaya diri). (lanjutan ...)
Spacey
@pichenettes (lanjutan) 4) Mengenai fitur yang ada PER WINDOW saja ya? Jadi Anda menghitung tiga stds per jendela, dari, (dalam hal ini) 101 frame? Dalam hal ini ketika tiba saatnya untuk berlatih, 'titik' 3-D saya dibuat dari 3 std lebih dari 101 FRAMES, benar? 5) Pada langkah 4 Anda, ketika Anda memiliki angka 1,1,1,2,2 dll, setiap angka sesuai dengan cara Anda mengklasifikasikan jendela ITU yang benar? '1' pertama adalah klasifikasi jendela yang terdiri dari bingkai -50 hingga 50, dan yang kedua '1' dari jendela yang terdiri dari bingkai -49 hingga 51, benar? (Jendela meluncur dengan 1 frame setiap kali) ...
Spacey
@pichenettes 6) Akhirnya, saya seharusnya menyebutkan bahwa ini akan digunakan sebagai 'alarm', sehingga jika ada sinyal-1 atau sinyal-2, saya mendapatkan alarm untuk berdering, tetapi tidak ada yang berbunyi jika tidak ada apa-apa di sana - Tidakkah seharusnya ada ambang batas yang cocok sebelum bahkan mulai mencoba dan mengklasifikasikan sehingga Anda tidak mendapatkan hasil positif palsu daripada tidak melakukan apa pun? (hanya suara latar misalnya). (Saya baru belajar tentang Naive Bayes Classifier sekarang, jadi jangan tahu apakah ini multi-kelas). 7) TERIMA KASIH BANYAK OLEH CARA DAN TERIMA KASIH DI MUKA! RIBUAN DAN SATU UPVOTES UNTUK ANDA! :-)
Spacey
1
1 / YIN adalah algoritma pendeteksian nada klasik untuk sinyal ucapan dan musik. recherche.ircam.fr/equipes/pcm/cheveign/pss/2002_JASA_YIN.pdf . DMF adalah "fungsi perbedaan besarnya", kuantitas yang dihitung oleh algoritma seperti YIN untuk estimasi pitch. 2 / Algoritma pendeteksian pitch seperti YIN akan menghasilkan estimasi frekuensi dasar, dan "skor kepercayaan" yang menunjukkan seberapa besar kemungkinan bahwa pitch yang dikembalikan adalah jawaban yang benar. Pada sinyal berisik atau sinyal yang menunjukkan beberapa nada, ini akan rendah, pada gelombang sinus murni, ini akan sangat tinggi.
pichenettes
3

Pendekatan alternatif dapat berupa empat detektor heterodyne: Lipat gandakan sinyal input dengan osilator lokal dengan frekuensi 4 dan filter low pass hasil yang dihasilkan. Setiap output mewakili garis vertikal di gambar Anda. Anda mendapatkan output di masing-masing dari 4 frekuensi sebagai fungsi waktu. Dengan filter low pass, Anda dapat memanggil berapa banyak penyimpangan frekuensi yang ingin Anda izinkan dan juga seberapa cepat Anda ingin output berubah, yaitu seberapa tajam pinggirannya.

Ini akan bekerja dengan baik walaupun sinyalnya cukup berisik.

Hilmar
sumber
Saya sedang memikirkan metode ini - apakah Anda melihat ada manfaat dari metode ini (pencampuran dan LPF) lebih dari bekerja secara langsung di pass-pand menggunakan spektrogram, dll?
Spacey