dft java语言_java-了解FFT输出

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

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

请不要回答“参加EE课程”。 我实际上正在计划如果我的雇主付钱给我。:)

所以这是我的问题:

我已经捕获到32 Hz的信号。 这是我在Excel中绘制的32分的1秒示例。

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 Hz采样的32个样本,我的理解是16个元素的数组输出的索引应均匀分布到最大采样率(32 Hz)的1/2,所以我理解每个元素都是正确的 阵列的代表(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、付费专栏及课程。

余额充值