Domanda

Ho scritto alcuni semplici algoritmi di elaborazione audio in Matlab che utilizzerò per un'applicazione Android. Sto avendo problemi a tradurre l'implementazione FFT a Java.

Sto cercando di utilizzare la versione Java di fftptack , che è consideratamente efficiente, ma è Anche un po 'criptico per me, forse perché la mia mancanza di un'azienda afferra la FFT in generale.

Ho semplicemente un doppio array da cui voglio produrre una corrispondente array di numeri complessi che rappresentano il FFT. L'unico calcolo che farò sul FFT sta prendendo il valore assoluto dei suoi elementi.

Per l'amor di chiarezza, ecco il codice MATLAB essenziale che vorrei replicare utilizzando Java FFTPtack:

X = fft(myDoubleArray);
abs(X[i]);
.

Mi aspetto che questo sia piuttosto semplice, ma non riesco a identificare i punti di ingresso nel fftpack.


.

Risolto:

La risposta qui sotto da Lutzl funziona, ma la creazione di un oggetto complesso1D non è in realtà inutile poiché FFTPTack supporta un doppio array come ingresso:

RealDoubleFFT rdfft = new RealDoubleFFT(myArray.length);
rdfft.ft(myArray);
.

È stato utile?

Soluzione

Lettura da Sourceforge JFFTPack Repository

Si inizializza un nuovo oggetto FFT tramite

fft = new ComplexDoubleFFT(N);
.

Quindi si utilizza la trasformata in avanti dell'oggetto FFT con

Complex1D X;
X.x=new double[N];
X.y=new double[N];
for(k=0;k<N;k++) X.x[k]=x[k];

fft.ft(X);
.

e può quindi accedere ai valori assoluti come

x=X.x[k]; y=X.y[k]; a=Math.sqrt(x*x+y*y);
.

facoltativamente dividere da N per normalizzare la FFT.

Aggiungi dichiarazioni variabili appropriate.


.

Si applicano le convenzioni usuali, se il segnale viene campionato con frequenza di campionamento FS, la voce X. (XY) [K] rappresenta il componente di frequenza su K * FS / N per K= N / 2 a N-1. < / P >.


.

Potresti voler cercare un'implementazione FFT diversa e supportata meglio che viene eseguita in pura Java, non è così complicata implementare il FFT per le lunghezze diadici. L'unica complicazione arriva quando si implementa la trasformazione in posizione per ottenere l'ultimo fattore di velocità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top