Ich arbeite an einer Anwendung, die Audiosignale abtastet und Echtzeitverarbeitung (FFT und harmonisches Produktspektrum) dieser Daten benötigt.Java-Frequenzanalyse-Leistung
Ich brauche eine Abtastrate von 44100Hz und brauche eine Frequenzauflösung von 0,5 Hz, was bedeutet, dass ich 88200 Proben vor der FFT brauche. Dies dauert ca. 2 Sekunden, da die Abtastrate doppelt so groß ist. Nach dem ersten Beispiel verbessere ich jedoch die Dinge erheblich, indem ich einen Ringpuffer für die Abtastung verwende und ab diesem Zeitpunkt nur noch halb so viele Abtastungen lese.
Leider ist die Leistung immer noch recht niedrig und es gibt ziemlich viel Latenz. Dies ist ein großes Problem, da die Anwendung zeitnah auf die Eingabe reagieren muss.
Hat jemand irgendwelche Vorschläge, wie ich die Leistung verbessern könnte? Ich denke, das Hauptproblem liegt in der Anforderung für große Samples und es wäre gut, wenn es eine Möglichkeit gäbe, wie viel Audio gelesen werden könnte, während die Genauigkeit beibehalten wird. Würde Threading hier vielleicht helfen?
EDIT
Wenn es hilft zu wissen, versuche ich in Echtzeit F0 Schätzung von E-Gitarre Eingang zu tun, zusammen für Akkordanpassung mit mehreren F0-Schätzung. Ich habe Methoden, dies zu tun, die funktionieren und ziemlich genau sind, aber es ist für ein Uni-Projekt und ich habe nicht wirklich genug Zeit, um zu weit in andere Methoden als die FFT zu schauen. Wirklich, ich hoffe nur auf eine Art, den Probenahmeprozess zu beschleunigen.
Ist es möglich, das Nebenläufigkeitsniveau zu verbessern? Für z.B. Teile die Datei in kleinere Stücke (für einen Start 2 Stücke) und führe das Muster unter verschiedenen Themen durch? Wenn Sie nicht von der Hardware abhängig sind (CPU-gesteuert und nicht Soundkarten-gesteuert), kann dieser "Divide and Conquer" -Ansatz helfen. – questzen