我目前正处于实习阶段,我的老板希望我能够在本周末用java编写准备好FFT。了解FFT输出
现在我已经得到了来自普林斯顿大学的FFT代码:http://introcs.cs.princeton.edu/java/97data/FFT.java
我实现和扩展这个代码在我的项目与我现在能先读一个信号的二进制输入,然后在这个采样值上处理FFT,然后提供幅度。
现在我来找我的问题。 我输入了我生成的以下值,并使用final double d = Math.sin(i);
并循环了8次(这仅用于测试目的,下周我将不得不输入实际值)。
0.0
0.8414709848078965
0.9092974268256817
0.1411200080598672
-0.7568024953079282
-0.9589242746631385
-0.27941549819892586
0.6569865987187891
因此这些值来自纯正弦波(我不知道正确的英文单词,但与纯正弦波我的意思是可以精确到一个频率,例如50赫兹正弦)。
的输出现在是
0.553732750242242
2.3946469565385193 - 2.0970118573701813i
-1.386684423934684 + 0.9155598966338983i
-0.8810419659226628 + 0.28041399267903344i
-0.8075738836045867
-0.8810419659226628 - 0.28041399267903366i
-1.386684423934684 - 0.9155598966338983i
2.394646956538519 + 2.0970118573701817i
和输出
0.553732750242242
3.183047718211326
1.6616689248786416
0.9245901540720989
0.8075738836045867
0.924590154072099
1.6616689248786416
3.183047718211326
现在的大小实际上我预期的输出值在每个频率样本为0点,直到我到达频率的纯正弦由输出应该> 0(例如50Hz)控制。至少这是我的老板在给我这个任务时所期望的。
总结: 所以这就是我正在努力。我读过另一个线索,询问有关类似的问题,但对我来说还有一些未解决的问题。我该如何处理给定的输出数据?我如何找到最频繁的频率?
我真的可能需要一些帮助或解释我的思维错误。
感谢收听...
你好侯赛因,非常感谢,这非常有帮助! – Winterwurst
@Winterwurst如果峰值不在您预见的位置,您可以尝试插值以精确调整两个整数之间的峰值点。 –