我需要一些帮助来理解DFT/FFT计算的输出。理解FFT输出
我是一名经验丰富的软件工程师,需要解释一些智能手机加速计读数,例如查找主要频率。不幸的是,我十五年前就读过大部分大学EE课程,但过去几天我一直在阅读DFT和FFT(显然没有多大用处)。
请不要回答“走EE课”。我实际上打算这样做,如果我的雇主将支付我。 :)
因此,这里是我的问题:
我在32赫兹捕获的信号。这里是我在Excel中绘制的32分的1秒样本。
然后我得到了一些FFT code用Java编写的哥伦比亚大学(以下建议在后的“Reliable and fast FFT in Java”后)。
该程序的输出如下。我相信它正在运行一个就地FFT,所以它在输入和输出上都重复使用相同的缓冲区。
Before:
Re: [0.887 1.645 2.005 1.069 1.069 0.69 1.046 1.847 0.808 0.617 0.792 1.384 1.782 0.925 0.751 0.858 0.915 1.006 0.985 0.97 1.075 1.183 1.408 1.575 1.556 1.282 1.06 1.061 1.283 1.701 1.101 0.702 ]
Im: [0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ]
After:
Re: [37.054 1.774 -1.075 1.451 -0.653 -0.253 -1.686 -3.602 0.226 0.374 -0.194 -0.312 -1.432 0.429 0.709 -0.085 0.0090 -0.085 0.709 0.429 -1.432 -0.312 -0.194 0.374 0.226 -3.602 -1.686 -0.253 -0.653 1.451 -1.075 1.774 ]
Im: [0.0 1.474 -0.238 -2.026 -0.22 -0.24 -5.009 -1.398 0.416 -1.251 -0.708 -0.713 0.851 1.882 0.379 0.021 0.0 -0.021 -0.379 -1.882 -0.851 0.713 0.708 1.251 -0.416 1.398 5.009 0.24 0.22 2.026 0.238 -1.474 ]
所以,在这一点上,我不能做出正面或反面的输出。我理解DFT概念,例如实部是组件余弦波的幅度,虚部是组件正弦波的幅度。我也可以按照此图从伟大的书“The Scientist and Engineer's Guide to Digital Signal Processing”:
所以我的具体问题是:
从FFT的输出,我怎么找到‘最发生频率’ ?这是我对加速度计数据分析的一部分。我应该读真实(余弦)还是虚构(正弦)数组?
我在时域有32点输入。 FFT的输出不应该是用于实数的16元素阵列和用于虚数的16元素阵列?为什么程序会给我32和32的实数和虚数阵列输出?
与前面的问题相关,我该如何解析输出数组中的索引?由于我输入了32个采样频率为32 Hz的样本,我的理解是,一个16元素的阵列输出应该使其指数均匀分布到1/2采样率(32 Hz),所以我理解每个元素数组表示(32 Hz * 1/2)/ 16 = 1 Hz?
为什么FFT输出值为负值?我认为这些值代表了正弦曲线的幅度。例如,对于频率为3的余弦波,Real [3] = -1.075的输出应该表示-1.075的振幅。对吗?幅度如何可能为负数?
您想从加速计读数中计算什么:速度,距离?加速度计读数的噪声遵循高斯分布,我看不出正弦波如何适应这种情况。 – Ali
应该删除java标记,因为它比通用语言更具通用性 – user3791372