Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的信号处理库?_Java_Signal Processing_Numerical Analysis - Fatal编程技术网

Java中的信号处理库?

Java中的信号处理库?,java,signal-processing,numerical-analysis,Java,Signal Processing,Numerical Analysis,我想计算时间序列的功率谱密度;做一些带通、低通和高通滤波;也许是其他一些基本的东西 有没有一个好的开源Java库可以做到这一点 我搜索了一些但没有成功(例如,在谷歌上搜索“功率谱密度java”或“信号处理java”,然后点击链接,查看Apache Commons、Sourceforge、java.net等) 有很多小程序、书籍、教程、商业产品等等,都不能满足我的需求 更新:我发现了傅里叶变换。这并没有实现功率谱密度、带通等功能,但它确实很重要。它看起来非常稀疏。尝试或,尽管我认为最后一个只是一个

我想计算时间序列的功率谱密度;做一些带通、低通和高通滤波;也许是其他一些基本的东西

有没有一个好的开源Java库可以做到这一点

我搜索了一些但没有成功(例如,在谷歌上搜索“功率谱密度java”或“信号处理java”,然后点击链接,查看Apache Commons、Sourceforge、java.net等)

有很多小程序、书籍、教程、商业产品等等,都不能满足我的需求


更新:我发现了傅里叶变换。这并没有实现功率谱密度、带通等功能,但它确实很重要。

它看起来非常稀疏。尝试或,尽管我认为最后一个只是一个JNI包装器

我看到了很多你说的小程序。我认为您可以为它们获取jar,并在其中使用类api。但是,由于缺乏文档,可能必须使用eclipse和jad进行反编译并弄清楚它们的功能。例如,试试源代码。

我找到了这本书和它的名字。您可以查看代码,看看它是否适合您的需要

你也可以退房


正如duffymo和basszero在评论中提到的,自JavaDSP发布以来,Java已经发生了一些变化,这可能会影响一些代码示例。特别是,(相对)新的可能会被证明是有用的。

我找到了另一个资源,尽管它不是一个库:。这只是对信号处理和傅里叶变换的基本讨论,还有一些Java示例。参见示例教程147814821486。不确定代码上的许可证是什么。

我的第一个建议是不要用Java实现DSP。我的第二个建议是自己用Java实现简单的DSP。


为什么不使用Java:

在过去的10多年里,我有很多编写DSP代码的经验。。。而且几乎没有一个DSP代码是用Java编写的。。。所以,请原谅我,当我在阅读有关某人想要在Java中实现DSP的文章时犹豫不决

如果您要做的是非平凡的DSP,那么就不应该使用Java。用Java实现DSP之所以如此痛苦,是因为所有好的DSP实现都使用低级内存管理技巧、指针(数量惊人的指针)、大型原始数据阵列等

为什么使用Java:

如果您正在做简单的DSP工作,请滚动您自己的Java实现。简单的DSP东西,如PSD和滤波,都相对容易实现(容易实现,但不会很快),因为有太多的实现示例和良好的在线记录理论

在我的例子中,我曾经在Java中实现过一个PSD函数,因为我在Java GUI中绘制PSD,所以最简单的方法是在Java中获得性能,在Java GUI中计算PSD,然后绘制它


如何实现PSD:

PSD通常只是以dB为单位显示的FFT的幅度。有许多来自学术、商业和开放源码的例子显示了如何以dB为单位计算FFT的幅度。例如输出,然后您只需要转换为幅值和dB。FFT之后的任何内容都应根据您的需要/需求进行定制


如何实现低通、带通滤波:

在我看来,最简单的实现(不是计算效率最高的)是使用FIR滤波器并进行时域卷积

卷积很容易实现,它是两个嵌套的for循环,网络上有数百万个示例代码


如果你对滤波器设计一无所知,FIR滤波器将是一个棘手的部分。最简单的方法是使用Matlab生成FIR滤波器,然后将系数复制到java中。我建议使用Matlab中的firpmord()和firpm()。在阻带中争取-30到-50 dB的衰减,在通带中争取3 dB的纹波。

我已经编写了一些Java DSP类的集合,例如IIR滤波器:


有人知道C/C++有类似的库吗?首先,这个问题是关于Java的,而不是C:)其次,FFTW看起来像是有FFT。那么带通、低通、高通滤波、功率谱密度等呢?显然,FFT构成了基础,但并不是这些操作的高级接口。现在提出这个问题已经六年了。我正在寻找一个java库,它可以用于数字信号处理(在我的例子中是音乐信号处理)供我学习@dfrankow您为您的任务找到java库了吗?或者你知道在你提出这个问题后引入了什么新的java库吗?我不明白为什么这个问题是“离题的”。这似乎是非常密切的关系,鉴于正在进行的评论,它对其他人也很重要。这个问题是否应该重新开放以获得新的答案?哇,这本书是1997年的经典之作。我不确定我会推荐它。信号处理的思想没有改变,但Java确实改变了。你认为哪些改变会对数字信号处理产生影响?@duffymo:从那时起,Java的唯一进步就是一些并发原语(因为dsp要求多线程)。通常,dsp是基于基元阵列的。我是w/Bill。对我们来说更重要的是,一本书不太可能有开源许可证,因此我们无法将其用于我们的努力。我很抱歉,这本书的源代码上有GPL许可证!谢谢裁判。老实说,我很感激他们。signalgo是“alpha(即根本没有测试!!)”jein没有我能找到的源代码。英特尔将不再是开源的。我不再致力于此,但从商业应用的数字配方开始是不合适的。ApacheCommons Math有一个FFT:.@dfrankow应该是一个更好的起点我想知道“不要在Java中这样做”这句话。Java有很好的方法来处理任何内存管理任务,包括