Beh, non è banale neanche per me ma è così che lo capisco. Se ho semplificato, è puramente a mio vantaggio, non intendo essere paternalistico.
Azzeramento il risultato corrispondente alla frequenza di Nyquist:
sto andando supporre che stiamo calcolando la FFT in avanti di 1024 campioni di ingresso. Con l'input 44100hz questo è solitamente vero nel mio caso (ma non è quello che AurioTouch sta facendo, che trovo un po 'strano, ma non sono un esperto). È più facile per me capire con valori specifici.
Dato campioni 1024 (n) di ingresso, disposti secondo necessità (anche indici primi indici poi dispari {a [0], in [2], in [4], ..., in 1, in [3], in [5], ...}) (utilizzare vDSP_ctoz()
ordinare l'input)
L'uscita della FFT 1024 campioni (n) di ingresso è ((n/2) + 1) valori complessi. cioè 513 componenti reali e 513 elementi immaginari, per un totale di valori.
Tuttavia, immaginario [0] e immaginario [512] (n/2) sono sempre, necessariamente, nullo. Quindi, mettendo reale [512] (la componente reale del bidone frequenza di Nyquist) a immaginario [0] e dimenticando immaginario [512] - che è sempre pari a zero e può essere dedotto, i risultati sono confezionati in un (n) buffer di lunghezza.
Pertanto, affinché i risultati restituiti siano validi, è necessario impostare almeno lo immaginario [0] su zero. Se avete bisogno di tutti i ((n/2) +1) bin di frequenza è necessario aggiungere un altro valore complesso al risultato e metterlo quindi ..
unpackedVal = imaginary[0]
real[512]=unpackedVal, imaginary[512]=0
imaginary[0] = 0
In AurioTouch dovrei sempre hanno appena don' t fastidio.n/2 risultati è ovviamente più conveniente per lavorare con e difficilmente si può dire dal Visualizer: - "Oh guarda, che manca una magnitudine alla frequenza di Nyquist"
The UsingFourierTransforms docs explain the packing
NB i valori specifici 1024, 513, 512, ecc. Sono esempi non dei valori effettivi di n, (n/2) +1, n/2 di AurioTouch.
Essi scalare tutto dalla -128db
Non proprio, l'intervallo dei valori di uscita è rispetto al numero di campioni di ingresso quindi deve essere normalizzato. La scala è 1.0/(2 * inNumberFrames).
Dopo il ridimensionamento dell'intervallo è -1,0 -> +1,0. La grandezza del vettore complesso viene quindi portata (fase viene ignorato) dando un valore scalare per ciascun intervallo di frequenza tra 0 e 1,0
Questo valore viene quindi interpretato come un valore in decibel tra -128 e 0
Il disegno ... +80/64. ... * 120 ... ... non sono sicuro. Potrei sbagliarmi completamente o potrebbe essere ... una licenza artistica?
Grazie mille per aver trovato il tempo di spiegarmelo. –