Was ist Glättung in sehr grundlegenden Begriffen


17

Was ist Glätten und wie kann ich es machen?

Ich habe ein Array in Matlab, das das Amplitudenspektrum eines Sprachsignals (die Größe von 128 Punkten der FFT) ist. Wie kann ich das mit einem gleitenden Durchschnitt glätten? Nach meinem Verständnis sollte ich eine Fenstergröße von einer bestimmten Anzahl von Elementen nehmen, einen Durchschnitt bilden, und dies wird das neue 1. Element. Verschieben Sie dann das Fenster um ein Element nach rechts, nehmen Sie den Durchschnitt, der zum zweiten Element wird, und so weiter. Funktioniert das wirklich so? Ich bin mir nicht sicher, denn wenn ich das tue, werde ich in meinem Endergebnis weniger als 128 Elemente haben. Wie funktioniert es und wie hilft es, die Datenpunkte zu glätten? Oder gibt es eine andere Möglichkeit, Daten zu glätten?

BEARBEITEN: Link zur Folgefrage


Für ein Spektrum möchten Sie wahrscheinlich mehrere Spektren zusammen mitteln (in der Zeitdimension) und nicht einen laufenden Durchschnitt entlang der Frequenzachse eines einzelnen Spektrums
Endolith

@ endolith sind beide gültige Techniken. Die Mittelung im Frequenzbereich (manchmal als Danielle-Periodogramm bezeichnet) entspricht der Fensterung im Zeitbereich. Die Mittelung mehrerer Periodogramme ("Spektren") ist ein Versuch, die für das wahre Periodogramm (das sogenannte Welch-Periodogramm) erforderliche Ensemble-Mittelung nachzuahmen. Aus semantischen Gründen würde ich auch argumentieren, dass "Glätten" eine nicht-kausale Tiefpassfilterung ist. Siehe Kalman-Filterung vs. Kalman-Glättung, Wiener-Filterung vs. Wiener-Glättung usw. Es gibt eine nicht triviale Unterscheidung, und die Implementierung ist abhängig.
Bryan

Antworten:


23

Das Glätten kann auf viele Arten erfolgen, aber in sehr einfachen und allgemeinen Begriffen bedeutet dies, dass Sie ein Signal ausgleichen, indem Sie seine Elemente mit ihren Nachbarn mischen. Sie verschmieren / verwischen das Signal ein wenig, um das Rauschen zu beseitigen. Eine sehr einfache Glättungstechnik wäre beispielsweise, jedes Signalelement f(t)auf 0,8 des ursprünglichen Wertes zuzüglich 0,1 jedes seiner Nachbarn neu zu berechnen :

f'(t) = 0.1*f(t-1) + 0.8*f(t) + 0.1*f(t+1)

Beachten Sie, wie sich die Multiplikationsfaktoren oder Gewichte zu eins addieren. Wenn das Signal also ziemlich konstant ist, ändert sich durch die Glättung nicht viel. Enthielt das Signal jedoch eine plötzliche ruckartige Änderung, hilft der Beitrag der Nachbarn, dieses Rauschen ein wenig zu beseitigen.

Die Gewichte, die Sie in dieser Neuberechnungsfunktion verwenden, können als Kernel bezeichnet werden . Eine eindimensionale Gaußsche Funktion oder ein anderer grundlegender Kernel sollte in Ihrem Fall ausreichen.

Schönes Beispiel für eine besondere Art der Glättung:

Oben: ungeglättetes Signal
Unten: geglättetes Signal

Bildbeschreibung hier eingeben

Beispiele einiger Kernel:

Bildbeschreibung hier eingeben


Ist dies also ein gewichteter gleitender Durchschnitt? Wird dies als Fenstergröße 3 bezeichnet? Was ist mit dem 1. und dem letzten Element? Und wie würde dies geändert, wenn ich ein Array von 128 Elementen habe und ein Fenster mit 16 oder 32 Elementen verwenden möchte?

@ user13267: Ja, man könnte sagen, ein Glättungskernel ist ein gewichteter gleitender Durchschnitt. Wenn Sie einen einheitlichen Kernel verwenden (siehe zweites Bild), handelt es sich nur um einen einfachen gleitenden Durchschnitt. Sie haben Recht mit der Fenstergröße. Für den Umgang mit den Kanten gibt es drei grundlegende Ansätze: 1) Auffüllen Ihrer Daten mit Nullen, 2) Wiederholen des letzten Werts, 3) Spiegeln des Signals. In allen Fällen geben Sie Daten vor, damit Ihr Kernel nicht ins Nichts fällt.
15.

Würde Null-Polsterung nicht als ins Nichts fallen gelten? Am Ende des Prozesses des gleitenden Durchschnitts sollte mein neuer "gemittelter" Datensatz die gleiche Anzahl von Daten aufweisen wie das Original, nicht wahr? Wenn ich es dann am Anfang oder am Ende auf Null setze oder die letzten Daten wiederhole, wird dann nicht der Durchschnittswert an den Rändern des Arrays verschoben? Und wie würde das Spiegeln des Signals in Bezug auf die Anzahl der Datenbegriffe helfen? Gibt es irgendwo ein einfaches Tutorial dafür, das zeigt, wie der Prozess beispielsweise für 32 Datenpunkte und eine Fenstergröße von 4 oder 5 abläuft?

