Próbuję wdrożyć grę śpiewającą, która będzie analizować dane wejściowe mikrofonu i mówić graczowi, jak dobrze śpiewa. To musi być zrobione w czasie rzeczywistym.
Natknąłem się na wiele wątków zadających to samo pytanie, ale wciąż nie jestem w stanie tego zrobić, prawdopodobnie z powodu mojego braku doświadczenia w tej dziedzinie i małej wiedzy matematycznej. Wdrożyłem algorytm oparty na artykule DSPDimension w artykule dotyczącym zmiany wysokości boiska: http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/
Wyodrębniam prawdziwą częstotliwość i wielkość, tak jak wyjaśnia to artykuł, ale nie wiem, jak znaleźć częstotliwość podstawową. Próbowałem uzyskać bin z największą wielkością, ale to daje mi tylko dobre wyniki dla sygnałów o wyższej częstotliwości, nie ma znaczenia, którego współczynnika nadpróbkowania używam Nadal otrzymuję złe dane dla sygnałów o niskiej częstotliwości. Czy to podejście jest całkowicie niewłaściwe, czy jestem na dobrej drodze, ale czegoś brakuje?
Z góry dziękuję,
EDYCJA: Zapomniałem wspomnieć, że interesuję się tylko klasą boiska, więc nie ma problemu, jeśli brakuje podstawy, ale mam silną nutę w próbce.
EDIT2: Dzięki wszystkim właśnie ukończyłem wersję algorytmu, która działa jak urok. Problem z oszacowaniem niskiej częstotliwości wynikał z mojego testu wejściowego. Kiedy zaśpiewałem notatkę, pasowała ona poprawnie. Rozważam teraz wszystkie harmoniczne, a nie tylko najwyższy szczyt.
źródło
Odpowiedzi:
Jest tak, ponieważ harmoniczne są większe niż podstawowe. Wykreśl swoje spektrum, a zobaczysz. Lepszym sposobem na znalezienie prawdziwej podstawy jest autokorelacja. Następnie „przesuwasz” przeszłość fali i znajdujesz opóźnienia, w których kształt fali pokrywa się z samym sobą.
http://www.phon.ucl.ac.uk/courses/spsci/matlab/lect10.html
Czy naprawdę chcesz, aby śpiewali dokładną nutę, czy jest w porządku, jeśli śpiewają oktawę powyżej lub poniżej, w zależności od rejestru głosu?
źródło
Tak, użycie estymatora częstotliwości szczytowej dla wysokości tonu jest nieprawidłowe. Skok jest zjawiskiem psychoakustycznym, więc wykrywanie lub szacowanie wysokości tonu różni się od szacowania częstotliwości. W poprzednich odpowiedziach na podobne pytania podano wiele metod szacowania wysokości tonu. Do wyboru masz więcej niż 1.
Oto jeden: /programming/4227420/matlab-missing-fundamental-from-an-fft/4231322#4231322 i inny: Wskazówki dotyczące poprawy wykrywania skoku
DODANO 1: Pytania podobne do tego są zadawane tak często, że pisałem dłuższy post na blogu na ten temat: http://www.musingpaw.com/2012/04/musical-pitch-is-not-just-fft- częstotliwość.html
źródło