2010-01-25 16 views
22

Para mi proyecto actual en C++/Qt, necesito una biblioteca (se prefiere LGPL) que puede calcular un espectrograma a partir de una señal (básicamente una matriz de dobles). Ya uso Qwt para la parte de GUI.Biblioteca de espectrogramas C++

¿Alguna sugerencia? Gracias.

+0

LGPL porque no desea liberar el código fuente? Sé que las bibliotecas de FFTW se pueden utilizar con una licencia alternativa distinta de la versión de GPL. – petantik

+0

intenta buscar en el sitio de sourceforge algo sobre "procesamiento de señal digital". AFAIK en ese sitio era algunas bibliotecas ... – cybevnm

+0

@gregseth, ¿Terminó este proyecto? Tengo que hacer el mismo proyecto y calcular un espectrograma a partir de una matriz de dobles. No sé cómo comenzar. ¿Podría darme algunas pistas? Merci – Jack

Respuesta

16

Sería bastante fácil de armar su propio espectrograma. Los pasos son:

  1. función de ventana (bastante trivial, por ejemplo Hanning)
  2. FFT (FFTW sería una buena opción, pero si la concesión de licencias es un problema luego ir por FFT beso o similar)
  3. calcular registro magnitud de componentes de dominio de frecuencia (trivial: log (sqrt (re re * + * im im))
+1

Desde log (sqrt (x)) = (1/2) log (x), puede hacer que funcione más rápido sin sqrt() – DarenW

+0

@DarenW - de hecho, ya que normalmente trabajamos con dB en lugar de hacer 20 * log10 (sqrt (x)) podemos hacer 10 * log10 (x). –

1

podría utilizar fftw (fftw.org) para calcular el espectrograma, usted todavía tiene que representar los datos, pero eso no debería ser un problema

10

"How do I create a frequency vs time plot?" enumera varias bibliotecas, cada una de las cuales puede calcular un espectrograma a partir de una señal.

copiado y pegado de mi propia respuesta:

Algunos código fuente para generar spectrograms/waterfall plots a partir de datos de audio:

Image to Spectrogram va en el sentido inverso de las utilidades anteriores.

1

Puede usar el código FFT desde here. Utiliza la metaprogramación de plantillas C++ para mayor eficiencia. La fuente completa es provista por el autor here.

Fue suggested para incluir este código en Eigen por su uso de código templated (tipo amigable).