Ответ 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 дБ в полосе пропускания.