Şekiller halinde kümelenmiş verileri tanıma


9

Bazı kuş şarkılarını tespit etmek ve sınıflandırmak için Python'da bir proje üzerinde çalışıyorum ve kendimi bir dalga dosyasını frekans ve zaman verilerine dönüştürmem gereken bir pozisyonda buldum. Bu çok fazla sorun değildi, ancak farklı heceleri gruplara ayırabilmek için, veri kümelerinin belirli bir şekle girdiğinde tespit edecek bir şey yazmam gerekiyor. Verilerin nasıl göründüğü hakkında bir fikir vermek için, verilerin çizildiğinde nasıl göründüğüne dair bir resim:

resim açıklamasını buraya girin

Ben her bir bireysel hece (her iki tarafında bir ayırma ile her şekil) almak ve SciPy kullanarak aralarında Pearson korelasyonu çalıştırmak böylece bir değişken veya kendi dosyalarına kaydetmek için bir yol gerekir.

Ayrıca, Python'u tercih ederim, ancak başka bir yolunuz varsa diğer dillerde kodlamaya açıkım.

Teşekkürler!


Önermek üzere olduğum şeylere tamamen aşina değilim, ancak hecelerinizin özelliklerini içeren bir dalgacık ile Sürekli Dalgacık Dönüşümü, göz atmaya değer bir şey.
heltonbiker

Bir şekil bulmaya mı ihtiyacınız var yoksa kuşları sınıflandırmaya mı çalışıyorsunuz? Öyleyse Gizli Markov Modelinin sesi kullanılıyor mu?
Mikhail

Yanıtlar:


2

İki soru:

1 / 8s civarında, 100ms kadar istikrarlı bir saha gözlemleyebiliriz, daha sonra 8.5s'e kadar ani bir artış düşer. Bu sekansın tamamı (8s ila 8.5s) tek bir varlık mı oluşturuyor, yoksa iki aşamayı (kararlı, sonra azalacak) iki varlık olarak mı düşünüyorsunuz?

2 / Süpervizörlü veya süpervizörsüz çalışmak ister misiniz? Aranacak "kalıpları" önceden biliyor musunuz?

  • Eğer gözetimsiz çalışmak istiyorsanız (kayıtları topladığınızı ve ondan "yapılandırılmış bir temsili" çıkarmayı hedeflediğinizi varsa), sorununuz ilk adımda ses etkinliği tespitine benzer. Sadece güçlü bir tiz tonlu segmentleri tespit etmek için sinyal yoğunluğunu kullanın, belki bir "eğiklik" metriğiyle (köprü aralığındaki otokorelasyonun maksimum oranının 1kHz - 5kHz oranını kullanın) kullanın. Ortaya çıkan diziyi düzgünleştirmek için filtreleyin ve ardından farklı segmentleri elde etmek için eşleştirin. Sinyalinizi parçalara ayırdığınızda, onlarla ilginç şeyler yapabilirsiniz. Örneğin, her biri için bir adım yörüngesi (her FFT çerçevesi için en güçlü frekans zirvesine sahip bir dizi veya gerçek bir adım tahmincisi ile daha sağlam bir şey çıkarılabilir), her blok arasındaki çift mesafeli bir matris hesaplamak için DTW kullanın ve benzer hatve desenlerine (8: 8.5 ve 10: 10.5 segment) sahip grupları tanımlamak için bir kümeleme algoritması (k-ortalamaları, aglomerasyon kümeleme) kullanın. Denetimsiz bir yaklaşımın fazla bölümlere ayırması muhtemeldir - örneğin 7.6: 8.5 ve 9.6: 10.5, aynı bloğun tekrarı olarak tanınacaktır, ancak sizin için temel olarak tek bir desen olabilir, ancak böyle bir şey kullanabilirsiniz.Sequitur bir seviye daha yüksek yapıya sahiptir.

  • Sinyalinizi etiketlemek istediğiniz önceden tanımlanmış bir "kalıplar" sözlüğünüz varsa, konuşma tanımanın dikkate alınmadığı tek büyük farkla, konuşma tanıma için kullanılan yaklaşım türlerini izlemeniz daha iyi olur. vaka aralığı dikkate alınacak tek bilgidir! Bir konuşma tanıma sistemi, tek bir FST kod çözme işleminde hem segmentasyon hem de tanıma görevlerini ele alır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.