Библиотека обработки сигналов в Java?

Я хотел бы вычислить спектральную плотность мощности временных рядов; выполнять некоторые полосовые, нижние и верхние фильтры; возможно, некоторые другие основные вещи.

Есть ли хорошая библиотека Java с открытым исходным кодом для этого?

Я охотился немного без успеха (например, Googling "спектральная плотность мощности java" или "обработка сигналов java" и нажатие ссылок, просмотр в Apache Commons, Sourceforge, java.net и т.д.).

Есть много апплетов, книг, учебников, коммерческих продуктов и т.д., которые не соответствуют моим потребностям.

Обновить: я нашел org.apache.commons.math.transform для Преобразования Фурье. Это не реализует спектральную плотность мощности, полосу пропускания и т.д., Но это что-то.

Ответ 1

Мое первое предложение - не выполнять вашу реализацию DSP на Java. Моим вторым предложением было бы превратить ваши собственные простые реализации DSP самостоятельно в Java.


Почему бы не использовать Java:

У меня много опыта написания кода DSP в течение последних 10+ лет... и почти ни один из кода DSP в Java... так что простите меня, когда я колеблюсь, чтобы прочитать о ком-то, кто хочет реализовать DSP в Java.

Если вы собираетесь делать нетривиальный DSP, вы не должны использовать Java. Причина, по которой DSP настолько болезненна для реализации на Java, состоит в том, что все хорошие реализации DSP используют трюки управления памятью низкого уровня, указатели (сумасшедшие количества указателей), большие массивы необработанных данных и т.д.

Зачем использовать Java:

Если вы делаете простые вещи DSP, сверните свою собственную реализацию Java. Простые функции DSP, такие как PSD и фильтрация, относительно просты в реализации (простая реализация, но они не будут быстрыми), потому что существует много примеров реализации и хорошо документированная теория онлайн.

В моем случае я реализовал функцию PSD в Java один раз, потому что я рисовал PSD в графическом интерфейсе Java, поэтому было проще всего просто получить удар производительности в Java и вычислить PSD в графическом интерфейсе java, а затем построить его.


Как реализовать PSD:

PSD обычно представляет собой величину FFT, отображаемую в дБ. Существует множество примеров из академических, коммерческих и открытых источников, показывающих, как вычислить величину БПФ в дБ. Например, у Apache есть реализация Java, которая дает вам выход FFT, а затем вам просто нужно преобразовать значение в величину и дБ. Все, что нужно после FFT, должно быть адаптировано к тому, что вам нужно/нужно.


Как реализовать фильтрацию нижних частот, полосовую фильтрацию:

Простейшая реализация (не самая эффективная с точки зрения вычислений), на мой взгляд, должна была бы использовать КИХ-фильтр и выполнять свертку во временной области.

Свертка очень проста в реализации, это два вложенных цикла и есть буквально миллионы примеров кода в сети.

Фильтр FIR будет сложной частью, если вы ничего не знаете о дизайне фильтра. Самый простой способ - использовать Matlab для создания вашего FIR-фильтра, а затем скопировать коэффициенты в java. Я предлагаю использовать firpmord() и firpm() из Matlab. Стреляйте для -30 в -50 ослабление дБ в полосе задержек и пульсации 3 дБ в полосе пропускания.

Ответ 2

Я написал коллекцию некоторых классов Java DSP, например. Фильтры IIR:

Коллекция Java DSP

Ответ 3

Я нашел книгу Java Digital Signal Processing и ее пример исходного кода. Вы можете просмотреть код, чтобы узнать, соответствует ли он вашим потребностям.

Вы также можете проверить DSP Laboratory.

Как упоминалось в комментариях duffymo и basszero, с момента публикации Java DSP произошли изменения в Java, которые могут повлиять на некоторые примеры кода. В частности, может оказаться полезным (относительно) новый Concurrency пакет Utilties.

Ответ 4

Он выглядит довольно редким. Попробуйте Signalgo или jein или Библиотека обработки сигналов Intel, хотя я думаю, что последняя является просто оболочкой JNI.

Я видел много тех апплетов, о которых вы говорили. Я думаю, вы сможете получить JAR для них и использовать API классов внутри. Возможно, придется использовать eclipse и jad для декомпиляции и выяснить, что они делают, из-за отсутствия документации. Попробуйте использовать источник эту страницу.

Ответ 5

Я нашел еще один ресурс, хотя это не библиотека: http://www.dickbaldwin.com/tocdsp.htm. Это просто базовое обсуждение обработки сигналов и преобразования Фурье с некоторыми примерами Java. См. Например, учебники 1478, 1482, 1486. ​​Не знаете, что такое лицензия на код.