Effizienteste Methode zum Extrahieren von Frequenzkomponenten eines Audiosignals mit nahezu menschlicher Genauigkeit in Echtzeit

14

Ich versuche herauszufinden, wie (wenn möglich) die Frequenzkomponenten eines beliebigen Audio-Samples (normalerweise Musik) auf eine FFT-ähnliche Art und Weise extrahiert werden können. Bei meinen Untersuchungen zum FFT-Algorithmus habe ich jedoch herausgefunden, dass er darunter leidet strenge Einschränkungen für diesen Zweck.

Es gibt 3 Probleme, die die FFT aufwirft:

  1. Da die FFT-Bin-Auflösung Ihrer Fenstergröße entspricht, benötigen Sie ein unangemessen langes Fenster (z. B. 1 Sekunde), um eine vernünftige Genauigkeit (z. B. 1 Hz) zu erzielen. Dies bedeutet, dass Sie Transienten oder neu eingeführte Frequenzen nicht schnell erkennen können. Dies bedeutet auch, dass das Problem nicht mit einer schnelleren CPU und einer höheren Abtastrate gelöst werden kann - die Beschränkung ist untrennbar mit der Zeit verbunden.

  2. Menschen nehmen die Frequenz logarithmisch wahr, aber FFT-Bins sind linear voneinander beabstandet. Zum Beispiel ist ein Unterschied von 20 Hz am unteren Ende unseres Gehörs sehr groß , wohingegen ein Unterschied von 20 Hz am oberen Ende nicht wahrnehmbar ist. Um die Genauigkeit zu erreichen, die wir bei niedrigen Frequenzen benötigen, müssen wir weitaus mehr berechnen als bei hohen Frequenzen.

  3. Einige dieser Probleme können durch Interpolation zwischen FFT-Bins gelöst werden. Dies funktioniert möglicherweise für viele Musiktitel, da die Frequenzen häufig recht weit voneinander entfernt sind und daher nicht mehr als eine Frequenz in ein Paar von Bins gelangt. Dies wird jedoch nicht immer der Fall sein, insbesondere bei unharmonischen Klängen wie Schlaginstrumenten. Interpolation ist also nur eine Vermutung.

Nach meinem Verständnis des DFT / FFT-Algorithmus sind die Ausgaben (Bin-Amplituden) effektiv die Korrelation des Sinus / Cosinus bei der Frequenz jedes Bin. Es fällt mir auf, dass wir eine pyschoakustisch gleiche Auflösung bei allen Frequenzen erzielen könnten, wenn der Algorithmus so umgestaltet werden könnte, dass die Bin-Frequenzen nichtlinear beabstandet sind (dh wir korrelieren einen anderen Satz von Sinus / Cosinus). Ist das möglich oder ist es ein Wunschtraum, der auf meinem unvollständigen Verständnis der Mathematik beruht?

Ich glaube, ich könnte das Problem auch mit Brute-Force lösen, indem ich Sinus / Cosinus bei jeder Frequenz, an der ich interessiert bin, korreliere. Ist das möglich? Was für eine Effizienz? Würde es mein Problem lösen?

Gibt es einen anderen Weg, um eine genauere Frequenzzerlegung eines Signals in Echtzeit zu erreichen? Die CPU-Effizienz ist ein Problem, aber nicht das Hauptproblem - es interessiert mich teilweise, ob dies theoretisch überhaupt möglich ist. Ideal wäre jedoch etwas, das auf einer modernen Desktop-Maschine in Echtzeit realisierbar ist.

