Я работаю над приложением, которое воспроизводит аудио и требует обработки в реальном времени (БПФ и спектр гармонических продуктов) этих данных.Производительность анализа частоты Java
Мне нужно использовать частоту дискретизации 44100 Гц и требуется частотное разрешение 0,5 Гц, то есть мне нужно 88200 выборок pre-FFT. Это занимает около 2 секунд для захвата, так как в два раза больше частоты дискретизации; однако после первого образца я значительно улучшаю ситуацию, используя круговой буфер для выборки и читаю только половину от количества выборок.
К сожалению, производительность по-прежнему довольно низкая, и есть довольно много задержек. Это большая проблема, так как приложение должно своевременно реагировать на ввод, поскольку это происходит.
Есть ли у кого-нибудь предложения, как я могу улучшить производительность этого? Я думаю, что основная проблема заключается в требовании для больших образцов, и было бы хорошо, если бы я мог уменьшить количество звука, прочитанного при сохранении той же точности. Может быть, это поможет?
EDIT
Если это помогает знать, что я пытаюсь сделать оценку F0 в режиме реального времени от электрического гитарного входа, наряду с оценкой многократным F0 для согласования аккордов. У меня есть способы сделать это, чтобы работать и быть довольно точным, но это для проекта uni, и у меня нет достаточно времени, чтобы взглянуть слишком далеко на другие методы, кроме FFT. На самом деле, я просто надеюсь на какой-то способ ускорить процесс отбора проб.
Возможно ли улучшить уровень параллелизма? Напр. разделите файл на более мелкие куски (для запуска 2 куска) и запустите образец под разными потоками? Если у вас нет зависимости от аппаратного обеспечения (управляемая процессором и не звуковой картой), я думаю, что этот подход с разделением и покорением может помочь. – questzen