Ich arbeite an einem Klavierstimmprogramm und ein Teil davon erfordert eine Echtzeit-Tonhöhenerkennung. Hier ist das Schema, das ich bisher habe und das bis zu einem gewissen Grad funktioniert, aber wahrscheinlich etwas verfeinert werden könnte.
Ich nehme Mono, 44,1 kHz, 16-Bit-PCM-Audio in Blöcken von 2 ^ 14 Samples auf. Ich kombiniere die letzten 4 Samples zu einem Puffer mit einer Länge von 2 ^ 16, wende ein Hann-Fenster auf den Puffer an und führe eine FFT darauf aus. Dann habe ich die Ergebnisse der FFT in zwei Auflösungen zusammengefasst. Zuerst werde ich in 200 Buckets aufgeteilt und dann den HPS-Pitch-Erkennungsalgorithmus mit dieser Granularität ausführen. Ich brauche hier keine genaue Frequenz, ich möchte nur näher kommen. Dann schaufele ich in 12000 Eimer, was mir eine Auflösung von 1 Cent von 10 Hz bis 10 kHz gibt. Sobald ich eine ungefähre Frequenz aus dem 200-Bin-HPS-Algorithmus kenne, suche ich in diesem Bereich des 12000-Bin-Falls nach einem Peak, um eine genauere Frequenz zu erhalten.
Dies scheint für die Noten in der Mitte der Tastatur in Ordnung zu sein. Was mit den tiefen Noten passiert, ist etwa 1,5 Sekunden Fehlidentifikation der Note als normalerweise der 2. oder 3. Teil der realen Note und dann eine korrekte Identifizierung der Note.
In allen Spektraldiagrammen, die ich erstellt habe, um zu sehen, was los ist, sind die Peaks breiter als erwartet. Diese Breite ist optisch etwas konsistent von 200 bis 12000 Behälter. Ich hätte erwartet, dass die Spitzen im Fall von 200 Behältern schmaler sind.
Die Signalverarbeitung ist für mich also neu, daher kann es Probleme geben, über die ich nicht nachdenken würde, aber in Bezug auf bestimmte Fragen sind die Stichprobengrößen für diese Aufgabe ausreichend? Ist Hann die richtige Wahl für ein Fenster? Sollte ich die Daten auch vor der FFT glätten? Wie empfindlich ist HPS gegenüber der Anzahl der Behälter? Ich dachte, wenn ich viele Bins verwenden würde, würde die Inharmonizität möglicherweise nicht dazu führen, dass Partials ihre Grundlagen mit dem einfachen Ansatz des HPS-Algorithmus, durch 2, 3, 4 usw. zu teilen, überlappen.
Antworten:
Ähnlich wie bei diesem Thread:
Gibt es einen Algorithmus zum Finden einer Frequenz ohne DFT oder FFT?
FFT ist keine besonders effiziente Methode zum Erstellen eines Tuners. Bessere (und billigere) Methoden umfassen Autokorrelation, phasengesteuerte verriegelte Schleifen und verzögerte verriegelte Schleifen usw.
Ein Beispiel ist die Verwendung der Verfolgung lokaler Maxima und Minima, um die Grundfrequenz grob zu verfeinern, und dann die Verwendung eines lokalen Oszillators und eines Phasenregelkreises, um diese Frequenz genau zu verfolgen. Dies kann eine sich bewegende Grundwelle während der Abstimmung schnell, kontinuierlich und mit großer Genauigkeit verfolgen, selbst wenn die Frequenz niedrig und die Grundwelle schwach ist.
quelle
Eine Suche nach "Piano Tuning Software" oder ähnlichen Elementen führt zu einer großen Anzahl von Treffern - einige gut, andere nicht so gut.
Jede Art von Musikinstrument hat einzigartige akustische / physikalische / Umwelteigenschaften, die sich auf den Klang auswirken. Und es kann kompliziert werden, wie Tausende von Büchern und Forschungsarbeiten vermuten lassen (z. B. Tonalität, Angriffs- / Zerfallseigenschaften, Inharmonizität usw.).
Die Tonhöhenerkennung ist selbst ein weitreichendes Feld. Das Folgende ist nur ein winziger Bruchteil dessen, was verfügbar ist: Übersichtsartikel 1 und Stapelaustauschpost und Übersichtsartikel 2
Was Ihre spezifischen Fragen betrifft: 1) Ihre Stichprobengröße scheint übertrieben zu sein - abhängig vom SNR und der Wellenformstabilität können Sie mit anderen Methoden mit weniger Zyklen eine hohe Frequenzgenauigkeit erzielen. (Einige Methoden basieren auf FFT). Und Sie erfassen möglicherweise Attack / Decay mit einer langen Abtastzeit. 2) Jedes andere Fenster als das rechteckige Fenster erweitert die Strahlbreite im Frequenzbereich, aber das bedeutet nicht, dass Sie keine verwenden sollten - Hann scheint mit HPS üblich zu sein Wie ich gesehen habe, 3) funktioniert HPS, wie im ersten Link oben erwähnt, bei niedrigen Frequenzen nicht sehr gut, und Inharmonizität wirkt sich auf die unteren Saiten aus. Was Ihre Gesamtmethode betrifft, kann ich, ohne viele Seiten schreiben zu müssen, nur sagen, dass ich es anders machen würde, abhängig vom Frequenzbereich und den Harmonischen, mit denen ich es zu tun hatte.
quelle
Eine andere Antwort schlägt PLL vor. Ich denke, Sie sollten sich von PLL fernhalten: Die meiste Literatur zur Tonhöhenverfolgung konzentriert sich auf Autokorrelation (Suche nach "YIN Pitch Tracking" - YIN ist ein moderner Tonhöhenverfolgungsalgorithmus, der auf Autokorrelation basiert) und FFT. Ich glaube, PLL ist besser geeignet, um winzige Frequenzschwankungen zu verfolgen , wie beim Radio.
Autokorrelation ist ein guter Anfang. Es ist schnell, effizient und genau. Es gibt jedoch Tricks, um die FFT sehr genau und schnell zu machen (die meisten Techniken, die die FFT verwenden, betrachten nur die Größe, aber Sie können auch die Phaseninformationen verwenden). Wenn Sie also mit FFTs vertraut sind, können Sie diese Technik auch verwenden.
Wenn Sie eine dieser Techniken verwenden, empfehle ich eine Vorfilterung mit einem Tiefpass, um die Harmonischen zu reduzieren und sich auf die Grundwelle zu konzentrieren. Mit der FFT können Sie stattdessen oder zusätzlich Tricks wie das Betrachten des ersten lokalen Maximums anwenden.
Dies könnte ein guter Ausgangspunkt für die Filterung sein und so weiter. Außerdem erhalten Sie einige Tipps, wie Sie zu viel Arbeit vermeiden können, und es wird auf den Quellcode verwiesen: http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html
Dieses Buch enthält Abschnitte, in denen sowohl YIN als auch FFT anhand von Phaseninformationen erläutert werden: http://www.amazon.com/DAFX-Digital-Udo-ouml-lzer/dp/0470665998
Schließlich müssen Sie die Besonderheiten von Klavieren verstehen. Ich bin mir nicht sicher, ob der Tuner selbst etwas spezielles WRT ausführen muss, z. B. gestrecktes Stimmen, oder ob dies der Person überlassen bleibt, die das Klavier stimmt, aber Sie müssen dieses Zeug zumindest verstehen. Ein anderes Poster schlug vor, verstimmte Harmonische zu betrachten, aber das Hauptproblem besteht darin, die Grundwelle zu identifizieren und abzustimmen, sodass die verstimmten Harmonischen keine Rolle spielen sollten, solange Sie die Grundwelle richtig identifizieren.
quelle
Die breiten Spitzen, die Sie sehen, sind möglicherweise das Ergebnis physikalischer Phänomene und kein Signalverarbeitungsartefakt. Im Allgemeinen stellen schmale Peaks in einem FFT-Ergebnis eine unmodulierte Sinuskurve dar, die im Fenster im Zeitbereich genau periodisch ist. Aber die Vibrationen der Klaviersaiten sind nicht so stationär. Sie entwickeln sich im Laufe der Zeit und erzeugen eine spürbare Modulation.
Mehrere Effekte: Mehrere Klaviersaiten pro Note tauschen Energie über den Resonanzboden aus. Die gesamte Schwingungsenergie nimmt mit der Zeit ab. Die Vibrationsmodi können anfangs leicht unharmonisch sein. Die genaue Schwingungsfrequenz jeder Mode (Harmonische) kann sich mit abnehmender Amplitude aufgrund der Saitensteifigkeit und des Durchmessers ungleich Null ändern. und jede Harmonische kann mit einer anderen Geschwindigkeit abklingen usw.
Möglicherweise müssen Sie entscheiden, welche dieser mehreren Modulationen Sie "die Tonhöhe" nennen möchten (Bücher über Audiologie können hilfreich sein), und eine Methode finden, um sie innerhalb des "breiten Peaks" der FFT besser zu verfolgen.
quelle
Bei den tieferen Noten von Klavieren, insbesondere bei Ständern, ist das Spektrum tendenziell gestreckt (der Abstand zwischen dem Grundton und dem ersten Oberton beträgt etwas mehr als eine Oktave usw.). Dies ist es, was Klavieren ihren perkussiven Klang verleiht. Die tiefste Note älterer Ständer klingt oft eher wie ein dumpfer Schlag als wie eine Note, und so wie ich es verstehe, haben billige Ständer ihren besonderen perkussiven Honky-Tonk-Klang. Aufgrund dieser guten Klavierstimmer (die Leute sind keine Algorithmen) stimmen Klaviere mit den niedrigeren Obertönen als die Grundtöne für niedrigere Töne. Das menschliche Ohr tendiert dazu, sich auf die Interaktion der unteren Obertöne für diese Noten zu konzentrieren. Die Dehnung der harmonischen Reihe könnte auch die Ursache für die breiteren als erwarteten Peaks im Spektrum sein.
quelle