2010-01-25 24 views
22

Per il mio progetto corrente in C++/Qt ho bisogno di una libreria (è preferibile LGPL) che può calcolare uno spettrogramma da un segnale (fondamentalmente una matrice di doppi). Uso già Qwt per la parte della GUI.Libreria Spectrogram C++

Qualche suggerimento? Grazie.

+0

LGPL perché non si desidera rilasciare il codice sorgente? So che le librerie FFTW possono essere utilizzate con licenza alternativa rispetto alla versione GPL. – petantik

+0

prova a cercare sul sito di sourceforge qualcosa su "elaborazione del segnale digitale". AFAIK su quel sito erano alcune librerie .. – cybevnm

+0

@gregseth, hai finito questo progetto? Devo fare lo stesso progetto e calcolare uno spettrogramma da una serie di doppi. Non so come iniziare. Potresti darmi qualche suggerimento. Merci – Jack

risposta

16

Sarebbe abbastanza facile da mettere insieme il proprio spettrogramma. I passaggi sono:

  1. funzione finestra (abbastanza banale, esempio Hanning)
  2. FFT (FFTW sarebbe una buona scelta ma se licenze è un problema poi andare per FFT bacio o simile)
  3. calcolare registro grandezza di componenti dominio della frequenza (banale: log (sqrt (ri * re + im * im))
+1

Dal log (sqrt (x)) = (1/2) log (x), puoi farlo girare più velocemente senza sqrt() – DarenW

+0

@DarenW - anzi - dato che in genere stiamo lavorando con dB, invece di fare 20 * log10 (sqrt (x)) possiamo solo fare 10 * log10 (x). –

1

si potrebbe usare fftw (fftw.org) per calcolare lo spettrogramma, si sarebbe ancora bisogno di tracciare i dati, ma questo non dovrebbe essere un problema

10

"How do I create a frequency vs time plot?" elenca diverse librerie, ognuna delle quali può calcolare uno spettrogramma da un segnale.

copiato e incollato dalla mia risposta:

Alcuni codice sorgente per generare spectrograms/waterfall plots dai dati audio:

Image to Spectrogram va nella direzione inversa dalle suddette utenze.

1

È possibile utilizzare il codice FFT da here. Utilizza la metaprogrammazione del modello C++ per l'efficienza. L'origine completa è fornita dall'autore here.

È stato suggested includere questo codice in Eigen per l'utilizzo del codice di tipo (tipo amichevole).