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?