Come estrarre le informazioni di frequenza da campioni provenienti da PortAudio utilizzando FFTW in C

StackOverflow https://stackoverflow.com/questions/3058236

Domanda

Voglio fare un programma che registra i dati audio usando PortAudio (ho fatto questa parte) e quindi visualizzare le informazioni di frequenza di questo audio registrato (per ora, mi piacerebbe per visualizzare la frequenza media di ciascuno dei gruppo di campioni come vengono in).

Da alcune ricerche che ho fatto, so che ho bisogno di fare una FFT. Così ho cercato su google per una libreria di farlo, in C, e ho trovato FFTW.

Tuttavia, ora sono un po 'perso. Che cosa dovrei fare con i campioni che ho registrato per estrarre alcune informazioni di frequenza da loro? Che tipo di FFT dovrei usare (presumo che avrei bisogno di un vero e proprio dei dati 1D?)?

E una volta che avrei fatto la FFT, come faccio ad ottenere le informazioni di frequenza dai dati che mi dà?

EDIT: ho ora si trova anche l'algoritmo di autocorrelazione. È meglio? Più semplice?

Grazie mille in anticipo, e mi dispiace, non ho assolutamente alcuna esperienza, se questo. Spero che fa almeno un po 'di senso.

È stato utile?

Soluzione

Per convertire i vostri campioni audio ad uno spettro di potenza:

  • se i dati audio è integer dati quindi convertirlo in virgola mobile
  • scegliere una dimensione FFT (ad esempio N = 1024)
  • funzione finestra per N campioni di dati (ad esempio, Hanning )
  • utilizzare un vero e proprio-a-complesso FFT di dimensione N per generare i dati nel dominio della frequenza
  • calcolare la grandezza dei dati nel dominio della frequenza complessa (magnitude = sqrt(re^2 + im^2))
  • opzionalmente convertito grandezza ad una scala logaritmica (dB) (magnitude_dB = 20*log10(magnitude))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top