Gürültülü bir .wav dosyasında tambur bpm'sini algılama


12

Aşağıdaki sorunu çözmek için algoritma (lar) arıyorum: Gürültülü bir .wav ses yakalama (mikrofon üzerinde bazı rüzgar + sürtünme gürültüsü) verildiğinde, yumuşak davul atımının BPM'sini nasıl tespit edebilirim?

Konuyu googling etmeye çalıştım, ancak hem analiz hem de parmak izi kimliği üretimi için mp3 ile ilgili yazılımların yüksek olması nedeniyle sonuçlar oldukça zayıf. Hiçbiri gerçekte nasıl yapılacağı hakkında bilgi vermez.

Gürültüyü ortadan kaldıracak algoritmaların farkındayım, ancak bu hala BPM'yi tespit etme problemiyle ilgili. BPM sorununun nasıl çözüldüğüne bağlı olarak, inkar etmeye bile gerek yok olabilir (davul daha düşük frekanslarda ve daha yüksek gürültüde olma eğiliminde olduğundan, basit bir düşük geçiş yeterli ön işleme yeterli olabilir).


Yanıtlar:


13

Nispeten güçlü bir davul vuruşu varsa çalışan bir yöntem, dalga formunun STFT'sinin büyüklüğünü almak ve daha sonra bunu sadece zaman boyutunda otomatik olarak ilişkilendirmektir. Otomatik korelasyon fonksiyonunun zirvesi, vuruş veya bunun bir altkümesi olacaktır.

Bu, sinyali birçok farklı frekans bandına ayırmak, her birinin genlik zarfını bulmak, her bir zarfı otomatik olarak ilişkilendirmek ve daha sonra toplamakla eşdeğerdir. Gürültü ve müziğin diğer bölümlerinin çapraz korelasyon işlemi ile ortalaması alınır.

Bunun nedeni, davul ritimlerinin birçok frekansta (dikey çizgiler) kısa ömürlü ses üretmesi, müziğin diğer bölümlerinin ise yalnızca birkaç frekansta (yatay çizgiler) uzun ömürlü olması ve gürültünün uzun ömürlü olması ancak tüm frekanslarda rastgele olmasıdır. Bir STFT'ye bakarsanız atım tekrarını görebilirsiniz:

resim açıklamasını buraya girin

Tüm müzik dosyaları için tek bir BPM değeri bulmak için bir okul projesi için bunu buldum, ancak BPM'yi değiştirerek bir ses akışına da uyarlanabilir. Aradığınız BPM süresinin en az iki katı olan parçaları işlemeniz gerekir.


FFT, periyodik sinyalleri bulmak için genellikle yararlı bir tekniktir. Sinyal istediğiniz kadar düzenli değilse küçük bir hile olabilir: bir davulcu bir şarkı boyunca hızlandırabilir veya yavaşlayabilir - kasıtlı olarak veya değil - ve bu FFT sonuçlarına zarar verebilir frekans alanında.
12'de

1
@Rethunk: BPM zaman içinde değişirse, bunu parçalar halinde yapmanız ve her biri için BPM'yi bulmanız gerekir.
Ocak'ta endolith

Vuruşların genellikle müzikle ilişkili olduğunu ve bu resimde de müziğin başka bir bölümünü gördüğünüzü unutmayın: ritimdeki yüksekliği değiştiren yatay çizgiler. Yani temelde üç enerji katkısı vardır: vuruşlar (dikeyler), notlar (ufuklar) ve gürültü (kalan).
MSalters

@MSalters: Notlar da ilişkilendirilebilir
endolith

4

Otomatik korelasyon kesinlikle bunun için iyi bir temel yöntemdir. Bunu potansiyel olarak daha da geliştirmek için yapabileceğiniz birkaç şey var:

  1. Tamburunuzun frekans spektrumunu biliyorsanız, bant geçişi sinyali yalnızca tamburla ilgili frekansların kalacağı şekilde filtreleyin. Davula bağlı olarak bu oldukça dar olabilir ve gürültünün büyük çoğunluğundan kurtulmalıdır.
  2. Sonra sinyalin zaman alanı zarfını ("kayıplı tepe" bunu yapmanın en kolay yoludur) kabaca davul vuruşlarının uzunluğuna uygun bir zaman sabitiyle hesaplayın.
  3. Sonra otomatik korelasyon yapın
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.