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
quelle
Antworten:
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 :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
Beispiele einiger Kernel:
quelle
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.
quelle
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).
quelle
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/
quelle
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).
quelle