Ich muss die Tonhöhe erkennen (Signalfrequenz messen), während die Musiker Musik spielen, und eine Warnung geben, wenn sie verstimmt sind, aber die Musik ist für FFT (Fast Fourier Transform) etwas zu schnell.
Im Folgenden versuche ich, eine technische Beschreibung des Problems zu geben.
Musiker spielen Musik mit 90-140 Schlägen pro Minute. Dies bedeutet, dass es pro Minute 90-140 Notengruppen gibt, bis zu 8 (häufiger bis zu 4) Noten in jeder Gruppe (60/140/8 = 0,0536 Sek., 60/90/4 = 0,167 Sek.) Das heißt, Noten können sich mit einer Geschwindigkeit von 6 bis 19 Noten pro Sekunde ändern.
Die Musik verwendet eine logarithmische Skala (siehe das beigefügte Bild): Der Bereich zwischen beispielsweise 440 Hz und 880 Hz ist in 12 Noten unterteilt, von denen nur 7 für die Melodie verwendet werden. (Grundsätzlich verwenden sie nur die weißen Tasten am Klavier. Wenn sie die Startfrequenz verschieben möchten, verwenden sie einige der schwarzen Tasten und keine weißen Tasten.) Das heißt, die Frequenz jeder nächsten Note wird multipliziert um 2 ^ (1/12) = 1,05946.
Um die Sache komplizierter zu machen, kann die A (La) -Frequenz von 438 bis 446 Hz variieren. Die Saiteninstrumente können theoretisch gestimmt werden, während die Blasinstrumente von der Lufttemperatur und Luftfeuchtigkeit abhängen, sodass die Frequenz von den Musikern während des Soundchecks neu ausgehandelt wird.
Manchmal machen Musiker und Sänger Frequenzfehler, sie nennen es "verstimmt". Sie wollen ein Gerät, das sie über solche "verstimmten Fehler" informiert. Sie haben Tuner, aber die Tuner müssen ungefähr 1 Sekunde lang denselben Sound spielen, bevor sie etwas zeigen. Dies funktioniert zum Stimmen, aber nicht, während die Musik abgespielt wird.
Für A = 440 Hz beträgt der Frequenzunterschied zwischen zwei Noten 440 * 0,05946 = 26,16 Hz. Um diese Frequenzauflösung zu erhalten, muss eine Erfassungszeit von 0,038 Sekunden verwendet werden, dh bei Tempo = 196 bpm kann FFT nur zwei unterscheiden stellt fest, dass bei 98 Schlägen pro Minute ein 50% iger Verstimmungsfehler festgestellt werden kann, vorausgesetzt, die Erfassung beginnt in dem Moment, in dem sich die Tonhöhe ändert. Wenn wir die Tonhöhenänderung im Verlauf einer Erfassungsperiode zulassen, erhalten wir 49 Schläge pro Minute, was einfach zu langsam ist. Darüber hinaus ist es sehr wünschenswert, die Frequenz genauer zu bestimmen, beispielsweise einen Fehler von 25% oder 12% zu erkennen.
Gibt es eine Möglichkeit, die Frequenz (Tonhöhenerkennung) besser als die FFT zu messen, dh mit einer besseren Auflösung in kürzerer Erfassungszeit? (Mindestens 2-mal besser, idealerweise 8-16-mal besser.) Im Gegenzug muss ich nicht zwischen Noten unterschiedlicher Oktaven unterscheiden, z. B. können sowohl 440 als auch 880 als A erkannt werden. Ich brauche die Linearität von FFT nicht Ausgabe wäre eine logarithmische Skala besser. (Wahrscheinlich sind weitere Kompromisse möglich, mir fällt gerade nichts anderes ein.)
Hier ist eine wirklich gute Zeichnung:
quelle
Antworten:
" Gibt es eine Möglichkeit, die Frequenz (Tonhöhenerkennung) besser als die FFT zu messen, dh mit einer besseren Auflösung in kürzerer Erfassungszeit? "
ja da ist. oder sind. Es gibt mehrere bessere Möglichkeiten, die Tonhöhenerkennung in Echtzeit zu erkennen, die weitaus besser sind als das Ausführen einer FFT.
Bedenken Sie :
Average Magnitude Difference Function (AMDF)
Average Squared Difference Function (ASDF)
Autokorrelationsfunktion (AF)
Beachten Sie, dass ich schnell und locker mit den Grenzen der Summierung spiele.
Mein Favorit ist ASDF (und das ist ein kaum verhülltes Geschäftsgeheimnis, das ich gerade allen angekündigt habe, aber die Leute auf comp.dsp wussten das bereits). Dies sind alles Zeitbereiche, AMDF und ASDF sehen sich sehr ähnlich und ASDF sieht aus wie eine verkehrte Version von AF. Sie suchen nach Nullen in AMDF oder ASDF oder nach Spitzen in AF, die potenziellen Periodenlängen des quasi-periodischen Eingangs entsprechen würden.
Hier sind ein paar andere Tricks:
Der ganze Trick (und dies ist die geheime Sauce, für die Geschäftsgeheimnisse und IVL-Patente gelten) besteht darin, bei mehreren Kandidaten den richtigen Peak oder Null zu wählen . Die Auswahl des falschen Peaks oder Null führt zu einem "Oktavfehler". Ich werde dir nicht sagen, wie das geht. Nutze deine Vorstellungskraft.
Senden Sie mir eine E-Mail, und wir können die Vertragsbedingungen besprechen, wenn ich Ihnen einen Kick-Ass-Pitch-Detektor entwerfen soll. viel besser als YIN, was meiner Meinung nach wie Scheiße funktioniert.
quelle
Ich habe Ihre Frage hier bereits beantwortet: /programming/33667275/fast-frequency-measurement/33678202#33678202
Zusammenfassend lässt sich sagen, dass Sie unter bestimmten Umständen ein FFT-Ergebnis auf eine feinere Auflösung als den FFT-Bin-Abstand interpolieren können, sodass Sie ein kürzeres Datenfenster für eine bessere Zeitauflösung verwenden können.
Die FFT-Frequenz ist jedoch keine Tonhöhenfrequenz. Und für einige Musikinstrumente (solche, die leicht unharmonische Obertöne erzeugen) ist auch die Frequenz der Autokorrelationsfunktion (oder ihrer Verwandten wie AMDF) nicht. Das liegt daran, dass Tonhöhe ein psychoakustisches Phänomen ist.
quelle