1

我在 StackOverflow 上阅读了关于对加速度计数据执行 FFT 的各种帖子,但没有一篇文章能帮助我理解我的问题。

我正在通过以下方式在我的加速度计阵列上执行FFT 实现:data

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。

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

4

2 回答 2

3

低频伪影可能是由于缺少窗口。尝试应用窗口函数。

总体偏移可能是由于两种不同的 FFT 实现中的不同比例因子造成的——我的猜测是你看到了 24 dB 的偏移,这对应于比例差异为 256 倍。

于 2012-08-17T15:42:41.143 回答
-2

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

于 2017-09-14T13:09:42.967 回答