sim*_*dam 5 java android fft accelerometer
我正在研究一个Android项目,我正在使用FFT处理加速度计数据,我在理解这些东西是如何工作方面遇到了问题.我正在使用Piotr Wendykier的jTransform库,方法如下:
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);
}
Run Code Online (Sandbox Code Playgroud)
结果是一个包含以下数据的数组
.
我有解释输出数据的问题.数据来自10秒长的间隔,采样频率是50Hz ..虽然我手里拿着手机每隔3/4秒上下移动手机,所以可能关于x值16的极值可能是信号中最强分量的周期?我需要获得信号中最强组件的频率.
由每个fft结果箱表示的频率是二进制数乘以采样率除以fft的长度(用Sinc函数进行卷积,得到非零宽度,得到一点技术).如果你的采样率是50赫兹,你的fft长度是fft长度是512,那么fft结果的bin 16代表大约1.6 Hz,接近0.7秒的周期.
bin 0(DC)处的尖峰可能代表加速度计上的非零重力.
| 归档时间: |
|
| 查看次数: |
2233 次 |
| 最近记录: |