Wykrywanie uderzeń na minutę bębna w hałaśliwym pliku .wav

12

Szukam algorytmu (ów) do rozwiązania następującego problemu: Biorąc pod uwagę głośne przechwytywanie dźwięku .wav (trochę wiatru + szum tarcia na mikrofonie), jak wykryć BPM miękkiego uderzenia bębna?

Próbowałem googlować ten temat, ale wyniki są dość słabe, ze względu na dużą liczbę programów związanych z mp3 zarówno do analizy, jak i generowania identyfikatora odcisków palców. Żadne z nich nie podaje informacji o tym, jak to zrobić.

Zdaję sobie sprawę z algorytmów do usuwania szumu, ale wciąż mam problem z wykrywaniem BPM. I w zależności od rozwiązania problemu BPM, możliwe, że nawet nie muszę go denudować (ponieważ bęben ma tendencję do obniżania częstotliwości, a szumu do wyższych, zwykłe dolnoprzepustowe może być wystarczającym wstępnym przetwarzaniem).

Alex K.
źródło
1
Brzmi podobnie do mojego problemu z wykrywaniem chrapania .
Daniel R Hicks,

Odpowiedzi:

13

Jedną z metod, która działa, jeśli występuje względnie silne uderzenie bębna, jest ustalenie wielkości STFT kształtu fali, a następnie automatyczna korelacja tylko w wymiarze czasowym. Szczytem funkcji autokorelacji będzie rytm lub jego podwielokrotność.

Jest to równoważne z rozbiciem sygnału na wiele różnych pasm częstotliwości, znalezieniem obwiedni amplitudy każdego z nich, autokorelacją każdej obwiedni, a następnie zsumowaniem ich. Hałas i inne części muzyki są uśredniane przez operację korelacji krzyżowej.

Wynika to z faktu, że uderzenia perkusji wytwarzają krótkotrwały dźwięk na wielu częstotliwościach (linie pionowe), podczas gdy inne części muzyki są długowieczne tylko na kilku częstotliwościach (linie poziome), a hałas jest długotrwały, ale losowy na wszystkich częstotliwościach. Możesz zobaczyć powtarzanie taktów, jeśli spojrzysz na STFT:

wprowadź opis zdjęcia tutaj

Wymyśliłem to dla projektu szkolnego polegającego na znalezieniu pojedynczej wartości BPM dla całych plików muzycznych, ale można ją również dostosować do strumienia audio ze zmianą BPM. Musisz przetworzyć fragmenty, które są co najmniej dwa razy dłuższe niż okres poszukiwanego BPM.

endolit
źródło
FFT jest ogólnie przydatną techniką znajdowania sygnałów okresowych. Może być trochę podstępu, jeśli sygnał nie jest tak regularny, jak chcesz: perkusista może przyspieszyć lub zwolnić w trakcie utworu - celowo lub nie - i może to zepsuć wyniki FFT w dziedzinie częstotliwości.
Rethunk
1
@Rethunk: Jeśli BPM zmienia się w czasie, musisz to zrobić w porcjach i znaleźć BPM dla każdego.
endolith,
Zwróć uwagę, że rytmy są zwykle związane z muzyką i na tym zdjęciu widać także inną część muzyki: poziome linie, które zmieniają wysokość w takcie. Istnieją więc zasadniczo trzy wkłady energii: uderzenia (piony), nuty (poziomy) i hałas (reszta).
MSalters
@MSalters: Nuty też mogą się jednak korelować
endolith
4

Auto-korelacja jest z pewnością dobrą podstawową metodą do tego. Istnieje kilka rzeczy, które możesz zrobić, aby potencjalnie ulepszyć to:

  1. Jeśli znasz widmo częstotliwości swojego bębna, pasmowo filtruj sygnał, aby pozostały tylko częstotliwości istotne dla bębna. W zależności od bębna może to być dość wąskie i powinno pozbyć się ogromnej większości hałasu.
  2. Następnie obliczyć obwiednię czasową sygnału („szczyt stratny” jest najłatwiejszym sposobem na zrobienie tego) ze stałą czasową, która jest z grubsza dopasowana do długości uderzeń bębna.
  3. Następnie wykonaj autokorelację
Hilmar
źródło