Piano Pitch Detection

8

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.

DrTodd13
quelle
Wäre die Konstant-Q-Transformation für diese Anwendung von Nutzen? wellesley.edu/Physics/brown/pubs/cq1stPaper.pdf
Atul Ingle
Nur neugierig: Welche Art von Hardwaregerät verwenden Sie für die Signalaufnahme, ein normales Mikrofon?
Amphibient
Ich verwende ein Samson CO1U-Mikrofon.
DrTodd13

Antworten:

6

Ä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.

Hilmar
quelle
Nun, ich habe FFT an anderer Stelle im Programm für Inharmonizitätsmessungen und Teilanpassungsberechnungen verwendet. Daher war es für mich am einfachsten, es auch für diesen Zweck wiederzuverwenden. Ich mache mir keine allzu großen Sorgen um billige, aber wenn phasengesteuerte Regelkreise besser sind, werde ich sie überprüfen. Da dies nicht mein Fachgebiet ist, kann die Implementierung einiger dieser Dinge undurchdringlich erscheinen.
DrTodd13
2

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.

Kevin McGee
quelle
Einige der Cepstrum-Varianten sehen interessant aus, also werde ich damit beginnen. Vielleicht sollte ich den Teil der Proben verwerfen, der dem "Angriff" / Hammerschlag entspricht. Weiß jemand zufällig, wie lange es dauert, bis die Note einen etwas stabilen Zustand erreicht, oder gibt es eine Möglichkeit, den Anfangszustand zu charakterisieren, damit ich ihn filtern kann?
DrTodd13
Die Informationen sind da draußen, aber es kann schwierig sein, sie zu finden. Schauen Sie sich zum Beispiel diesen Thread aus dem Forum "Piano World" zu "Angriffsmerkmalen" an: pianoworld.com/forum/ubbthreads.php/topics/1125286/What% 20is
Kevin McGee
2

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.

Björn Roche
quelle
Gute Informationen, danke! Was mich interessierte, war ein Artikel mit dem Titel "Entropiebasiertes Stimmen von Musikinstrumenten". Es verwendet ein Entropiemaß, um eine Stimmung für ein bestimmtes Klavier basierend auf den spezifischen Inharmonizitäten des Klaviers zu berechnen. Ich habe versucht, zuerst die Ergebnisse aus dem Papier zu duplizieren und dann von dort fortzufahren. Sobald dies erfolgreich ist, kann ich das, was in diesem Beitrag steht, verwenden, um das Klavier auf die berechnete Stimmung abzustimmen. Wenn Sie über die Verwendung der FFT-Phase sprechen, handelt es sich dann um eine Ausgabe, die normalerweise verworfen wird und die ich verwenden könnte, oder um etwas Internes? Ich verwende das FFT-Paket eines anderen.
DrTodd13
Ich bin mit diesen Techniken nicht vertraut (es klingt allerdings interessant). Ich würde mit Standardtechniken beginnen, bevor ich mich dieser Domäne zuwende. Obwohl ich eine Standardtechnik auswählen würde, die der fortgeschrittenen Technik, die Sie emulieren möchten, am ähnlichsten ist.
Björn Roche
FFT-Ausgänge bestehen normalerweise aus Real- und Imaginärteilen. Sie können dies auf die übliche Weise in Größe und Phase übersetzen (real + imaginär und mag & Phase sind beide gültige Darstellungen komplexer Zahlen). Die Verwendung für die Tonhöhenverfolgung ist subtil - Sie müssen das DAFX-Buch für die Deets lesen.
Björn Roche
2

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.

hotpaw2
quelle
1

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.

Nathan Day
quelle
Nun, Inharmonizität ist nicht gleich Variabilität. Inharmonizität würde dazu führen, dass sich der Peak an einem anderen Punkt befindet, aber ich verstehe nicht, warum dies den Peak breiter machen würde. Vielleicht ist die Peakbreite auf die inhärente Signalvarianz über die Zeit zurückzuführen, und eine Verkürzung der Abtastperiode würde die Varianz verringern?
DrTodd13