Bryhoyt
quelle
3
Welches Problem versuchen Sie zu lösen? f0-Erkennung, Mehrfach-f0-Erkennung (für Transkription), Akkorderkennung, Timbre-Modellierung ...? Für einige dieser Probleme gibt es Ad-hoc-Lösungen. Interessieren Sie sich für die Invertierbarkeit (zur Verwendung in einem Analyse-> Transformations-> Resynthese-Framework)?
Pichenettes
Das Problem, das ich zu lösen versuche, ist zugegebenermaßen ziemlich offen. Ich habe ein allgemeines Interesse an digitaler Musik, das den größten Teil Ihrer Liste umfasst. Aber meine Unbestimmtheit ist zum Teil darauf zurückzuführen, dass ich nicht weiß, was getan werden kann und welche spezifischen Industriestandards oder besten Lösungsansätze für jedes von Ihnen erwähnte Problem vorliegen (bis ich diese Frage gestellt habe, war ich immer davon ausgegangen, dass es FFT ist ). Aber der Punkt auf Ihrer Liste, der mich am meisten interessiert, ist die Timbre-Modellierung. Ich möchte auch Möglichkeiten finden, komplexe Klangfarben zu extrahieren, die gleichzeitig in einer Aufnahme klingen. Die Resynthese ist aufregend. AI-Algorithmen sind von Interesse.
Bryhoyt
Ein spezifischeres Problem, das ich in der Vergangenheit versucht habe, zu lösen und es später noch einmal versuchen möchte: Ich möchte ein Programm schreiben, um mit einer Gruppe von Spielern oder Sängern, die mit einem Mikrofon aufgenommen wurden, in Echtzeit zu "improvisieren". Ich bin so weit gekommen, dass mein Computer merklich verzögert und verstimmt einen Sinus "pfeift". Für eine solche Improvisation ist es wichtig, dass sie genau und präzise abgestimmt ist. Natürlich gibt es auch andere Möglichkeiten, dies zu erreichen (Spieler spielen digitale Instrumente oder geben dem Computer Insider-Informationen wie eine voreingestellte Akkordfolge usw.), aber dies ist nicht mein Ziel.
Bryhoyt
"Der Algorithmus könnte so umgestaltet werden, dass die Bin-Frequenzen nichtlinear verteilt sind. Dann könnten wir bei allen Frequenzen eine pyschoakustisch gleiche Auflösung erzielen." Klingt nach einer kontinuierlichen Morlet-Wavelet-Transformation
Endolith

Antworten:

5

Wie ich bereits in einem früheren Beitrag erwähnt habe, entspricht die Zeit-Frequenz-Analysemethode, die als "Kurzzeit-Fourier-Transformation" ist, einer Filterbank, in der Ihr Signal x analysiert wird . Für ein gegebenes Analysefenster w n der Größe N ist das Filter bei der Frequenz k / N : h n = w - n e j 2 π n kXxwnNk/N

hn=w-nej2πnkN

Für gewöhnliche Analysefenster (Hann, Hamming oder sogar Rechteck) entspricht dies einem Tiefpassfilter mit einer Grenzfrequenz um , der (dank der komplexen Exponentialmodulation) in den Frequenzbereich k "verschoben" wird. Dies führt zu einem Bandpassfilter.1/Nk

Um Ihre Besorgnis über die Reflexion der menschlichen Wahrnehmung direkt zu beantworten, haben an dieser Stelle einige Personen die ["Konstante-Q-Transformation" (CQT)] [Brown91] abgeleitet. Es basiert auf dem gleichen Prinzip wie die FT bei der Interpretation der Filterbank. Allerdings ist die Zentren nicht linear wie bei einem „normalen“ FT Abstand, sondern log2-Abstand. Die Skala wird dann eng mit einem Western - Tonleiter: Wählt man f k + 1 = 2 1 / 12 f k , so erhält man 12 Frequenzen pro Oktave (klingelt :-)?), Und die Bandbreite wird auf , sagen wir, 2 1 / 12 - 1fkfk+1=21/12fk. Sie können auch andere Zentren auswählen, je nach Bedarf.21/12-12fk

Implementierungen des CQT finden Sie hier und da, eine aktuelle von Prof. Klapuri, die mit einer eher anständigen Inversion versehen ist, finden Sie hier . Die Audio-Gruppe bei Telecom ParisTech hat ebenfalls eine Implementierung von Prof. Prado, die ich aber noch nicht ausprobiert habe.

