저는 오디오를 샘플링하고이 데이터의 실시간 처리 (FFT 및 고조파 스펙트럼)를 수행해야하는 애플리케이션을 개발 중입니다.Java 주파수 분석 성능
44100Hz의 샘플링 속도를 사용해야하고 0.5Hz의 주파수 해상도가 필요합니다. 즉, 프리 FFT 88200 샘플이 필요합니다. 샘플링 속도가 두 배이기 때문에 캡처하는 데 약 2 초가 걸립니다. 그러나 첫 번째 샘플 이후 샘플링을 위해 원형 버퍼를 사용하여 작업량을 크게 향상시키고 그 후 절반 정도의 샘플을 읽습니다.
아쉽게도 성능은 여전히 낮으며 지연 시간이 상당히 있습니다. 애플리케이션이 적시에 입력에 응답해야하므로 큰 문제입니다.
성능 향상 방법에 대한 제안 사항이 있습니까? 나는 주요 문제가 큰 샘플에 대한 요구 사항에 있다고 생각하며 동일한 정확도를 유지하면서 오디오를 얼마나 읽었는지 줄일 수있는 방법이 있다면 좋을 것입니다. 여기 스레딩이 도움이 될까요?
가 알고 도움이된다면 편집, 나는 코드 매칭을위한 여러 F0 추정과 함께, 일렉트릭 기타 입력에서 실시간 F0 추정을 위해 노력하고 있어요. 나는이 작업을 수행하는 방법이 있고 꽤 정확하지만 uni 프로젝트를위한 것이므로 FFT보다 다른 방법을 너무 많이 고려하지는 않습니다. 실제로 샘플링 프로세스의 속도를 높이기위한 몇 가지 방법이 필요합니다.
동시성 수준을 향상시킬 수 있습니까? 예 : 파일을 작은 청크 (시작 2 청크)로 분할하고 다른 스레드에서 샘플을 실행하십시오. 하드웨어에 의존하지 않는다면 (CPU 구동 및 사운드 카드 구동이 아닌)이 분할 및 정복 방식이 도움이 될 것으로 생각합니다. – questzen