2
Wenn Ihr geglättetes Dataset dieselbe Länge haben soll wie das ursprüngliche Dataset, müssen Sie die Daten an den Endpunkten "zusammenstellen". Bei jeder Auswahl, die Sie für die Erstellung dieser Daten treffen, wird der Durchschnitt in irgendeiner Weise verzerrt. Durch Behandeln der Daten außerhalb der Grenzen als Spiegel des realen Datensatzes (dh unter der Annahme, dass die Stichprobe N + 1 mit N-1 identisch ist, N + 2 = N-2 usw.) bleiben die Frequenzspektrumseigenschaften von erhalten Endteile des Signals, während die Annahme einer Null- oder Nicht-Null-Wiederholung den Anschein erweckt, dass alle Frequenzen an den Enden abrollen.
Russell Borogove

8

Neben der netten Antwort von Junuxx möchte ich noch ein paar Notizen fallen lassen.

  • Das Glätten hängt mit dem Filtern zusammen (leider ziemlich vager Wikipedia-Artikel ) - Sie sollten den Glätter anhand seiner Eigenschaften auswählen.

  • Einer meiner Favoriten ist der Medianfilter . Dies ist ein Beispiel eines nichtlinearen Filters. Es hat einige interessante Eigenschaften, es bewahrt "Kanten" und ist unter großen Geräuschen ziemlich robust.

  • Wenn Sie ein Modell haben, wie sich Ihr Signal verhält, ist ein Kalman-Filter einen Blick wert. Seine Glättung ist tatsächlich eine Bayes'sche Maximum-Likelihood-Schätzung des Signals basierend auf Beobachtungen.


4

Beim Glätten werden Informationen aus benachbarten Abtastwerten verwendet, um die Beziehung zwischen benachbarten Abtastwerten zu ändern. Für endliche Vektoren gibt es an den Enden keine benachbarten Informationen zu einer Seite. Sie haben folgende Möglichkeiten: Glätten / Filtern Sie die Enden nicht, akzeptieren Sie einen kürzeren resultierenden geglätteten Vektor, bilden Sie Daten und glätten Sie diese (abhängig von der Genauigkeit / Nützlichkeit von Vorhersagen, die von den Enden ausgehen), oder verwenden Sie möglicherweise andere asymmetrische Glättungskerne bei die Enden (was den Informationsgehalt im Signal ohnehin verkürzt).


3

Sie finden den gesamten Matlab-Code zum Glätten des Filters für den gleitenden Durchschnitt für unterschiedliche Längen von Taps. www.gaussianwaves.com/2010/11/moving-average-filter-ma-filter-2/


1

Andere haben erwähnt, wie Sie glätten. Ich möchte erwähnen, warum das Glätten funktioniert.

Wenn Sie Ihr Signal richtig überabtasten, variiert es relativ wenig von einem Sample zum nächsten (Sample = Zeitpunkte, Pixel usw.), und es wird erwartet, dass es insgesamt glatt aussieht. Mit anderen Worten, Ihr Signal enthält nur wenige hohe Frequenzen, dh Signalkomponenten, die sich mit einer Rate ändern, die Ihrer Abtastrate ähnlich ist.

Messungen werden jedoch häufig durch Rauschen verfälscht. In erster Näherung betrachten wir das Rauschen normalerweise als eine Gauß-Verteilung mit dem Mittelwert Null und einer bestimmten Standardabweichung, die einfach über dem Signal addiert wird.

Um das Rauschen in unserem Signal zu reduzieren, gehen wir üblicherweise von den folgenden vier Annahmen aus: Rauschen ist zufällig, wird nicht zwischen Abtastwerten korreliert, hat einen Mittelwert von Null und das Signal ist ausreichend überabgetastet. Mit diesen Annahmen können wir einen gleitenden Durchschnittsfilter verwenden.

Betrachten Sie beispielsweise drei aufeinanderfolgende Stichproben. Da das Signal stark überabgetastet ist, kann angenommen werden, dass sich das zugrunde liegende Signal linear ändert, was bedeutet, dass der Durchschnitt des Signals über die drei Abtastwerte dem wahren Signal im mittleren Abtastwert entsprechen würde. Im Gegensatz dazu hat das Rauschen einen Mittelwert von Null und ist nicht korreliert, was bedeutet, dass sein Durchschnitt gegen Null tendieren sollte. Daher können wir einen gleitenden Durchschnittsfilter mit drei Stichproben anwenden, bei dem jede Stichprobe durch den Durchschnitt zwischen sich selbst und den beiden benachbarten Nachbarn ersetzt wird.

Je größer wir das Fenster machen, desto mehr wird das Rauschen natürlich auf Null gemittelt, aber desto weniger gilt unsere Annahme der Linearität des wahren Signals. Wir müssen also einen Kompromiss eingehen. Eine Möglichkeit, das Beste aus beiden Welten zu erzielen, besteht darin, einen gewichteten Durchschnitt zu verwenden, bei dem wir weiter entfernte Samples mit kleineren Gewichten versehen, um Rauscheffekte aus größeren Bereichen zu mitteln, während das wahre Signal nicht zu stark gewichtet wird, wenn es von unserer Linearität abweicht Annahme.

Wie Sie die Gewichte setzen sollten, hängt vom Rauschen, dem Signal, der Rechenleistung und natürlich vom Kompromiss zwischen dem Beseitigen des Rauschens und dem Einschneiden des Signals ab.

Beachten Sie, dass in den letzten Jahren eine Menge Arbeit geleistet wurde, um einige der vier Annahmen zu lockern, z. B. durch das Entwerfen von Glättungsschemata mit variablen Filterfenstern (anisotrope Diffusion) oder Schemata, die eigentlich keine Fenster verwenden überhaupt (nichtlokale Mittel).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.