[Brown91] J. Brown, "Berechnung einer Spektraltransformation mit konstantem Q", Journal of the Acoustical Society of America, 1991, 89, 425-434

EDIT 20121014: Einige Antworten und Kommentare zu Ihren (Bryhoyt-) Fragen.

  1. Nur allgemeine Anregungen zu Ihren eigenen Kommentaren zur Hauptfrage: Sie scheinen an vielen Anwendungen interessiert zu sein, die für mich keine ganz trivialen Probleme darstellen. "Timbre-Modellierung" klingt für mich eher nach Spracherkennung oder ähnlichem, bei der Tonhöhe, Frequenzauflösung oder Präzision keine große Rolle spielen (beachten Sie, wie MFCCs normalerweise berechnet werden).

    Bedenken Sie auch, wie viele Spitzenforscher ( F. Pachet und das Repmus-Team des IRCAM, Frankreich , um nur einige zu nennen) am Thema der automatischen Improvisation und Begleitung arbeiten: Die Aufgabe ist nicht unmöglich, erfordert aber Fachwissen in vielen Bereichen. Zusammenfassend muss ein typisches System (zumindest) das menschliche Hörsystem imitieren, die Wahrnehmung von Klang / Musik / Tonhöhe / Rhythmus implementieren, sich mit Musiktheorie auskennen und Entscheidungen auf der Grundlage der Schätzungen aller vorherigen Schritte treffen. Die Fourier-Transformation oder irgendeine Signaldarstellung ist nur ein (winziger) Schritt in Richtung des Endziels - und meiner Meinung nach möglicherweise der bisher am besten verstandene.

    Trotzdem besteht immer noch die Möglichkeit, dass jeder weit über das hinausschaut, was tatsächlich passiert, und dass Sie es in einer einfachen, also eleganten Lösung niederschlagen können! Vergiss nicht, darüber zu veröffentlichen, wenn es fertig ist! :-)

  2. Eine Abtastung von 0,1 s bei 44 kHz reicht aus, um einen großen Frequenzbereich zu enthalten

    Fs/N=44100/4410=10Hz

  3. Die FFT kann dies für niedrige und hohe Frequenzen nicht erkennen, aber Sie sagen, andere Algorithmen können: Was ist der Kompromiss?

    Kurze Antwort: Lies meine Doktorarbeit zur Melodienschätzung!

    Um es etwas genauer zu beschreiben: Viele Algorithmen zur Tonhöhenschätzung gehen dank der Annahmen über die zu verarbeitenden Klänge über die Grenzen der FT hinaus. Wir erwarten, dass Noten von natürlichen Klängen (menschliche Stimme, Oboe, Saxophon, Klavier ...) komplexer sind als einzelne Sinuskurven. Die meisten Töne sind mehr oder weniger harmonisch, was bedeutet, dass sie als Summen von Sinuskurven modelliert werden können, deren Frequenz ein Vielfaches der Grundfrequenz ist.

    Es ist daher nützlich, diese Harmonischen bei der Schätzung der Tonhöhe zu berücksichtigen, wenn Methoden verwendet werden, die Detektionsfunktionen wie Spektralsummen, Spektralprodukte oder Autokorrelationsfunktionen verwenden. Jemand hat kürzlich ein verwandtes Thema gestartet .

  4. Was sind die Kompromisse? Welche Frequenzgenauigkeit kann ich für ein relativ kurzes Fenster erwarten? (Ich verstehe, dass die Fenstergröße in CQT variabel ist - wie viel?) Noch spezieller, wie nahe werde ich in der Lage sein, meine ca. Ziel von 0,5% Frequenzdifferenz bei einem Fenster von 0,005s?

    Wie bereits erwähnt, können Sie bei einem Fenster von 0,005 s mit 200 Hz "Frequenzleck" rechnen. Das ist wirklich nur dann ein Problem, wenn Sie 2 Sinuskurven mit Frequenzen haben, die näher als 200 Hz liegen, so dass die FT nicht in der Lage ist, zu zeigen, dass es sich um 2 verschiedene Sinuskurven handelt. Nun, wir sind weit entfernt von Ihren 0,5% (ein Halbton liegt übrigens bei 6% der Frequenz!) Und 0,005s ist für Ihren Zweck wirklich ein bisschen klein. Wenn Sie jedoch alle 0,005 Sekunden eine Schätzung angeben möchten, können Sie auch länger überlappende Frames verarbeiten, wie dies normalerweise bei der Sprach- / Musikverarbeitung der Fall ist. Wollen Sie das wirklich?

    Nk=Fsfk(21/B-1)
    BB=48fk=100Hzbenötigen etwa 0,7s lange Fenster. Es ist nichts zu sagen, dass wir dann ein wenig von der zeitlichen Auflösung verlieren ... Aber wie bereits erwähnt, ist dies nur dann ein Problem, wenn wir die Struktur des Klangs vergessen. Darüber hinaus ist die Psychoakustik der Ansicht, dass Menschen unter 500 Hz die Sinusoiden nicht wirklich so gut unterscheiden: Selbst Menschen sind dort gefordert. Natürlich können wir hoffen, dass unsere Computer besser sind als wir, aber hier stehen wir vor einem schwierigen Problem!

    Beachten Sie schließlich, dass es auch andere Möglichkeiten gibt, eine Zeit-Frequenz-Darstellung eines Klangs zu berechnen, z. B. Gammaton-Filterbänke. Der zuvor erwähnte Vorteil des CQT besteht darin, dass es Software sowohl für die Transformation als auch für deren Invertierung gibt. Persönlich halte ich mich aber immer noch an die STFT, weil sie so einfach ist und ich bisher selbst für die Trennung von Quellen keine bessere Auflösung bei niedrigen Frequenzen brauchte.

    [Schoerkhuber2010] Schoerkhuber, C. und Klapuri, A., "Constant-Q transform toolbox for music processing", 7. Konferenz für Sound- und Musik-Computing, Barcelona, ​​Spanien, 2010.

