Sunday 22 October 2017

Moving Average Gauss Fenster


Die Wissenschaftler und Ingenieure Leitfaden für digitale Signalverarbeitung Von Steven W. Smith, Ph. D. Kapitel 15: Verschieben von Durchschnittsfiltern Verwandte des Moving Average Filters In einer perfekten Welt müssten Filter-Designer nur mit Zeitdomänen - oder frequenzbereichskodierten Informationen umgehen, aber niemals eine Mischung aus beiden im selben Signal. Leider gibt es einige Anwendungen, bei denen beide Domains gleichzeitig wichtig sind. Zum Beispiel, Fernsehsignale fallen in diese fiese Kategorie. Die Videoinformation wird im Zeitbereich kodiert, dh die Form der Wellenform entspricht den Mustern der Helligkeit in dem Bild. Während der Übertragung wird das Videosignal jedoch entsprechend seiner Frequenzzusammensetzung, wie etwa seiner Gesamtbandbreite, behandelt, wie die Trägerwellen für die Tonampelfarbe addiert werden, die Eliminierungsampere-Wiederherstellung der Gleichspannungskomponente usw. Als ein anderes Beispiel ist eine elektromagnetische Interferenz Wird am besten im Frequenzbereich verstanden, auch wenn die Signalinformation im Zeitbereich codiert wird. Zum Beispiel könnte die Temperaturüberwachung in einem wissenschaftlichen Experiment mit 60 Hertz von den Stromleitungen, 30 kHz von einem Schaltnetzteil oder 1320 kHz von einer lokalen AM-Funkstation verunreinigt sein. Verwandte des gleitenden Durchschnittsfilters weisen eine bessere Frequenzbereichsleistung auf und können in diesen gemischten Domänenanwendungen nützlich sein. Multiple-Pass-Gleit-Durchschnittsfilter beinhalten, daß das Eingangssignal zweimal oder mehrmals durch einen gleitenden Durchschnittsfilter geleitet wird. Abbildung 15.3a zeigt den Gesamtfilterkern, der aus einem, zwei und vier Durchgängen resultiert. Zwei Durchläufe entsprechen der Verwendung eines dreieckigen Filterkerns (eines rechteckigen Filterkerns, der mit sich selbst konstruiert wurde). Nach vier oder mehr Pässen sieht der äquivalente Filterkernel wie ein Gaußscher (Rückruf des zentralen Grenzwertsatzes) aus. Wie in (b) gezeigt, erzeugen mehrere Durchgänge eine s-förmige Sprungantwort im Vergleich zu der geraden Linie des einzigen Durchgangs. Die Frequenzantworten in (c) und (d) sind durch Gl. 15-2 multipliziert mit sich für jeden Durchlauf. Das heißt, jede Zeitbereichs-Faltung führt zu einer Multiplikation der Frequenzspektren. Abbildung 15-4 zeigt den Frequenzgang zweier anderer Verwandter des gleitenden Durchschnittsfilters. Wenn ein reiner Gaußscher als Filterkern verwendet wird, ist der Frequenzgang auch ein Gaußscher, wie in Kapitel 11 erläutert. Der Gaußsche ist wichtig, weil er die Impulsantwort vieler natürlicher und künstlicher Systeme ist. Beispielsweise wird ein kurzer Lichtimpuls, der in eine lange faseroptische Übertragungsleitung eintritt, als ein Gaußscher Impuls aufgrund der unterschiedlichen Pfade, die von den Photonen innerhalb der Faser aufgenommen werden, austreten. Der Gaußsche Filterkernel wird auch weitgehend in der Bildverarbeitung verwendet, da er einzigartige Eigenschaften hat, die schnelle zweidimensionale Windungen ermöglichen (siehe Kapitel 24). Der zweite Frequenzgang in Fig. 15-4 entspricht der Verwendung eines Blackman-Fensters als Filterkernel. (Der Begriff Fenster hat hier keine Bedeutung, er ist einfach Teil des akzeptierten Namens dieser Kurve). Die genaue Form des Blackman-Fensters ist in Kapitel 16 gegeben (Gleichung 16-2, Abb. 16-2), sie sieht jedoch sehr ähnlich wie ein Gaußscher. Wie sind diese Verwandten des gleitenden Durchschnittsfilters besser als der gleitende Mittelfilter selbst? Drei Wege: Erstens, und am wichtigsten, haben diese Filter eine bessere Stopbanddämpfung als das gleitende Mittelfilter. Zweitens verjüngen sich die Filterkerne zu einer kleineren Amplitude nahe den Enden. Es sei daran erinnert, dass jeder Punkt in dem Ausgangssignal eine gewichtete Summe einer Gruppe von Abtastungen von dem Eingang ist. Wenn sich der Filterkern verjüngt, werden die Abtastwerte im Eingangssignal, die weiter entfernt sind, weniger Gewicht als die in der Nähe befindlichen. Drittens sind die Schrittantworten glatte Kurven, und nicht die abrupte gerade Linie des gleitenden Durchschnitts. Diese letzten beiden sind in der Regel von begrenztem Nutzen, obwohl Sie Anwendungen finden könnten, wo sie echte Vorteile sind. Der gleitende Durchschnittsfilter und seine Verwandten sind alle ungefähr gleich, wenn man zufälliges Rauschen reduziert, während eine scharfe Sprungantwort beibehalten wird. Die Mehrdeutigkeit liegt darin, wie die Anstiegszeit der Sprungantwort gemessen wird. Wenn die Anstiegszeit von 0 bis 100 des Schritts gemessen wird, ist der gleitende Durchschnittsfilter das beste, was Sie tun können, wie zuvor gezeigt. Im Vergleich dazu misst die Messung der Risse von 10 bis 90 das Blackman-Fenster besser als das gleitende Mittelfilter. Der Punkt ist, das ist nur theoretische Squabbeln betrachten diese Filter gleich in diesem Parameter. Der größte Unterschied in diesen Filtern ist die Ausführungsgeschwindigkeit. Unter Verwendung eines rekursiven Algorithmus (beschrieben als nächstes) läuft der gleitende Durchschnittfilter wie ein Blitz in Ihrem Computer. In der Tat ist es die schnellste digitale Filter zur Verfügung. Mehrere Durchgänge des gleitenden Durchschnitts werden entsprechend langsamer, aber immer noch sehr schnell sein. Im Vergleich dazu sind die Gauß - und die Blackman-Filter quälend langsam, weil sie die Faltung verwenden müssen. Denken Sie einen Faktor von zehnmal die Anzahl der Punkte im Filterkernel (basierend auf der Multiplikation, die etwa zehnmal langsamer als die Addition ist). Zum Beispiel erwarten, dass ein 100-Punkt-Gaussian 1000-mal langsamer als ein gleitender Durchschnitt mit Rekursion. Diese HTML-Version von wird für die Bequemlichkeit zur Verfügung gestellt, aber es ist nicht das beste Format für das Buch. Insbesondere werden einige der Symbole nicht korrekt wiedergegeben. Vielleicht möchten Sie die PDF-Version lesen. Kapitel XA08XA0XA0Filtern und Falten In diesem Kapitel präsentiere ich eine der wichtigsten und nützlichen Ideen im Zusammenhang mit der Signalverarbeitung: Der Faltungssatz. Aber bevor wir den Konvolutionstheorem verstehen können, müssen wir die Faltung verstehen. IX2019ll beginnen mit einem einfachen Beispiel, Glättung und weX2019ll gehen von dort aus. Der Code für dieses Kapitel ist in chap08.ipynb. Die sich im Repository für dieses Buch befindet (siehe AbschnittXA0 0.2). Sie können es auch bei tinyurl / thinkdsp08. 8.1XA0XA0Smoothing Abbildung 8.1: Täglicher Schlusskurs der Facebook-Aktie und 30 Tage gleitender Durchschnitt. Glättung ist eine Operation, die versucht, kurzfristige Variationen aus einem Signal zu entfernen, um langfristige Trends aufzudecken. Zum Beispiel, wenn Sie tägliche Änderungen in den Preis einer Aktie plotten, würde es aussehen geräuschvoll ein Glättungsoperator könnte es leichter zu sehen, ob der Preis im Allgemeinen ging nach oben oder unten im Laufe der Zeit. Ein üblicher Glättungsalgorithmus ist ein gleitender Durchschnitt, der den Mittelwert der vorhergehenden n Werte für einen Wert von n berechnet. Zum Beispiel zeigt AbbildungXA0 8.1 den täglichen Schlusskurs von Facebook vom 17. Mai 2012 bis zum 8. Dezember 2015. Die graue Linie ist die Rohdaten, die dunklere Linie zeigt den 30-Tage gleitenden Durchschnitt. Glättung entfernt die extremsten Änderungen und macht es leichter, langfristige Trends zu sehen. Glättungsvorgänge gelten auch für Tonsignale. Als Beispiel beginnt IX2019ll mit einer Rechteckwelle bei 440 Hz. Wie wir in Abschnitt XA0 2.2 gesehen haben. Die Harmonischen einer Rechteckwelle fallen langsam ab, so dass sie viele hochfrequente Komponenten enthält. Erste IX2019ll konstruieren das Signal und zwei Wellen: Welle ist ein 1-Sekunden-Segment des Signalsegments ist eine kürzere Scheibe IX2019ll für Plotten verwenden. Um den gleitenden Durchschnitt dieses Signals zu berechnen, verwenden IX2019ll ein Fenster ähnlich dem in SectionXA0 3.7. Bisher verwendeten wir ein Hamming-Fenster, um spektrale Leckagen zu vermeiden, die durch Diskontinuität am Anfang und am Ende eines Signals verursacht wurden. Allgemeiner können wir Fenster verwenden, um die gewichtete Summe von Samples in einer Welle zu berechnen. Zum Beispiel, um einen gleitenden Durchschnitt zu berechnen, erstellen IX2019ll ein Fenster mit 11 Elementen und normalisieren es, so dass die Elemente bis zu 1. Jetzt kann ich berechnen, den Durchschnitt der ersten 11 Elemente durch Multiplikation des Fensters mit dem Wellenfeld: gepolstert ist ein Version des Fensters mit Nullen hinzugefügt, um das Ende, so dass es die gleiche Länge wie segment. ys ist. Das Hinzufügen von Nullen wird als padding bezeichnet. Prod ist das Produkt aus dem Fenster und dem Wellenfeld. Die Summe der elementaren Produkte ist der Durchschnitt der ersten 11 Elemente des Arrays. Da diese Elemente alle -1 sind, ist ihr Durchschnitt -1. Abbildung 8.2: Ein quadratisches Signal bei 400 Hz (grau) und ein 11-gliedriger gleitender Durchschnitt. Um das nächste Element des gleitenden Mittelwerts zu berechnen, rollen wir das Fenster, das die Punkte nach rechts verschiebt und einen der Nullen vom Ende bis zum Anfang wickelt. Wenn wir das gerollte Fenster und das Wellenfeld multiplizieren, erhalten wir den Mittelwert der nächsten 11 Elemente des Wellenfeldes, beginnend mit dem zweiten. Das Ergebnis ist -1. Wir können den Rest der Elemente auf die gleiche Weise berechnen. Die folgende Funktion verpackt den Code, den wir bisher in einer Schleife gesehen haben, und speichert die Ergebnisse in einem Array. Geglättet ist das Array, das die Ergebnisse gefüllt enthält, ist ein Array, das das Fenster enthält und genügend Nullen, um die Länge N haben und gerollt ist eine Kopie von gepolstert, die nach rechts verschoben wird durch ein Element jedes Mal durch die Schleife. Innerhalb der Schleife multiplizieren wir ys mit gerollt, um 11 Elemente auswählen und addieren sie. AbbildungXA0 8.2 zeigt das Ergebnis für eine Rechteckwelle. Die graue Linie ist das ursprüngliche Signal, die dunklere Linie ist das geglättete Signal. Das geglättete Signal beginnt aufzusteigen, wenn die Vorderkante des Fensters den ersten Übergang erreicht und sich ausschaltet, wenn das Fenster den Übergang kreuzt. Infolgedessen sind die Übergänge weniger abrupt und die Ecken weniger scharf. Wenn Sie das geglättete Signal hören, klingt es weniger buzzig und leicht gedämpft. 8.2XA0XA0Convolution Die soeben durchgeführte Operation X2013, die eine Fensterfunktion auf jedes überlappende Segment einer Welle X2013 anwendet, wird als Faltung bezeichnet. Faltung ist es eine solche gemeinsame Operation, dass NumPy bietet eine Implementierung, die einfacher und schneller als meine Version ist: np. convolve berechnet die Faltung des Wellenfeldes und das Fenster. Der Modus-Flag gültig zeigt an, dass er nur Werte berechnen sollte, wenn das Fenster und das Wellenfeld vollständig überlappen, also stoppt es, wenn die rechte Kante des Fensters das Ende des Wellenfeldes erreicht. Ansonsten ist das Ergebnis das gleiche wie in Abbildung XA0 8.2. Eigentlich gibt es einen anderen Unterschied. Die Schleife im vorherigen Abschnitt berechnet tatsächlich Kreuzkorrelation. (F XA0X22C6XA0 g) n XA0XA0 Die Glättung macht die Übergänge in einem Rechtecksignal weniger abrupt und macht den Ton etwas gedämpft. LetX2019s sehen, welchen Effekt diese Operation auf das Spektrum hat. Das erste IX2019ll Diagramm das Spektrum der ursprünglichen Welle: Dann die geglättete Welle: Das Modus-Flag gleich bedeutet, dass das Ergebnis die gleiche Länge wie die Eingabe haben sollte. In diesem Beispiel wird es ein paar Werte, die X201Cwrap aroundX201D, aber thatX2019s ok für jetzt. AbbildungXA0 8.3 zeigt das Ergebnis. Die Grundfrequenz ist fast unverändert, die ersten Harmonischen sind abgeschwächt und die höheren Harmonischen sind fast eliminiert. So hat die Glättung die Wirkung eines Tiefpassfilters, den wir in AbschnittXA0 1.5 und AbschnittXA0 4.4 gesehen haben. Um zu sehen, wie viel jede Komponente gedämpft worden ist, können wir das Verhältnis der beiden Spektren berechnen: Verhältnis ist das Verhältnis der Amplitude vor und nach der Glättung. Wenn Amps klein sind, kann dieses Verhältnis groß und laut sein, so für die Einfachheit setze ich das Verhältnis auf 0, außer wo die Oberschwingungen sind. Abbildung 8.4: Verhältnis der Spektren für die Rechteckwelle vor und nach der Glättung. AbbildungXA0 8.4 zeigt das Ergebnis. Wie erwartet ist das Verhältnis für niedrige Frequenzen hoch und fällt mit einer Grenzfrequenz nahe 4000 Hz ab. Aber es gibt ein weiteres Merkmal, das wir nicht erwartet haben: oberhalb des Cutoffs springt das Verhältnis zwischen 0 und 0,2. Abbildung 8.5: Verhältnis der Spektren für die Rechteckwelle vor und nach der Glättung zusammen mit der DFT des Glättungsfensters. Die Antwort ist der Faltungssatz. Mathematisch angeben: DFT (f XA0X2217XA0 g) XA0XA0 DFT (f) XA0XB7XA0 DFT (g) XA0 wobei f ein Wellenfeld und g ein Fenster ist. In Worten, die Faltung Theorem sagt, dass, wenn wir f und g falten. Und dann die DFT zu berechnen, erhalten wir die gleiche Antwort wie die Berechnung der DFT von f und g. Und dann die Ergebnisse elementweise multipliziert. Wenn wir eine Operation wie eine Faltung einer Welle einer Welle anwenden, sagen wir, dass wir im Zeitbereich arbeiten. Weil die Welle eine Funktion der Zeit ist. Wenn wir eine Operation wie Multiplikation auf die DFT anwenden, arbeiten wir im Frequenzbereich. Da die DFT eine Funktion der Frequenz ist. Mit diesen Begriffen können wir den Convolution Theorem genauer beschreiben: Die Faltung im Zeitbereich entspricht der Multiplikation im Frequenzbereich. Und das erklärt FigureXA0 8.4. Denn wenn wir eine Welle und ein Fenster zusammenfalten, multiplizieren wir das Spektrum der Welle mit dem Spektrum des Fensters. Um zu sehen, wie das funktioniert, können wir die DFT des Fensters berechnen: gepolstert enthält das Glättungsfenster, mit Nullen aufgefüllt, um die gleiche Länge zu sein wie Welle dftwindow enthält die DFT von gepolstert. FigureXA0 8.5 zeigt das Ergebnis zusammen mit den im vorherigen Abschnitt berechneten Verhältnissen. Die Verhältnisse sind genau die Amplituden im dft-Fenster. Mathematisch: abs (DFT (f XA0X2217XA0 g)) XA0 / XA0 abs (DFT (f)) XA0XA0 abs (DFT (g)) XA0 In diesem Zusammenhang wird die DFT eines Fensters als Filter bezeichnet. Für jedes Faltungsfenster im Zeitbereich gibt es im Frequenzbereich ein entsprechendes Filter. Und für jeden Filter, der durch elementweise Multiplikation im Frequenzbereich ausgedrückt werden kann, gibt es ein entsprechendes Fenster. 8.5XA0XA0Gaußscher Filter Im Abschnitt XA0 8.2 habe ich Definitionen von Kreuzkorrelation und Faltung vorgestellt, und wir haben gesehen, dass sie fast die gleichen sind, außer dass bei der Faltung das Fenster umgekehrt wird. Nun, da wir einen effizienten Algorithmus für die Faltung haben, können wir auch verwenden, um Kreuz-Korrelationen und Autokorrelationen zu berechnen. Mit den Daten aus dem vorherigen Abschnitt, können wir berechnen, die Autokorrelation Facebook Aktienkurse: Mit modeX2019sameX2019. Das Ergebnis hat die gleiche Länge wie nahe. Was den Verzögerungen von X2212 N / 2 bis N / 2X22121 entspricht. Die graue Linie in Bild XA0 8.8 zeigt das Ergebnis. Außer bei lag0. Gibt es keine Peaks, so dass es kein offensichtliches periodisches Verhalten in diesem Signal gibt. Allerdings fällt die Autokorrelationsfunktion langsam ab, was darauf hinweist, dass dieses Signal rosa Rauschen ähnelt, wie wir in Abschnitt XA0 5.3 gesehen haben. Um die Autokorrelation mit Faltung zu berechnen, müssen wir das Signal auf Null verdoppeln. Dieser Trick ist notwendig, da die FFT auf der Annahme beruht, dass das Signal periodisch ist, dass es von Anfang bis Anfang wickelt. Bei Zeitreihen-Daten wie dieser ist diese Annahme ungültig. Hinzufügen von Nullen, und dann Trimmen der Ergebnisse, entfernt die falschen Werte. Denken Sie auch daran, dass die Faltung die Richtung des Fensters umkehrt. Um diesen Effekt abzubrechen, kehren wir die Richtung des Fensters um, bevor wir fftconvolve aufrufen. Unter Verwendung von np. flipud. Die ein NumPy-Array umwandelt. Das Ergebnis ist eine Ansicht des Arrays, keine Kopie, daher ist dieser Vorgang schnell. Das Ergebnis von fftconvolve hat die Länge 2 N. Von diesen sind das erste und letzte N / 2 gültig der Rest ist das Ergebnis einer Null-Auffüllung. Um das gültige Element auszuwählen, rollen wir die Ergebnisse und wählen das erste N., das den Verzögerungen von X2212 N / 2 zu N / 2X22121 entspricht. Wie in Abbildung XA0 8.8 gezeigt, sind die Ergebnisse von fftautocorr und np. correlate identisch (mit etwa 9 Ziffern der Genauigkeit). Beachten Sie, dass die Korrelationen in Abbildung XA0 8.8 sind große Zahlen, die wir sie normalisieren könnte (zwischen -1 und 1) wie in Abschnitt XA0 5.6 gezeigt. Die hier verwendete Strategie zur Autokorrelation funktioniert auch bei der Kreuzkorrelation. Wieder müssen Sie die Signale vorbereiten, indem Sie eins spiegeln und beide füllen und dann müssen Sie die ungültigen Teile des Ergebnisses trimmen. Diese Polsterung und Beschneidung ist ein Ärgernis, aber thatX2019s, warum Bibliotheken wie NumPy Funktionen für Sie tun. 8.8XA0XA0Exercises Lösungen zu diesen Übungen sind in chap08soln. ipynb. ExerciseXA01 XA0XA0 Das Notebook für dieses Kapitel ist chap08.ipynb. Lesen Sie es durch und führen Sie den Code. Es enthält ein interaktives Widget, mit dem Sie mit den Parametern des Gaußschen Fensters experimentieren können, um zu sehen, welchen Effekt sie auf die Cutoff-Frequenz haben. Was geht falsch, wenn Sie die Breite des Gaußschen std erhöhen, ohne die Anzahl der Elemente im Fenster zu erhöhen, M ExerciseXA02 XA0XA0 In diesem Kapitel behauptete ich, dass die Fourier-Transformation einer Gaußschen Kurve auch eine Gaußsche Kurve ist. Für diskrete Fourier-Transformationen ist diese Beziehung annähernd wahr. Probieren Sie es aus für ein paar Beispiele. Was passiert mit der Fourier-Transformation, wenn Sie std variieren? ExerciseXA03 XA0XA0 Wenn Sie die Übungen in Kapitel XA0 3 durchgeführt haben, sehen Sie die Auswirkungen des Hamming-Fensters und einiger der anderen Fenster, die von NumPy bereitgestellt werden, auf spektrale Leckage. Wir können einen Einblick in die Wirkung dieser Fenster erhalten, indem wir ihre DFTs betrachten. Zusätzlich zu dem in diesem Kapitel verwendeten Gaussian-Fenster erstellen Sie ein Hamming-Fenster mit der gleichen Größe. Zero-pad die Fenster und plotten ihre DFTs. Welches Fenster fungiert als ein besseres Tiefpassfilter Sie können es sinnvoll finden, die DFTs auf einer logischen Skala darzustellen. Experimentieren Sie mit ein paar verschiedenen Fenstern und ein paar verschiedene Größen. Sind Sie mit einem unserer Bücher in einer Klasse Wed gerne darüber wissen. Bitte füllen Sie diese kurze Umfrage aus.

No comments:

Post a Comment