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: