Welche FFT-Deskriptoren sollten als Feature zur Implementierung eines Klassifikations- oder Clustering-Algorithmus verwendet werden?

8
Ich habe einige geografische Trajektorien gesammelt, um sie zu analysieren, und ich habe das Histogramm von Daten in räumlicher und zeitlicher Dimension berechnet, was ein zeitdomänenbasiertes Merkmal für jedes räumliche Element ergab. Ich möchte eine diskrete FFT durchführen, um das zeitdomänenbasierte Feature in ein frequenzdomänenbasiertes Feature zu transformieren (was ich vielleicht für robuster halte), und dann einige Klassifizierungs- oder Clusteringalgorithmen durchführen.

Aber ich bin nicht sicher, welcher Deskriptor als Frequenzdomänen-Feature verwendet wird, da es Amplitudenspektrum, Leistungsspektrum und Phasenspektrum eines Signals gibt und ich einige Referenzen gelesen habe, aber immer noch verwirrt über die Signifikanz bin. Und welche Distanz- (Ähnlichkeits-) Funktion sollte als Messung verwendet werden, wenn Lernalgorithmen auf frequenzdomänenbasierten Merkmalsvektoren (Euklidische Distanz & ndash; Kosinusentfernung & ndash; Gaußsche Funktion & ndash; Chi-Kern oder etwas anderes?) & Thgr; Hoffe jemand gibt mir einen Hinweis oder etwas Material, auf das ich verweisen kann, danke ~

Bearbeiten

Dank @DrKoch wählte ich ein räumliches Element mit der größten L-1 Norm und zeichnete seine log power spectrum in Python und es zeigte einige markante Peaks, darunter ist mein Code und die Figur %Vor%

Und ich habe einige triviale Fragen zu stellen, um sicherzustellen, dass ich Ihren Vorschlag völlig verstehe:

  • In Ihrem zweiten Vorschlag haben Sie gesagt, dass "alle diese Werte ignorieren" sollte.

    Meinst du, die horizontale Linie repräsentiere den Schwellenwert und alle darunter liegenden Werte sollten dem Wert Null zugeordnet werden?
  • "Sie können nach den zwei, drei größten Spitzen suchen und deren Position und wahrscheinlich Breiten als 'Merkmale' für die weitere Klassifizierung verwenden."

    Ich bin etwas verwirrt über die Bedeutung von "Ort" und "Breite", bezieht sich "Ort" auf den logarithmischen Wert des Leistungsspektrums (y-Achse) und bezieht sich "Breite" auf die Frequenz (x-Achse)? Wenn ja, wie kombiniere ich sie als Merkmalsvektor und vergleiche zwei Merkmalsvektoren von "ähnlicher Häufigkeit und ähnlicher Breite" ?

Bearbeiten

Ich habe np.fft.fft durch np.fft.rfft ersetzt, um den positiven Teil zu berechnen und sowohl das Leistungsspektrum als auch das logarithmische Leistungsspektrum darzustellen.

Code: %Vor% Zahl:

Bitte korrigieren Sie mich, wenn ich falsch liege:

Ich denke, ich sollte die letzten vier Spitzenwerte in erster Zahl mit power = np.abs(sp) ** 2 und power[power < threshold] = 0 beibehalten, da das logarithmische Leistungsspektrum den Unterschied zwischen den einzelnen Komponenten reduziert. Und dann verwenden Sie das Log-Spektrum der neuen Potenz als Feature-Vektor, um Klassifikatoren zu füttern.

Ich sehe auch, dass in einigen Referenzen vorgeschlagen wird, eine Fensterfunktion (z. B. Hamming-Fenster) anzuwenden, bevor fft ausgeführt wird, um spektrales Lecken zu vermeiden . Meine Rohdaten werden alle 5 bis 15 Sekunden abgetastet und ich habe ein Histogramm auf die Abtastzeit angewendet, entspricht diese Methode der Anwendung einer Fensterfunktion oder muss ich sie trotzdem auf die Histogrammdaten anwenden?

    
AnnabellChan 18.12.2014, 12:19
quelle

1 Antwort

11

Im Allgemeinen sollten Sie nur eine kleine Anzahl von "Features" aus dem kompletten FFT-Spektrum extrahieren.

Erstens: Verwenden Sie die Protokollleistungsspezifikation. Komplexe Zahlen und Phasen sind unter diesen Umständen nutzlos, da sie davon abhängen, wo Sie Ihre Datenerfassung (neben vielen anderen Dingen) starten / stoppen.

Zweitens: Sie werden einen "Rauschpegel" sehen, z. Die meisten Werte liegen unter einem bestimmten Schwellenwert. Ignorieren Sie alle diese Werte.

Drittens: Wenn Sie Glück haben, z.B. Ihre Daten haben einen gewissen harmonischen Inhalt (Zyklen, Wiederholungen). Sie werden einige prominente Peaks sehen.

Wenn es deutliche Spitzen gibt, ist es noch einfacher, das Rauschen zu erkennen: Alles zwischen den Spitzen sollte als Rauschen betrachtet werden.

Nun können Sie nach den zwei, drei größten Spitzen suchen und ihre Position und wahrscheinlich Breiten als "Merkmale" für die weitere Klassifizierung verwenden.

