2010-01-25 9 views
22

Dla mojego obecnego projektu w C++/Qt potrzebuję biblioteki (preferowane LGPL), która może obliczyć spektrogram z sygnału (w zasadzie tablicy dubletów). Już używam Qwt dla części GUI.Spectrogram C++ biblioteka

Wszelkie sugestie? Dzięki.

+0

LGPL, ponieważ nie chcesz wydać kodu źródłowego? Wiem, że biblioteki FFTW mogą być używane na alternatywnej licencji niż wersja GPL. – petantik

+0

spróbuj wyszukać na stronie sourceforge coś o "cyfrowym przetwarzaniu sygnału". AFAIK na tej stronie to niektóre biblioteki. – cybevnm

+0

@gregseth, Czy skończyłeś ten projekt? Muszę wykonać ten sam projekt i obliczyć spektrogram z tablicy dubletów. Nie wiem, jak zacząć. Czy możesz dać mi wskazówki? Merci – Jack

Odpowiedz

16

Byłoby dość łatwo ułożyć swój spektrogram. Kroki są:

  1. funkcja okna (dość trywialne, np Hanning)
  2. FFT (FFTW byłoby dobrym wyborem, ale jeśli licencjonowanie jest problem to idź do FFT pocałunek lub podobnego)
  3. oblicz log wielkość komponentów dziedzinie częstotliwości (trywialny: log (sqrt (re re + * im * im))
+1

Od log (sqrt (x)) = (1/2) log (x), możesz sprawić, by działał szybciej bez sqrt() – DarenW

+0

@DarenW - rzeczywiście - ponieważ zazwyczaj pracujemy z dB, zamiast robić 20 * log10 (sqrt (x)) możemy po prostu zrobić 10 * log10 (x). –

1

można użyć fftw (fftw.org) obliczyć spektrogram, to nadal trzeba wykreślić dane, ale to nie powinno być problemem

10

"How do I create a frequency vs time plot?" wymienia kilka bibliotek, z których każda może obliczyć spektrogram z sygnału.

skopiowany i wklejony z własnej odpowiedzi:

Niektóre kod źródłowy do generowania spectrograms/waterfall plots z danych audio:

Image to Spectrogram przechodzi w odwrotnym kierunku z powyższych zastosowaniach.

1

Możesz użyć kodu FFT z here. Wykorzystuje metaprogramowanie szablonów C++ dla wydajności. Pełne źródło dostarcza autor here.

To był suggested, aby dołączyć ten kod do Eigena w celu użycia kodu zgodnego z szablonem (typu przyjaznego).