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:
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 4
Yang kedua hanya ada di , tetapi memiliki panjang pulsa lebih pendek dan frekuensi pengulangan pulsa lebih cepat.
Akhirnya yang ketiga hanyalah nada di .
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 2
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 4
Jawaban:
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) m k
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) m v(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
Langkah 3
Ekstrak fitur berikut:
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
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.
sumber
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.
sumber