For my current project in C++ / Qt I need a library (LGPL is preferred) which can calculate a spectrogram from a signal ( basically an array of doubles ). I already use Qwt for the GUI part.
Any suggestions? Thanks.
It would be fairly easy to put together your own spectrogram. The steps are:
- window function (fairly trivial, e.g. Hanning)
- FFT (FFTW would be a good choice but if licensing is an issue then go for Kiss FFT or similar)
- calculate log magnitude of frequency domain components (trivial: log(sqrt(re * re + im * im))
"How do I create a frequency vs time plot?" lists several libraries, each of which can calculate a spectrogram from a signal.
Copied and pasted from my own answer:
Some source code to generate spectrograms / waterfall plots from audio data:
- SoX - Sound eXchange includes spectrogram source code
- Audacity includes spectrogram source code
- glfer includes waterfall spectrum display spectrum source code
- source code that uses fftw to compute the spectrogram of an audio stream
- more source code that uses OpenAL and fftw to compute the spectrogram for an audio stream
- "Sound Activated Recorder with Spectrogram in C#" by Jeff Morton
- Topographica seems to include spectrogram source code
- SpectroGraph for iTunes
Image to Spectrogram goes in the reverse direction from the above utilities.
you could use fftw (fftw.org) to calculate the spectrogram, you would still need to plot the data, but that should not be a problem
来源:https://stackoverflow.com/questions/2133651/spectrogram-c-library