Ort ist der x-Wert des Maximums, d.h. die "Frequenz". Es sagt etwas wie "schnell" Ihre Zyklen in den Eingabedaten sind.

Wenn Ihre Zyklen während des Messintervalls keine konstante Frequenz haben (oder Sie verwenden ein Fenster, bevor Sie die FFT kappen), ist der Peak breiter als ein Bin. Also sagt diese Breite des Gipfels etwas über die 'Stabilität' Ihrer Zyklen aus.

Darauf basierend: Zwei Muster sind ähnlich, wenn die größten Spitzen beider hava eine ähnliche Frequenz und eine ähnliche Breite haben, und so weiter.

BEARBEITEN

Sehr interessant, um ein logarithmisches Energiespektrum eines Ihrer Beispiele zu sehen.

Nun ist klar, dass Ihr Input eine einzelne harmonische (periodische, oszillierende) Komponente mit einer Frequenz (Wiederholungsrate, Zyklusdauer) von etwa f0 = 0.04 enthält. (Dies ist die relative Frequenz, die proportional zu Ihrer Abtastfrequenz ist, die Umkehrung der Zeit zwischen einzelnen Meßpunkten)

Es ist keine pute Sinuswelle, sondern eine "interessante" Wellenform. Solche Wellenformen erzeugen Spitzen bei 1 · f0, 2 · f0, 3 · f0 und so weiter. (Die Verwendung einer FFT zur weiteren Analyse stellt sich als sehr gute Idee heraus)

An dieser Stelle sollten Sie Spektren von mehreren Messungen erzeugen und sehen, was eine ähnliche Messung macht und wie unterschiedlich die Messungen sind. Was sind die "wichtigen" Merkmale, um Ihre Messungen zu unterscheiden? Denkt nach:

  • Absolute Amplitude: Höhe der markanten (am weitesten links liegenden, höchsten) Peaks.
  • Pitch (Hauptzyklusrate, Änderungsgeschwindigkeit): Dies ist die Position des ersten Peaks, Abstand zwischen aufeinanderfolgenden Peaks.
  • Exakter Signalverlauf: Relative Amplitude der ersten paar Peaks.

Wenn Ihr wichtigstes Merkmal eine absolute Amplitude ist, sollten Sie besser den RMS-Wert (Root Mean Square) unseres Eingangssignals berechnen.

Wenn Tonhöhe wichtig ist, sollten Sie die ACF (Autokorrelationsfunktion) Ihres Eingangssignals besser berechnen.

Konzentrieren Sie sich nicht auf die äußersten linken Spitzen, diese kommen von den hochfrequenten Komponenten in Ihrer Eingabe und neigen dazu, so viel wie das Grundrauschen zu variieren.

Windows

Für eine qualitativ hochwertige Analyse ist es wichtig, vor der Anwendung der FFT ein Fenster auf die Eingabedaten anzuwenden. Dies reduziert die Infulen des "Jumps" zwischen dem Ende Ihres Eingabevektors und dem Anfang Ihres Eingabevektors, da die FFT die Eingabe als einen einzelnen Zyklus betrachtet.

Es gibt mehrere populäre Fenster, die verschiedene Möglichkeiten eines unvermeidlichen Kompromisses markieren: Präzision eines einzelnen Peaks vs. Pegel von Nebenkeulen:

Sie haben ein "rechteckiges Fenster" gewählt (entspricht überhaupt keinem Fenster, starten / stoppen Sie einfach Ihre Messung). Dies ermöglicht eine ausgezeichnete Genauigkeit Ihrer Peaks, die jetzt nur eine Stichbreite haben. Ihre Nebenkeulen (die kleinen Spitzen links und rechts von Ihren Hauptspitzen) liegen bei -21dB und sind aufgrund Ihrer Eingabedaten sehr erträglich. In Ihrem Fall ist dies eine ausgezeichnete Wahl.

Ein Hanning-Fenster ist eine einzelne Kosinuswelle. Es macht Ihre Spitzen etwas breiter, reduziert aber die Nebenkeulen.

Das Hammimg-Fenster (Cosinus-Welle, etwas über 0,0 angehoben) erzeugt noch breitere Peaks, unterdrückt aber Seitenlappen um -42 dB. Dies ist eine gute Wahl, wenn Sie weitere schwache (aber wichtige) Komponenten zwischen Ihren Hauptspitzen erwarten oder generell, wenn Sie komplizierte Signale wie Sprache, Musik usw. haben.

Bearbeiten: Skalierung

Korrekte Skalierung eines Spektrums ist eine komplizierte Sache, weil die Werte der FFT-Zeilen von Dingen wie Abtastrate, Länge der FFT, Fenster und sogar Implementierungsdetails des FFT-Algorithmus abhängen (es existieren mehrere verschiedene akzeptierte Konventionen) .

Schließlich sollte die FFT die zugrunde liegende Energieerhaltung zeigen. Der Effektivwert des Eingangssignals sollte dem RMS (Energie) des Spektrums entsprechen.

Andererseits: Wenn für die Klassifizierung verwendet, genügt es, die relativen Amplituden beizubehalten. Solange sich die oben genannten Parameter nicht ändern, kann das Ergebnis ohne weitere Skalierung zur Klassifizierung verwendet werden.

    
DrKoch 18.12.2014, 12:29
quelle