Ich versuche, ein Gesangsspiel zu implementieren, das den rohen Mikrofoneingang analysiert und dem Spieler sagt, wie gut er singt. Das muss in Echtzeit erfolgen.
Ich bin auf viele Threads gestoßen, die die gleiche Frage gestellt haben, aber ich bin immer noch nicht damit fertig, wahrscheinlich aufgrund meiner mangelnden Erfahrung auf dem Gebiet und des geringen mathematischen Hintergrunds. Ich habe einen Algorithmus implementiert, der auf dem Artikel der DSPDimension-Website Pitch Shift basiert: http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/
Ich extrahiere die wahre Frequenz und Größe, wie im Artikel erklärt, aber ich weiß nicht, ob ich damit die Grundfrequenz finde. Ich habe versucht, den Bin mit der größten Größe zu erhalten, aber das liefert mir nur die richtigen Ergebnisse für Signale mit höherer Tonhöhe. Es spielt keine Rolle, welchen Überabtastungsfaktor ich verwende. Ich erhalte immer noch schlechte Daten für Signale mit niedriger Frequenz. Ist dieser Ansatz völlig falsch oder bin ich auf dem richtigen Weg, vermisse aber nur etwas?
Danke im Voraus,
EDIT: Ich habe vergessen zu erwähnen, dass ich nur an der Tonhöhenklasse interessiert bin, daher ist es in Ordnung, wenn das Fundament fehlt, aber ich habe einen starken Oberton im Sample.
EDIT2: Vielen Dank an alle, ich habe gerade eine Version des Algorithmus fertiggestellt, die wie ein Zauber funktioniert. Das Problem der Schätzung der niedrigen Tonhöhe war auf meinen Eingangstest zurückzuführen. Als ich die Note gesungen habe, stimmte sie richtig überein. Außerdem betrachte ich jetzt alle Harmonischen, nicht nur den höchsten Peak.
quelle
Antworten:
Das ist , weil die Harmonischen sind größer als die von grundlegender Bedeutung. Zeichnen Sie Ihr Spektrum und Sie werden sehen. Eine bessere Methode, um das wahre Fundament zu finden, ist die Autokorrelation. Dann "schieben" Sie die Wellenform an sich vorbei und finden Verzögerungen, bei denen die Wellenform mit sich selbst übereinstimmt.
http://www.phon.ucl.ac.uk/courses/spsci/matlab/lect10.html
Möchten Sie wirklich, dass sie die genaue Note singen, oder ist es in Ordnung, wenn sie je nach Sprachregister eine Oktave darüber oder darunter singen?
quelle
Ja, die Verwendung eines Spitzenfrequenzschätzers für die Tonhöhe ist falsch. Die Tonhöhe ist ein psychoakustisches Phänomen, daher unterscheidet sich die Tonhöhenerkennung oder -schätzung von der Frequenzschätzung. In früheren Antworten auf ähnliche Fragen wurden hier zahlreiche Methoden zur Tonhöhenschätzung angegeben. Es gibt mehr als 1 zur Auswahl.
Hier ist eine: /programming/4227420/matlab-missing-fundamental-from-an-fft/4231322#4231322 und eine andere: Tipps zur Verbesserung der Tonhöhenerkennung
HINZUGEFÜGT # 1: Ähnliche Fragen werden so oft gestellt, dass ich einen längeren Blog-Beitrag zum Thema verfasst habe: http://www.musingpaw.com/2012/04/musical-pitch-is-not-just-fft- frequenz.html
quelle