在Java中将时域转换为频域[关闭]

Posted

技术标签:

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

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

Code I have found so far

【问题讨论】:

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

以上是关于在Java中将时域转换为频域[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Python科学计算——复杂信号FFT

时域缩小2倍,频域怎么变

动态演示频域采样与时域周期延拓现象

时域频域时频域+三种频域变换的理解

Opencv 实现图像的离散傅里叶变换(DFT)卷积运算(相关滤波)

fft Matlab 振动时域到频率测量持续时间 = 60 s