ฉันกำลังทำงานในโปรเจ็กต์ Android ที่ฉันใช้ FFT ในการประมวลผลข้อมูลมาตรความเร่ง และฉันมีปัญหาในการทำความเข้าใจว่าสิ่งเหล่านี้ทำงานอย่างไร ฉันใช้ไลบรารี jTransform โดย Piotr Wendykier ด้วยวิธีต่อไปนี้:
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);
}
ผลลัพธ์คืออาร์เรย์ที่มีข้อมูลต่อไปนี้
ฉันมีปัญหาในการตีความข้อมูลเอาต์พุต..ข้อมูลมาจากช่วงเวลา 10 วินาที และความถี่ในการสุ่มตัวอย่างคือ 50Hz..ขณะจับภาพ ฉันกำลังเลื่อนโทรศัพท์ขึ้นและลง cca ทุกๆ 3/4 วินาทีในมือ ดังนั้นจึงเป็นไปได้ ค่าสุดขีดซึ่งอยู่ที่ประมาณ x 16 อาจเป็นคาบขององค์ประกอบที่แข็งแกร่งที่สุดของสัญญาณได้หรือไม่? ฉันต้องได้ความถี่ของส่วนประกอบที่แรงที่สุดในสัญญาณ..