Sto lavorando a un progetto Android in cui sto utilizzando FFT per elaborare i dati dell'accelerometro e ho problemi a capire come funzionano effettivamente queste cose. Sto usando biblioteca jTransform di Piotr Wendykier nel seguente modo:Interpretazione FFT
int length = vectors.length;
float[] input = new float[length*2];
for(int i=0;i<length;i++){
input[i]=vectors[i];
}
FloatFFT_1D fftlib = new FloatFFT_1D(length);
fftlib.complexForward(input);
float outputData[] = new float[(input.length+1)/2];
if(input.length%2==0){
for(int i = 0; i < length/2; i++){
outputData[i]= (float) Math.sqrt((Math.pow(input[2*i],2))+(Math.pow(input[2*(i)+1], 2)));
}
}else{
for(int i = 0; i < length/2+1; i++){
outputData[i]= (float) Math.sqrt((Math.pow(input[2*i],2))+(Math.pow(input[2*i+1], 2)));
}
}
List<Float> output = new ArrayList<Float>();
for (float f : outputData) {
output.add(f);
}
il risultato è una matrice con i seguenti dati .
Ho problemi con l'interpretazione dei dati di uscita ... I dati sono da 10 secondi di intervallo e la frequenza di campionamento è 50 Hz. Mentre catturavo stavo muovendo il telefono su e giù cca ogni 3/4 secondi nella mia mano , quindi è possibile che l'estremo che è circa x il valore 16 potrebbe essere il periodo del componente più forte del segnale? devo avere la frequenza della componente più forte del segnale ..
La gravità non ha alcun effetto su un accelerometro ... Il picco a CC è probabile che sia semplicemente un errore di uscita sul sensore o anche semplicemente che l'integrale dell'accelerazione del dispositivo sulla finestra di misurazione non sia zero (in altre parole , ci fu un netto cambio di velocità). –
@Oli: interessante. L'accelerometro sul mio iPhone steso sulla scrivania riporta un costante -1 sull'asse Z. La direzione del -1 è il modo in cui viene determinato l'orientamento del dispositivo. Android è diverso? – hotpaw2
Hmm, non so nulla dei sensori usati nei telefoni, quindi ritiro la mia precedente affermazione! Tuttavia, troverei il nome "accelerometro" un po 'fuorviante se fosse stato progettato per riportare valori diversi da zero quando il dispositivo era fermo. –