Gibt es einen Fachbegriff für diese einfache Methode, ein Signal zu glätten?


26

Erstens bin ich neu in DSP und habe keine wirkliche Ausbildung darin, aber ich entwickle ein Audiovisualisierungsprogramm und repräsentiere ein FFT-Array als vertikale Balken wie in einer typischen Frequenzspektrumsvisualisierung.

Das Problem, das ich hatte, war, dass sich die Audiosignalwerte zu schnell änderten, um eine ansprechende visuelle Ausgabe zu erzielen, wenn ich nur die FFT-Werte direkt abbildete:

Bildbeschreibung hier eingeben

Deshalb wende ich eine einfache Funktion auf die Werte an, um das Ergebnis zu "glätten":

// pseudo-code
delta = fftValue - smoothedFftValue;
smoothedFftValue += delta * 0.2; 
// 0.2 is arbitrary - the lower the number, the more "smoothing"

Mit anderen Worten, ich nehme den aktuellen Wert und vergleiche ihn mit dem letzten und addiere dann einen Bruchteil dieses Deltas zum letzten Wert. Das Ergebnis sieht so aus:

Bildbeschreibung hier eingeben

Meine Frage lautet also:

  1. Ist dies ein etabliertes Muster oder eine Funktion, für die ein Begriff bereits existiert? Ist das so, was ist der Begriff? Ich verwende oben "Glätten", aber mir ist bewusst, dass dies etwas sehr Spezifisches in DSP bedeutet und möglicherweise nicht korrekt ist. Davon abgesehen schien es vielleicht mit einer Volumenhülle zu tun zu haben, aber auch nicht ganz dasselbe.

  2. Gibt es bessere Ansätze oder weiterführende Untersuchungen zu Lösungen, die ich prüfen sollte?

Vielen Dank für Ihre Zeit und Ihre Entschuldigung, falls dies eine blöde Frage ist (ich bin mir bewusst, dass meine Kenntnisse viel geringer sind als der Durchschnitt, der zu sein scheint).


1
Jetzt frage ich mich, was Sie bekommen, wenn Sie die geglättete FFT nehmen und sie invertieren.
user253751

Wäre es einfacher, die erste Antwort in einer anderen Reihenfolge zu geben? current_value = current_value * decay; if (new_value> current_value) {current_value = new_value; }
Richard Forster

@immibis Dies sollte nach meinem Verständnis ein Hall sein. Korrigiere mich, wenn ich falsch liege.
Andreas

Sicher, und ein optimierender Compiler wird die gleiche Implementierung produzieren. Der entscheidende Punkt war, das richtige Ergebnis zu erhalten, wenn (aktueller_Wert * Zerfall) <neuer_Wert <aktueller_Wert.
Richard Forster

2
Ich mag diese Frage wirklich. Dies ist einer der Fälle, in denen sich jemand, der ein paar Dinge ausprobiert, versehentlich am Ende eines riesigen Wissensbaums entdeckt (speziell Filter für unendliche Impulsantworten). Währenddessen können Leute, die bereits auf den Baum klettern, all die coolen Dinge beschreiben, die sie bereits zwischen den Zweigen entdeckt haben ...
DrMcCleod

Antworten:


37

Was Sie implementiert haben, ist ein einpoliger Tiefpassfilter, manchmal auch als Leaky Integrator bezeichnet . Ihr Signal hat die Differenzgleichung:

y[n]=0,8y[n-1]+0,2x[n]

x[n]y[n]


4
Vielen Dank dafür. Also so hilfreich. Wenn ich alleine google, fühle ich mich wie auf See, wenn es um DSP geht. Nur ein paar Begriffe zu suchen, gibt mir etwas zu begreifen.
Michael Bromley

3
Ich wundere mich. Ich denke, das OP wendet diesen Filter auf die Wertereihen in den einzelnen Bins im Frequenzbereich an. Ein normaler Tiefpass wird auf die Reihe von Abtastwerten im Zeitbereich angewendet. Ist der Effekt der gleiche (ich glaube nicht, weil die Hochfrequenzteile noch im Signal sind, aber… sich ihre Intensität langsamer ändert?)? Wenn nicht, können Sie erläutern, was der Filter tatsächlich mit dem Signal im Zeitbereich tut?
Jonas Schäfer

3
@JonasWielicki Ich denke Ziel ist es, jeden einzelnen Binwert zu glätten, damit er sich nicht sehr schnell ändert. Auch das Tiefpassfilter (wie in der Antwort erläutert) ist für alle Zeitreihen unabhängig von ihrer Domäne (Zeit oder Frequenz oder irgendetwas anderes) anwendbar.
Arpit Jain

@arpitjain Ich verstehe das. Ich möchte einfach wissen, ob es ein Verständnis dafür gibt (nicht unbedingt von Ihnen, dem OP oder dem Beantworter), wie es sich auf den Zeitbereich auswirkt, wenn Sie dies tun.
Jonas Schäfer

@JonasWielicki Die Operation ist eine Faltung im Frequenzbereich, dh, sie übersetzt sich in eine Multiplikation (der entsprechenden (inversen) Fourier-Transformationen) im Zeitbereich.
MBaz

17

Achtung: Dazu gehören Geschichte, alte Papiere (ich liebe sie) und Lochkarten!

ein=0,2

y(n)=y(n-1)+ein[x(n)-y(n-1)],
y(n)=einx(n)+(1-ein)y(n-1).

