Staram się jak najdokładniej analizować muzykę. Oczywiście próbowałem FFT, ale miałem pewne problemy.
Odkryłem, że niskie częstotliwości mają bardzo niską rozdzielczość niż słuch ludzki. Bardzo długo próbowałem FFT, aby rozwiązać ten problem, ale nawet analizując przy 8192 próbkach / s przy częstotliwości próbkowania 44100Hz (Oznacza to brak rozdzielczości czasowej), nie dostałem wystarczającej rozdzielczości na niskich częstotliwościach.
Znalazłem kilka rozwiązań.
Po pierwsze, kwadratowa interpolacja na pojemnikach FFT.
Ale nie wydaje się to idealnym sposobem. Problemami tej metody są:
1. „Jeśli chcę określić częstości między przedziałami częstotliwości, które trzy przedziały mam wybrać, aby wykonać interpolację?”
2. „Nawet ja to robię, nie ma żadnych faktycznych dodatkowych informacji o wyniku. Wiem, że interpolacje są dość trudną metodą.
Po drugie, wyodrębniam każdy przedział częstotliwości z pożądaną częstotliwością, dzięki czemu mogę wyodrębniać przedziały logarytmicznie.
Ale mają krytyczny problem z kosztami obliczeniowymi: (może ponad) N ^ 2.
Po trzecie, LFT (logarytmiczna transformata Fouriera).
Wymaga to logarytmicznie rozmieszczonych próbek i daje mi dokładnie to, czego szukam, z niewiarygodnie dużą prędkością; /programming/1120422/is-there-an-fft-that-uses-a-logarithmic-division-of-frequency
Ale nie mam pojęcia z tym algorytmem. Próbowałem zrozumieć artykuł i go wdrożyć, ale było to niemożliwe z powodu braku mojej znajomości języka angielskiego i matematyki.
Potrzebuję pomocy przy implementacji LFT.
Jeśli analiza, którą zamierzasz przeprowadzić, wymaga częstotliwości sygnałów w każdym przedziale, możesz to zrobić za pomocą krótkotrwałej transformacji Fouriera .
Każdy przedział FFT daje liczbę zespoloną reprezentującą rzeczywisty i urojony komponent - lub po odrobinie fazy manipulacji i wielkości.
Jako częstotliwość = dPhi / dt, (Phi == faza), biorąc odpowiednie pojemniki z par kolejnych widm STFT, możesz obliczyć częstotliwość.
DSP Dimension ma dobry artykuł na temat tego procesu.
źródło