我需要一些帮助来了解DFT / FFT计算的输出。
我是一位经验丰富的软件工程师,需要解释一些智能手机加速度计的读数,例如查找主频率。不幸的是,我15年前睡过大部分大学的EE课程,但最近几天我一直在阅读DFT和FFT(显然没有用)。
请不要回答“参加EE课程”。如果我的雇主付钱给我,我实际上打算这样做。:)
所以这是我的问题:
我已经捕获到32 Hz的信号。这是我在Excel中绘制的32分的1秒示例。
然后,我从哥伦比亚大学获得了一些用Java编写的FFT代码(遵循了“ Java中可靠而快速的FFT ”一文中的建议)。
该程序的输出如下。我相信它正在运行就地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的概念,例如,实部是分量余弦波的幅度,虚部是分量正弦波的幅度。我也可以从伟大的著作“数字信号处理科学家和工程师指南”中遵循以下图表:
所以我的具体问题是:
从FFT的输出中,如何找到“出现频率最高”?这是我对加速度计数据进行分析的一部分。我应该阅读实数(余弦)或虚数(正弦)数组吗?
我在时域中有一个32点输入。FFT的输出不应该是实数的16元素数组和虚数的16元素数组吗?为什么程序会给我大小均为32的实数和虚数数组输出?
与上一个问题相关,如何解析输出数组中的索引?给定我输入的以32 Hz采样的32个样本,我的理解是16个元素的数组输出的索引应均匀分布到最大采样率(32 Hz)的1/2,所以我理解每个元素都是正确的阵列的代表(32 Hz * 1/2)/ 16 = 1 Hz?
为什么FFT输出为负值?我认为这些值代表正弦波的振幅。例如,对于频率为3的余弦波,Real [3] = -1.075的输出应表示幅度为-1.075。振幅如何为负?