Jean-Louis Durrieu
quelle
Eine kleine Bemerkung: Der CQT könnte helfen, die Punkte 1 und 2 Ihrer Bedenken zu lösen, aber nicht Punkt 3. Was Punkt 3 betrifft, gibt es immer einen Kompromiss zwischen Zeit- und Frequenzauflösung, und wenn Sie eine gute Frequenzauflösung bei niedrigen Frequenzen wünschen Frequenzkomponenten müssen Sie sehr wahrscheinlich akzeptieren, um die Zeitauflösung zu verlieren. Nun, für die Tonhöhenschätzung könnte es andere Lösungen geben, die Sie in meiner Doktorarbeit nachlesen können, wenn Sie interessiert sind: D
Jean-louis Durrieu
Ich verstehe nicht ganz Ich weiß, dass Sie nichts umsonst bekommen - ich kann nicht erwarten, dass ein Algorithmus Frequenzen erkennt, die für mindestens ein paar Perioden der niedrigsten Frequenz nicht mit einer guten Auflösung abgetastet wurden. Eine Abtastung von 0,1 s bei 44 kHz reicht jedoch aus, um einen weiten Frequenzbereich zu enthalten, den ein Mensch genau unterscheiden kann (relativ ausgedrückt: "hier ist eine fünfte", "es gibt eine flache verminderte vierte" usw.), was die Informationen bestätigt ist irgendwo da drin. Die FFT kann dies für niedrige und hohe Frequenzen nicht erkennen, aber Sie sagen, dass andere Algorithmen dies können: Was ist der Kompromiss?
Bryhoyt
Von all den hervorragenden Antworten oben scheint das CQT der Frage, die ich gestellt habe, am genauesten zu entsprechen. Was sind die Kompromisse? Welche Frequenzgenauigkeit kann ich für ein relativ kurzes Fenster erwarten? (Ich verstehe, dass die Fenstergröße in CQT variabel ist - wie viel?) Noch spezieller, wie nahe werde ich in der Lage sein, meine ca. Ziel von 0,5% Frequenzdifferenz bei einem Fenster von 0,005s? (Das ist meine grobe Schätzung, wann ein Mensch anfangen könnte, etwas zu hören, das verstimmt oder
unrund ist
5

Erstens gibt es beim klassischen Fouriertransformations-Kurzzeitansatz eine Alternative zur Interpolation - insbesondere Techniken, die Phaseninformationen verwenden, um die Momentanfrequenz wiederherzustellen ( siehe diese Frage ), mit der Sie die Position eines Spektralpeaks ohne eine sehr genau bestimmen können Erhöhung der FFT-Größe. Der Nachteil besteht, wie Sie richtig sagten, darin, dass Sie die Fähigkeit des Systems nicht erhöhen, benachbarte Peaks zu unterscheiden - dies ist jedoch bereits eine große Verbesserung im Vergleich zur Verwendung der Mittenfrequenz des FFT-Bin-Index.

srFFT_sichze

Es gibt einen anderen Brute-Force-Ansatz, der funktioniert: Untersuchen Sie Ihre Signale mit komplexen Exponentialfenstern (Gabor-Wavelets). Diese sind durch eine Mittenfrequenz, eine Mittenzeit und eine Bandbreite (die misst, wie das Wavelet über die Zeit oder über die Frequenz verteilt ist) gekennzeichnet. Sie müssen viele, viele, viele Korrelationen zwischen Ihrem Signal und diesen Wavelets zu beliebig vielen Zeitversätzen, Frequenzen und Bandbreiten auswerten. Das Ergebnis ist dasselbe wie bei einer sehr flexiblen "gekachelten" STFT, bei der für jeden Zeitbereich und jedes Frequenzband eine optimale Fenstergröße ausgewählt wird. Abgesehen von den Rechenkosten besteht der Nachteil darin, dass es keinen effizienten Algorithmus und keinen kausalen Algorithmus gibt (Sie müssen im Voraus so viele Stichproben kennen wie das längste Wavelet in Ihrem Wörterbuch). Wenn Sie mit diesen Techniken experimentieren möchten,MPTK .

k

  • k
  • Sie bieten eine gute Leistung bei weißem Rauschen. Hierzu muss das Signal vor der Analyse weiß werden. Auch die Analyse in einzelnen Kanälen einer Filterbank hilft.

Diese sind rechenintensiv, können jedoch online mit kurzen Fenstern verwendet werden, wenn die Modellbestellungen und / oder das Rauschen gering sind.

Pichenetten
quelle
4

Frequenz oder Tonhöhe? Es gibt bereits Unmengen von Forschungsarbeiten und Büchern über die Wahrnehmung des menschlichen Pechs. Aber, IIRC, Menschen neigen dazu, Frequenzen nur dann genau zu "extrahieren", wenn sie zufällig eine Tonhöhengrundlage darstellen. Und mehrere Frequenzspitzen innerhalb eines "kritischen Bandes" neigen dazu, als Rauschen wahrgenommen zu werden. Daher muss jedes Verfahren mit "nahezu menschlicher Genauigkeit" möglicherweise auch einige menschliche Wahrnehmungsabschätzungsfehler enthalten.

Eine FFT ist nur eine Reihe von Filtern, die für viele Zwecke nicht optimal sind, es sei denn, Orthogonalität und Invertierbarkeit sind Anforderungen. Andere Filterbänke sind möglich, wenn Sie diese beiden nicht benötigen (und die menschliche Wahrnehmung dies eindeutig nicht), z. B. eine MEL-Frequenzfilterbank. Sobald eine Frequenzspitze durch eine MEL-Frequenzfilterbank identifiziert wurde, kann eine weitere Analyse durch FFT-Interpolation oder Phasenvocodertechniken nützlich sein, um eine Frequenzschätzung einer isolierten spektralen Frequenzspitze zu verfeinern.

Es ist zu beachten, dass durch keine dieser Filtertechniken, die über dieselbe Zeitspanne von Zeitbereichsdaten im Vergleich zu einer FFT verwendet werden, tatsächlich weitere Informationen gesammelt werden. Was passiert, könnte tatsächlich der Verlust von Informationen sein, um besser mit der "Ungenauigkeit" oder den Anomalien des menschlichen Hörsystems übereinzustimmen.

Und die Tonhöhenschätzung aus einer Reihe von Frequenzen ist ein völlig anderes Problem, wiederum ein Thema mit vielen Forschungsarbeiten und Kapiteln in Büchern über Audiologie und dergleichen.

Der letzte Teil Ihrer Frage zur Leistung könnte ein roter Hering sein. Man kann heutzutage Dutzende von FFTs und Dutzende verschiedener Filterbänke in Echtzeit auf einem Handyprozessor ausführen. Angesichts sehr effizienter FFT-Bibliotheken, die von CPU-Anbietern erhältlich sind, ist eine FFT mit Tausenden von "überzähligen" Fächern möglicherweise effizienter als eine wesentlich kleinere, aber naivere Filterbank.

hotpaw2
quelle
Sehr informative Antwort, danke. Ich bin mir des Unterschieds zwischen Tonhöhe und Frequenz bewusst, aber Ihre Antwort hat wirklich dazu beigetragen, hervorzuheben, wie sehr die menschliche Genauigkeit vom Klang abhängt, der bestimmte Anforderungen erfüllt. Meines Wissens nach klingt es harmonisch, dass Menschen es ziemlich schlecht verstehen, Frequenzen zu extrahieren, die keine fundamentale Tonhöhe haben. Ich kann Abstimmungsintervalle genau voneinander und von Verstimmungsintervallen (Konsonantenintervalle sind leichter als dissonant) unterscheiden. Aber ich würde Probleme haben, zwei verstimmte Intervalle zu unterscheiden (außer "flach", "sehr flach", "scharf" usw.).
Bryhoyt
2

Es gibt viele Alternativen, aber es hängt davon ab, was Sie tun. Physikalisch würde ich behaupten, dass unsere Ohren eher einer parallelen Filterbank ähneln als einer FFT, die ihnen eine gute Zeitauflösung verleiht, und ein Prozess namens "Fokussieren" verleiht ihnen eine gute Frequenzauflösung. In einigen Fällen könnten Sie theoretisch eine Filterbank verwenden, aber dies erfordert viel Verarbeitung, sodass Sie viele Daten verarbeiten müssen.

Wavelets können als eine Reihe besonders effizienter und verwandter Filter betrachtet werden. Das Problem mit Wavelets für die Musik- und Audioanalyse ist, dass sie normalerweise nur eine Oktavenauflösung ergeben (obwohl Sie verschiedene Dinge tun können, habe ich nicht wirklich gesehen, dass Wavelets für Audio besonders nützlich sind).

Ein anderer Ansatz besteht darin, überlappende FFT-Fenster zu verwenden. Sie können die Frequenzauflösung der FFT erhöhen, indem Sie nicht nur die Größeninformationen, sondern auch die Phaseninformationen betrachten. Auf diese Weise können Sie viel kürzere Fenster als sonst verwenden, was zu einer besseren Leistung und einer besseren Zeitauflösung führt. Überlappende Fenster sind nur schwer korrekt zu synthetisieren, und zu viele Annahmen über die Phase können ebenfalls gefährlich sein. Wie dem auch sei, diese Art von Tricks sind wahrscheinlich die Grundlage für die Lösung komplexer Zeit-Frequenz-Analyseprobleme.

Es gibt auch eine Reihe anderer Tools für bestimmte Anwendungen.

Björn Roche
quelle
1
xnXkmwn
Xfm=nxn+mwne-j2πnkN
Nxnm
Xfm=pxpwp-me-j2π(p-m)kN=pxphm-p
hn=w-nej2πnkN
1
Eine STFT kann eine Filterbank sein, aber nicht alle Filterbanken sind STFTs.
Bjorn Roche