【问题标题】:Converting time domain to frequency domain in Java [closed]在Java中将时域转换为频域[关闭]
【发布时间】:2014-08-29 11:28:46
【问题描述】:

我有 2 个包含时间和电压的数组。我想在 Java 中将时域转换为频域。我想使用 FFT。如果有任何我可以使用的开源库,请指出我。我做了一项研究,发现很少有算法,但他们要求实部和虚部。如果有人对此有所了解,请告诉我如何在我的上下文中使用它。

Code I have found so far

【问题讨论】:

  • 是的,你想要 FFT,虽然我不熟悉 Java 可用的包来推荐一个。 “实数”和“虚数”值是 FFT 的“频域”结果的“一半”,实际上给出了信号“相位”的信息。但如果我想得远不止这些,我的脑袋就会爆炸。
  • 在您不需要/不需要相位信息的情况下,通常将实部和虚部值组合成 RMS(均方根)值——实部平方根加上虚部平方。
  • 另请注意,通常会多次运行 FFT,对于音频可能每 0.1 秒运行一次。这给出了频谱随时间变化的视图。
  • 请注意,您的样本需要在时间上均匀分布 - 如果您的时间间隔不是恒定的,那么您不能使用普通的 FFT。

标签: java fft


【解决方案1】:

这是一个库:

http://www.fftw.org/download.html

您还可以将 R 与 Java 一起使用。请参阅此链接:

Java-R integration?

如果您不熟悉 R,请查看他们的主页 r-project dot org(我无法发布更多链接)

虽然我没有检查您链接到的实现,但您应该能够通过为虚部提供 0 来使用该实现。在这种情况下,您将“前进”,即将 DIRECT 设置为从时域到频域的真正转换。该函数将返回一个数组,其中包含偶数座位频率的实部,奇数座位的虚部。

【讨论】:

  • 感谢您的详细信息。这真的很有帮助。所以我可以使用偶数座位作为我的数组,因为我提供了虚部为 0。我说的对吗?
  • 你可以这样使用:double[] your_real_values = new double[sample_size]; double[] dummy_img_values = new double[sample_size]; // 使用正确的值填充 your_real_values 数组 Arrays.fill(dummy_img_values,0.0);双[] fft_vals = FFTbase.fft(your_real_values,dummy_img_values,true);返回数组的大小为 2*sample_size 并且 fft_vals[i] 包含频率的实部,如果 i 甚至是 img 部分。
猜你喜欢
  • 2012-12-11
  • 2020-10-11
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多