Ich möchte STFT für die Multipitch-Analyse verwenden. Mir ist klar, dass das Erkennen der im Signal vorhandenen Teiltöne nur der Anfang ist. Ich habe immer noch ein Problem damit.
Angenommen, ich habe ein Signal mit CD-Frequenz abgetastet 44100Hz
. Mit dem Fenster von 1024
Samples erhalte ich eine Auflösung von 22500Hz/512=43Hz
. Dies reicht nur aus, um hohe Klaviertöne wie: C5 = 523.251Hz
und zu erkennen
C#5 = 554.365
.
Früher dachte ich, es 1024
ist ein ziemlich großes Fenster. Aber vielleicht ist es das nicht und normalerweise werden größere Fenster zum Erkennen von Teilbereichen verwendet?
Kann die Frequenzauflösung mit einer anderen Methode als der Vergrößerung des Fensters erhöht werden, was die Zeitauflösung verschlechtert? Ich dachte an zwei Methoden:
Methode 1:
- Teilen Sie das Signal mit Bandpassfiltern (z. B.
0-11.25Hz
und11.25-22.5Hz
) in Frequenzbänder auf . - Verringern Sie die Abtastrate der höheren Bänder, sodass die ursprünglichen hohen Frequenzen jetzt niedrige Frequenzen sind (tun Sie dies auch für das zweite Band
11.25-22.5Hz -> 0Hz-22.5Hz
) - nicht sicher, ob dies möglich ist. - Konzentrieren Sie die resultierenden Behälter-Sets mit angepassten Beschriftungen.
Methode 2:
- Verwenden Sie eine Reihe von Tiefpassfiltern mit zunehmender Grenze.
- Führen Sie die FFT in zunehmenden Frequenzbereichen durch.
- Verwenden Sie für jede Frequenz die bestmögliche Auflösung (Bins aus der ersten FFT, in der diese Frequenz enthalten war).
- Dies bewirkt, dass niedrige Frequenzen eine bessere Auflösung haben, aber ich denke, dass dies in Ordnung ist, da der Frequenzunterschied für höhere Noten größer ist.
Für Anmerkungen zu diesem Thema bin ich dankbar.
Ich habe auch hier gelesen: Wie beeinflussen Fenstergröße und Abtastrate die FFT-Tonhöhenschätzung? über die Methode zur Verbesserung der Peak-Picking-Ergebnisse. Ich denke ich werde versuchen es zu benutzen.
Antworten:
Wenn Sie wirklich auf der Verwendung von FFT bestehen (anstatt auf parametrischen Methoden, die nicht unter Zeit- / Frequenz-Kompromissen leiden), können Sie eine viel bessere Auflösung vortäuschen, indem Sie die Phaseninformationen verwenden, um die momentane Frequenz für jeden FFT-Bin wiederherzustellen. Partials können dann erkannt werden, indem nach Plateaus in der Funktion gesucht wird, die die Momentanfrequenz als Funktion des FFT-Bin-Index angibt. Die übliche Implementierung dieser Technik, wie sie in diesem Artikel beschrieben wird, "kostet" Sie eine zusätzliche STFT (die momentane Frequenz wird durch Operationen an der STFT des Signals und der STFT der Ableitung des Signals wiederhergestellt).
Siehe zum Beispiel die ifgram-Funktion in dieser Matlab-Implementierung der sinusförmigen Modellierung von Audiosignalen.
Beachten Sie, dass dies nicht dazu beiträgt, zwei Teiltöne aufzulösen, die in benachbarte FFT-Klassen fallen. Sie liefert nur eine viel genauere Frequenzschätzung als nur die Umwandlung des FFT-Bin-Index eines Spektralpeaks in eine Frequenz.
quelle
Der Begriff "Auflösung" hat mehrere Bedeutungen. Im Allgemeinen können Sie die Fähigkeit zum Trennen (oder "Auflösen") eng benachbarter Spektralspitzen durch Interpolation mit derselben Fensterlänge von Daten nicht erhöhen. Sie können jedoch die Frequenz von isolierten stationären Spektralspitzen, die weit über dem Grundrauschen liegen, mit einer feineren Auflösung (manchmal mit einer viel feineren Auflösung) als dem FFT-Bin-Abstand durch verschiedene Interpolationsmethoden abschätzen.
Gängige Interpolationsmethoden für FFT-Ergebnisse für Schätzungen mit höherer Auflösung umfassen die parabolische Interpolation, die Sinc-Interpolation, das Auffüllen der Daten zu einer viel längeren FFT mit Nullen sowie Phasenvocoder-Methoden unter Verwendung von (geringfügig) versetzten überlappenden Fenstern.
Eine FFT ist im Wesentlichen eine Bank von Bandpassfiltern, die jeweils einen sehr steilen Übergang aufweisen, aber für eine gegebene FIR-Filterkernlänge Tonnen von Sperrbandwelligkeit aufweisen. Als solches weisen diese Filter keine große Rauschunterdrückung von nicht periodischem Rauschen im Fenster auf. Wenn Sie vermuten, dass diese Art von Interferenz ein Problem darstellt, kann eine FFT mit Fenster oder eine benutzerdefinierte Filterbank eine bessere Leistung erzielen.
quelle
Nach weiteren Untersuchungen von aufgerufen Jim Clay Frage und pichenettes in Kommentaren Antwort fand ich , dass mein Method2 Bounded Q-Transformation zum Beispiel von Kashima und Mont-Reynaud beschrieben neu erfunden (ich bin nicht sicher , kann ich zu diesem Artikel verlinken, Datei sieht zerrissen ) .
Ihr Ansatz ist algorithmisch effizienter, da sie vom größten Frequenzbereich ausgehen und ihn iterativ um 2 herunterrechnen, bis sie die niedrigste Oktave erreichen.
Die Vorteile von Q-Transformationen wurden zum Beispiel auch hier von Brown untersucht . Es ist möglicherweise nicht so effizient wie eine einzelne FFT, hat jedoch den Vorteil, dass bei Hochfrequenzbändern, für die dies nicht erforderlich ist, keine dicke FFT berechnet wird.
Vielen Dank für alle Antworten, Kommentare und Links.
quelle
Wenn Sie eine "Historie" von Eingaben speichern und diese verwenden, um Ihre DFTs zu überlappen, werden mehr Informationen zum Extrahieren von spektralem Inhalt bereitgestellt. Das hängt natürlich von der zeitlichen Variation Ihres Signals ab. Es wäre in der Form einer Wahrscheinlichkeitsverteilungsfunktion ähnlich.
Dies würde Ihnen DFTs geben, die zeitlich näher beieinander liegen. Es würde jedoch immer noch die zeitliche Unsicherheit jeder DFT erhöhen, was durch die Naturgesetze eingeschränkt wird: Der genaue Wert des zeitlichen und spektralen Verhaltens kann nicht gleichzeitig bestimmt werden.
Wenn der Frequenzinhalt innerhalb des Fensters jedoch nicht stark variiert, sollte dies in Ordnung sein.
quelle