Ich versuche, ein Tonhöhenerkennungsprogramm zu erstellen, das die Frequenzen von Spitzen in einem Leistungsspektrum extrahiert, das von einer FFT ( fftpack
) erhalten wird. Ich extrahiere die Spitzenfrequenzen aus meinem Spektrum mit Quinns erstem Schätzer, um zwischen Bin-Nummern zu interpolieren. Dieses Schema scheint unter bestimmten Bedingungen gut zu funktionieren. Mit einer rechteckigen Fensterfunktion mit einer Fenstergröße von 1024 und einer Abtastrate von 16000 identifiziert mein Algorithmus beispielsweise die Frequenz eines reinen A440-Tons korrektals 440.06 mit einer zweiten Teilfrequenz von 880.1. Unter anderen Bedingungen führt es jedoch zu ungenauen Ergebnissen. Wenn ich die Abtastrate (z. B. auf 8000) oder die Fenstergröße (z. B. auf 2048) ändere, wird der erste Teil immer noch korrekt als 440 identifiziert, der zweite Teil liegt jedoch irgendwo bei 892. Das Problem wird für unharmonische Töne wie diese noch schlimmer produziert von einer Gitarre oder einem Klavier.
Meine allgemeine Frage lautet: Inwiefern beeinflussen Abtastrate, Fenstergröße und Fensterfunktion die Frequenzschätzung von FFT-Peaks? Meine Annahme war, dass eine einfache Erhöhung der Auflösung des Spektrums die Genauigkeit der Spitzenfrequenzschätzung erhöhen würde, aber dies ist eindeutig nicht meine Erfahrung (Null-Padding hilft auch nicht). Ich gehe davon aus , dass die Wahl der Fensterfunktion wird nicht viel Wirkung haben , weil Spektralleckage sollte nicht die Spitze ändern Lage (obwohl, jetzt, wo ich darüber nachdenke, was möglicherweise Spektralleckage neben dem interpolierten Frequenzschätzung , wenn die Größen der Behälter beeinflussen könnten Die Peaks werden durch Leckage von anderen Peaks künstlich erhöht ...).
Irgendwelche Gedanken?
Erstens sind die Spitzenfrequenzschätzung und die Tonhöhenschätzung zwei verschiedene Dinge. Tonhöhe ist ein psychoakustisches Phänomen. Menschen können eine Tonhöhe hören, selbst wenn die Grundfrequenz vollständig fehlt oder im Vergleich zu den meisten anderen Spitzen relativ schwach ist, wie bei den tiefen Tönen, die von einigen Instrumenten erzeugt werden.
Zweitens entspricht die Verwendung eines Fensters auf einer FFT der Verwendung eines rechteckigen Fensters, das Ihr Spektrum mit der Sinc-Funktion faltet. Bei der Sinc-Funktion sind viele Buckel weit vom Peak entfernt, die für alle Frequenzen angezeigt werden, die in der FFT-Länge nicht genau periodisch sind (auch als "spektrale Leckage" bekannt). All dieser Energieverlust von einer starken Frequenz stört die Positionsschätzung anderer Frequenzspitzen. Eine besser geeignete Fensterfunktion (Hamming oder von Hann) könnte daher dazu beitragen, diese Interferenz zwischen Spitzen zu verringern.
Eine längere FFT verringert die Delta-Frequenz zwischen Bin-Zentren, was die Interpolation und damit die Genauigkeit der Frequenzschätzung für stationäre Spektren erhöhen sollte. Wenn die FFT jedoch so lang ist, dass sich das Spektrum innerhalb des FFT-Fensters ändert, werden alle diese geänderten Frequenzen in einer längeren FFT zusammen verwischt.
quelle
Sie benötigen auf jeden Fall eine geeignete Fensterfunktion - die Auswirkungen der spektralen Leckage variieren erheblich, je nachdem, wie die Tonhöhenperiode und die Länge des FFT-Fensters zusammenhängen. Wenn Sie einen großen Übergang zwischen der letzten und der ersten Probe des FFT-Fensters erhalten, wird dies sehr unangenehm Verschmieren des Spektrums. Wenn Sie Glück haben und diese Diskontinuität gering ist, ist das resultierende Spektrum viel sauberer. Dies ist wahrscheinlich der Grund, warum Sie Inkonsistenzen feststellen, wenn Sie einen Ihrer Parameter wie die FFT-Größe ändern. Mit einer geeigneten Fensterfunktion erhalten Sie ein konsistentes Spektrum, wenn sich die Tonhöhe ändert.
quelle