当前位置:  开发笔记 > 编程语言 > 正文

Java中的信号处理库?

如何解决《Java中的信号处理库?》经验,为你挑选了3个好方法。

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

有没有一个很好的开源Java库来做到这一点?

我有点没有成功(例如,谷歌搜索"功率谱密度java"或"信号处理java"和点击链接,查看Apache Commons,Sourceforge,java.net等).

有许多小程序,书籍,教程,商业产品等,不符合我的需求.

更新:我找到了 org.apache.commons.math.transform进行傅立叶变换.这不实现功率谱密度,带通等,但它是一些东西.



1> Trevor Boyd ..:

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


为什么不使用Java:

在过去的10多年里,我有很多编写DSP代码的经验......而且几乎所有的DSP代码都不是用Java编写的......所以当我不愿意阅读有关想要用Java实现DSP的人时,请原谅我.

如果您要做非平凡的DSP,那么您不应该使用Java.DSP在Java中实现是如此痛苦的原因是因为所有优秀的DSP实现都使用低级内存管理技巧,指针(指针数量疯狂),大型原始数据数组等.

为什么要使用Java:

如果您正在进行简单的DSP操作,请使用自己的Java实现.像PSD和过滤这样的简单DSP事件都相对容易实现(易于实现,但它们不会很快),因为有太多的实现示例和在线记录的理论.

在我的情况下,我在Java中实现了一个PSD函数,因为我在Java GUI中绘制了PSD,因此最简单的方法是在Java中获取性能并在Java GUI中计算PSD然后绘制它.


如何实现PSD:

PSD通常只是以dB为单位显示的FFT幅度.学术,商业和开源中有很多例子说明如何以dB为单位计算FFT的幅度.例如,Apache有一个Java实现,它为您提供FFT输出,然后您只需要转换为幅度和dB.FFT之后的任何内容都应根据您的需要量身定制.


如何实现低通带通滤波:

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

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

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


我不再这样做了,但从Numerical Recipes开始商业应用程序是不合适的.Apache Commons Math有一个FFT:http://commons.apache.org/math/userguide/transform.html.

2> Bill the Liz..:

我找到了Java Digital Signal Processing这本书及其示例源代码.您可以查看代码以查看它是否符合您的需求.

您还可以查看DSP实验室.

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


我很抱歉,这本书的来源是GPL许可证!

3> Christian d'..:

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

Java DSP集合

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有