Die erste obige Version ist weniger natürlich, vermeidet jedoch eine Multiplikation und ist irgendwie effizienter. Beide Formeln ergeben einen linearen , kausalen und unendlichen Impulsantwortfilter . Die Geschichte geht zurück auf Poisson, Kolmogorov-Zurbenko Adaptive Filter , Brown (Statistical Forecasting for Inventory Control, McGraw-Hill, 1959), Holt (1957) und Winters (1960). Es wird als rekursives Filterungsschema implementiert, das in der Literatur unter verschiedenen Namen bekannt ist:

  • exponentielles Mittelungs -Tiefpassfilter erster Ordnung ,
  • Exponentieller Mittelwertbildner,
  • exponentielles Glätten ,
  • exponentieller gleitender Durchschnitt (EMA),
  • exponentiell gewichteter gleitender Durchschnitt (EWMA),
  • Browns einfaches (lineares) exponentielles Glätten (manchmal auch SES genannt),
  • Modell ARIMA (0,1,1) .

h[n]=(1-ein)u[n]einn

Für eine historische Bemerkung verwendeten Robert G. Brown und Arthur D. Little diese Methode 1956 in Exponential Smoothing zur Vorhersage der Nachfrage , anscheinend für die Tabakindustrie. Eine wenig mehr Geschichte und Erklärungen finden Sie in Teil I - Holt-Winter Forecasting for Dummies (oder Entwickler) . Peter Zehna gibt einen kritischen Überblick in Einige Bemerkungen zur exponentiellen Glättung , 1966. Ein Kapitel von R. Brown in der Encyclopedia of Operations Research und Management Science (Google books) geht auf das Jahr 1944 zurück. Die lesbaren Seiten sind hier wiedergegeben:

Exponentielle Glättung, p.  205, Encyclopedia of Operations Research und Management Science

Exponentielle Glättung, p.  206, Encyclopedia of Operations Research und Management Science

Viele Methoden erweitern diese Glättung, die nicht gültig ist, wenn die Daten einen Trend oder eine Saisonalität aufweisen. Einige davon sind als doppelt oder dreifach exponentielle Glättung und Holt-Winters-Filter bekannt .

Sie können auch überprüfen: Wie funktioniert dieser "einfache Filter"?


1
Danke, das ist ausgezeichnet. Wie bereits erwähnt, bin ich völlig neu in diesem Punkt, daher wird ein Teil Ihrer Antwort weitere Nachforschungen erfordern, die ich in vollem Umfang zu schätzen weiß, aber sie beantwortet mit Sicherheit meine und einige weitere Fragen. Wenn da nicht die andere, frühere Antwort, dann ist dies natürlich auch verdient Anerkennung als die Antwort.
Michael Bromley

1
Kleine Korrektur, Winters 1 (960) sollte Winters (1960) sein, nehme ich an
SGR

9

Gibt es bessere Ansätze oder weiterführende Untersuchungen zu Lösungen, die ich prüfen sollte?

Der normale Ansatz für Audiometer ist ein "verlustbehafteter Spitzenwertdetektor".

if new_value > current_value
  current_value = new_value;
else
 current_value = current_value * decay;  

Dies reagiert sofort auf neue Signale, Spitzen oder Transienten im Signal, bleibt jedoch eine Weile bestehen, sodass ein viel weniger hektisches Bild entsteht. Der Zerfall sollte eine Konstante zwischen 0 und 1 sein. Er steuert, wie schnell die Balken fertig sind, wobei 0 augenblicklich und 1 niemals ist.


Ich stelle fest, dass dies Ähnlichkeiten mit einer Aufgabe hat, die ich am College ausgeführt habe. Eine sehr dünn klingende MIDI-Datei (die in einer früheren Aufgabe erstellt wurde) wurde verbessert, indem die (vollständig rechteckigen) Notensignale mit einem Dreieck gefaltet (und skaliert) wurden Signal, das sehr stark anstieg (wenn auch nicht sofort) und dann allmählich abfiel, um eine scharfe Note zu erzeugen, die „natürlich“ verstummte . Deutliche Verbesserung des Klangs des Songs (in diesem Fall Fur Elise).
KRyan

Ich denke, Sie möchten behalten, new_valuewenn es größer ist alscurrent_value * decay
user276648

6

Um US DoD-Auftragnehmerkreise herum wird dieser bestimmte Filter häufig als "Alpha-Filter" bezeichnet, da er mit einem Parameter charakterisiert werden kann, der traditionell als "Alpha" bezeichnet wird.

Es ist direkt analog zu einem einfachen analogen RC-Tiefpassfilter.

Sie sind extrem einfach, haben schwerwiegende Einschränkungen, aber sie haben den unbestreitbaren Vorteil gegenüber komplexeren (und komplizierteren!) Filtern, die, wenn Sie sich von ihren Problembereichen fernhalten, die Arbeit erledigen.


3

Wie bereits in anderen Antworten erwähnt, handelt es sich um ein einpoliges rekursives Filter, eine Art Filter mit unendlicher Impulsantwort (Infinite Impulse Response, IIR).

Eine großartige Informationsquelle zu dieser und anderen DSP-Funktionen ist Steven W. Smiths Handbuch für Wissenschaftler und Ingenieure zur digitalen Signalverarbeitung : unendliche Impulsantwort (IIR)

... wird jeder Punkt im Ausgangssignal ermittelt, indem die Werte aus dem Eingangssignal mit den Koeffizienten "a" multipliziert werden, die zuvor berechneten Werte aus dem Ausgangssignal mit den Koeffizienten "b" multipliziert werden und die Produkte addiert werden dass es für b0 keinen Wert gibt, da dieser der zu berechnenden Stichprobe entspricht. Gleichung 19-1 wird als Rekursionsgleichung bezeichnet, und Filter, die sie verwenden, werden als rekursive Filter bezeichnet. Die Werte "a" und "b", die den Filter definieren, werden als Rekursionskoeffizienten bezeichnet.

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.