Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spectrogram C++ library [closed]

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.

like image 625
gregseth Avatar asked Jan 25 '10 16:01

gregseth


4 Answers

It would be fairly easy to put together your own spectrogram. The steps are:

  1. window function (fairly trivial, e.g. Hanning)
  2. FFT (FFTW would be a good choice but if licensing is an issue then go for Kiss FFT or similar)
  3. calculate log magnitude of frequency domain components (trivial: log(sqrt(re * re + im * im))
like image 104
Paul R Avatar answered Nov 08 '22 13:11

Paul R


"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.

like image 30
David Cary Avatar answered Nov 08 '22 14:11

David Cary


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

like image 1
ted Avatar answered Nov 08 '22 13:11

ted


You can use FFT code from here. It uses C++ template metaprogramming for efficiency. The full source is provided by the author here.

It was suggested to include this code into Eigen for its use of templated (type friendly) code.

like image 1
alle_meije Avatar answered Nov 08 '22 12:11

alle_meije