java fft_java - 了解FFT输出

我需要一些帮助来理解DFT / FFT计算的输出。

我是一位经验丰富的软件工程师,需要解释一些智能手机加速度计读数,例如查找主要频率。 不幸的是,我在十五年前的大部分EE课程中都睡过了,但过去几天我一直在阅读DFT和FFT(显然没什么用)。

请不要回答“参加EE课程”。 如果我的雇主付钱给我,我实际上打算这样做。:)

所以这是我的问题:

我以32 Hz的频率捕获了一个信号。 这是一个32秒的1秒样本,我在Excel中绘制了它。

IHj1I.jpg

然后,我从哥伦比亚大学获得了一些用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概念,例如真实部分是分量余弦波的幅度,虚部是分量正弦波的幅度。 我也可以从伟大的书“科学家和工程师的数字信号处理指南”中按照这个图表:

MDI8J.jpg

所以我的具体问题是:

从FFT的输出,我如何找到“最常出现的频率”? 这是我对加速度计数据的分析的一部分。 我应该读真实(余弦)或虚构(正弦)数组吗?

我在时域中有32点输入。 FFT的输出不应该是用于实数的16元素数组和用于虚数的16元素数组吗? 为什么程序会给我32个大小的实数和虚数输出?

与上一个问题相关,如何解析输出数组中的索引? 鉴于我输入的32个样本以32 Hz采样,我的理解是16个元素的阵列输出应该使其索引均匀地扩展到采样率的1/2(32 Hz),所以我理解每个元素是正确的 数组表示(32 Hz * 1/2)/ 16 = 1 Hz?

为什么FFT输出具有负值? 我认为这些值代表了正弦曲线的幅度。 例如,对于频率为3的余弦波,Real [3] = -1.075的输出应表示-1.075的幅度。是吗? 幅度如何为负?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值