Java中的傅里叶变换即时计算

4

我希望用Java编写一个程序,使用快速傅里叶变换。

该程序每5毫秒从传感器读取数据,并根据过去5秒的数据,在每200毫秒做些什么。

是否有一个很好的Java库可以提供一种方法进行傅里叶变换,而不需要每次重新计算全部5秒的数据?


如果数据是动态的,您会希望重新计算傅里叶变换。您可以让程序等待195毫秒,然后开始收集傅里叶变换的数据,以便在200毫秒后的最后5毫秒内完成。 - MrFox
我不是该领域的专家,但从我对FFT的理解来看,我认为增量方法是不可能的。FFT相对较快 - 你知道在滑动窗口上重新计算FFT并不够快吗? - mdma
3
他们不是说过早优化是万恶之源吗 ;) 也许我应该先用标准FFT实现它。 - Christian
1个回答

3
硬实时问题不是Java的适当应用。有太多变量,如垃圾收集和线程不能保证在给定时间间隔内发生,这使得这种应用不可能。如果接受足够接近,则可以使用它。您的软件性能(就时间而言)也取决于您正在使用的操作系统和硬件以及在该计算机上运行的其他程序。
有一种Real Time Java,它确实具有我上面提到的问题的特殊API。您没有表明您正在使用它。它在很多方面也与普通的Java不同。

我需要Java,因为它必须在Android上运行,并且程序需要大量的API调用。 - Christian
@Christian - 你的时间表有多紧?如果你加上一个Android标签来帮助指导答案,那也会很有帮助。 - Romain Hippeau
+1 @Romain Hippeau:非常好的回答,感谢您提供有关RTJS的提示。 - bguiz
多快?正如我在问题中所写的,每5 ms读取一次,相当于200Hz。 - Christian
@Christian,您并没有说明应用程序的目的,或者除了计算一些波的变换之外,它将使用这些输入做什么。我想说的是,我的回答只是提醒您可能无法保证按时完成进度,如果这样会有多糟糕呢? - Romain Hippeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接