Come utilizzare NumPy con PortAudio per estrarre bassi, medi alti
Domanda
Come in questo esempio Come per estrarre le informazioni di frequenza da un flusso audio in ingresso (usando PortAudio)? mi incuriosisce PortAudio e NumPy ...
Io non sono sicuro al 100% su FFT, come posso passare NumPy un pezzo e tornare tre valori da -1,0 a 1,0 per bassi, medi e alti?
Non mi importa se questo solo per un canale che posso dare un senso alla parte audio di questo, è la matematica che nuotano davanti a me quando li guardo:)
Soluzione
In realtà, non usa una trasformata di Fourier per fare questo.
Splitting qualsiasi segnale audio in bassi, medi e alti di solito è fatto utilizzando i filtri. Un è un dispositivo di elaborazione del segnale che attenua certi intervalli di frequenza. I filtri possono essere costruire digitalmente o elettricamente. Ad esempio, vengono utilizzati nei sistemi di crossover audio negli altoparlanti.
Per ottenere la parte di basso a bassa frequenza è necessario utilizzare un filtro passa-basso. Filtro passa basso filtrare le alte frequenze. Essi sono chiamati anche i filtri 'taglio alto.
Per ottenere la metà parte delle frequenze medie si dovrebbe utilizzare un filtro passa-banda. filtri passa-banda del filtro entrambe le frequenze alte e basse. Essi sono anche chiamati 'bell-filtri.
Per ottenere la parte acuti ad alta frequenza è necessario utilizzare un filtro passa-alto. filtri passa-alto filtrare eventuali basse frequenze. Essi sono chiamati anche filtri 'low-cut'.
In realtà, si potrebbe anche usare solo il passa-alto e filtro passa-basso. Se si sottrae entrambi i segnali filtrati dal segnale originale, il risultato sarebbe un segnale filtrato passa-banda. Ciò consente di risparmiare un filtro.
Ogni filtro avrà una frequenza di soglia. La frequenza soglia è una particolare frequenza, da cui il filtro deve iniziare filtraggio. A seconda l'ordine del filtro, il segnale verrà attenuato di 6 dB / oct (1 ° ordine), 12 dB / oct (2 ° ordine), 18 dB / oct (3 ° ordine), ecc per l'applicazione, un disegno di 2 ° ordine è probabilmente bene.
Nota che filtra nel caos generale, con il segnale in qualche modo e maggiore è l'ordine, il più udibile questo può ottenere. Tra l'altro, questo è fisica pura e vera per tutta l'elaborazione del segnale compreso trasformate di Fourier.
L'utilizzo di questi tre filtri è (può essere) equivale a fare una trasformata di Fourier con solo tre punti spettrali.
Altri suggerimenti
Il Fourier Transform , citato nella risposta selezionato alla domanda SO si punta, ti dà lo "spettro" -. una grande collezione di valori che danno l'intensità del suono in ciascuna delle varie gamme / fette di frequenze (espresse, ad esempio, in Hertz)
Come tradurre (diciamo) un migliaio di intensità (uno per ogni fetta 10-Hertz dello spettro, diciamo) in soli tre numeri, come si desidera, è, naturalmente, un bel problema euristica - per esempio si potrebbe semplicemente decidere che varia di frequenze corrispondono a "bassi" e "alti", con tutto nel mezzo essere "metà", e calcolare le intensità medie in ciascuna. Per quel che vale, ritengo una convenzione comune per "basso" è fino a 250Hz, per 6KHz "alti" o superiore (in-between essere il "midrange"), cfr esempio questa pagina - ma è piuttosto una convenzione arbitraria, così, "scegli il tuo veleno" ! -)
Una volta che hai relativi livelli ti consigliamo di normalizzare loro con rispetto gli uni agli altri e li scalare in modo appropriato a mentire nella vostra gamma desiderata (presumibilmente su una scala logaritmica, perché questo è funziona udito come umani ; -).