biblioteca Espectrograma C ++
-
22-09-2019 - |
Pregunta
Para mi proyecto actual en C ++ / Qt necesito una biblioteca (se prefiere LGPL) que puede calcular un espectrograma de una señal (básicamente una serie de dobles). Ya uso Qwt para la parte de interfaz gráfica de usuario.
¿Alguna sugerencia? Gracias.
Solución
Sería bastante fácil de armar su propio espectrograma. Los pasos son:
- función de ventana (bastante trivial, p.ej. Hanning)
- FFT (FFTW sería una opción buena, pero si es una concesión de licencias Emisión y luego ir por beso o FFT similar)
- magnitud logarítmica calcular de componentes de dominio de frecuencia (Trivial: log (sqrt (re re * + * im im))
Otros consejos
"¿Cómo se crea una frecuencia en función del tiempo trama? " enumera varias bibliotecas, cada una de las cuales puede calcular un espectrograma de una señal.
copiado y pegado de mi propia respuesta:
Algunos código fuente para generar espectrogramas / parcelas cascada de datos de audio:
- SoX - Sound eXchange incluye código fuente espectrograma
- Audacity incluye código fuente espectrograma
- glfer incluye el código fuente espectro pantalla de espectro cascada
- código fuente que usos fftw para calcular la espectrograma de un flujo de audio
- más código fuente que utiliza OpenAL y fftw para calcular la espectrograma para un flujo de audio
- "sonido activado grabador con espectrograma en C # " por Jeff Morton
- Topographica parece incluir código fuente espectrograma
- espectrógrafo para iTunes
imagen para Espectrograma va en la dirección inversa a partir de las utilidades anteriores.
podría utilizar fftw (fftw.org) para calcular el espectrograma, todavía tendría que representar los datos, pero eso no debería ser un problema
Se puede usar el código de FFT href="http://www.drdobbs.com/cpp/a-simple-and-efficient-fft-implementatio/199500857" aquí . Utiliza C ++ metaprogramming plantilla para la eficiencia. La fuente completo es proporcionado por el autor aquí .
sugirió incluir este código en Eigen para su uso con plantilla de (tipo amigable) código.