FFT和加速度计数据:为什么我得到这个输出?

时间:2012-08-17 13:47:23

标签: signal-processing accelerometer fft

我已经在StackOverflow上阅读了有关在加速度计数据上执行FFT的各种帖子,但这些都没有帮助我理解我的问题。

我正在以下列方式在我的加速度计data数组上执行this FFT实现:

int length = data.size();
double[] re = new double[256];
double[] im = new double[256];
for (int i = 0; i < length; i++) {
    input[i] = data[i];
}

FFT fft = new FFT(256);
fft.fft(re, im);

float outputData[] = new float[256];
for (int i = 0; i < 128; i++) {
    outputData[i] = (float) Math.sqrt(re[i] * re[i]
    + im[i] * im[i]);
}

我绘制了outputData(左,)的内容,并使用R对我的数据执行FFT(右)。 FFT

我在这里做错了什么?我使用相同的代码执行我在其他地方看到的FFT。

编辑:按照@PaulR的建议应用窗口函数,以及@BjornRoche(http://baumdevblog.blogspot.com.br/2010/11/butterworth-lowpass-filter-coefficients.html)提供的链接,我能够解决我的问题。解决方案几乎就是该链接中描述的内容。这是我的图表:http://imgur.com/wGs43

2 个答案:

答案 0 :(得分:3)

低频伪影可能是由于缺乏窗口造成的。尝试应用窗口函数。

整体转变可能是由于两种不同的FFT实现中的不同缩放因子 - 我的猜测是你看到24 dB的偏移,这相当于缩放的差异256倍。

答案 1 :(得分:-2)

因为左边的所有数据都高于0,所以对于频率分析,它是一个DC信号。所以在你的fft之后,它将DC信号抽象出来,它非常休。对于您的场景,您只需要切断直流信号,只需将信号保持在0 Hz(交流信号),这是有道理的。