Saturday, 21 October 2017

Moving Average Filter Matlab Conv


Ich muss einen gleitenden Durchschnitt über eine Datenreihe innerhalb einer for-Schleife berechnen. Ich muss den gleitenden Durchschnitt über N9 Tage erhalten. Das Array Im-Berechnen ist 4 Reihe von 365 Werten (M), die selbst Mittelwerte eines anderen Satzes von Daten sind. Ich möchte die Mittelwerte meiner Daten mit dem gleitenden Durchschnitt in einem Diagramm darstellen. Ich googeln ein wenig über gleitende Durchschnitte und den conv Befehl und fand etwas, das ich versuchte, in meinem Code umzusetzen: So grundsätzlich berechne ich meinen Durchschnitt und plot ihn mit einem (falschen) gleitenden Durchschnitt. Ich wählte die wts Wert direkt an der Mathworks-Website, so dass ist falsch. (Quelle: mathworks. nlhelpeconmoving-average-trend-estimation. html) Mein Problem aber ist, dass ich nicht verstehe, was dieses wts ist. Könnte jemand erklären, wenn es etwas mit den Gewichten der Werte zu tun hat: das ist in diesem Fall ungültig. Alle Werte werden gleich gewichtet. Und wenn ich das völlig falsch mache, könnte ich etwas Hilfe dabei haben Mein aufrichtigster Dank. Die Verwendung von conv ist eine hervorragende Möglichkeit, einen gleitenden Durchschnitt zu implementieren. In dem Code, den Sie verwenden, ist wts, wie viel Sie jeden Wert wiegen (wie Sie ahnen). Die Summe dieses Vektors sollte immer gleich Eins sein. Wenn Sie jeden Wert gleichmäßig gewichten und eine Größe N bewegten Filter dann tun möchten, würden Sie tun möchten Mit dem gültigen Argument in conv wird mit weniger Werten in Ms, als Sie in M ​​haben. Verwenden Sie diese, wenn Sie dont die Auswirkungen von Nullpolsterung. Wenn Sie die Signalverarbeitung Toolbox haben, können Sie cconv verwenden, wenn Sie einen kreisförmigen gleitenden Durchschnitt ausprobieren möchten. Etwas wie Sie sollten die conv und cconv Dokumentation für weitere Informationen lesen, wenn Sie havent bereits.29 September, 2013 Moving Durchschnitt durch Convolution Was ist gleitend Durchschnitt und was ist es gut für Wie ist die gleitende Mittelung durch Faltung durchgeführt Moving Average ist eine einfache Operation Um das Rauschen eines Signals zu unterdrücken: Wir setzen den Wert jedes Punktes auf den Mittelwert der Werte in seiner Nachbarschaft. Nach einer Formel: Hier ist x die Eingabe und y das Ausgangssignal, während die Größe des Fensters w ist, die ungerade sein soll. Die obige Formel beschreibt eine symmetrische Operation: Die Proben werden von beiden Seiten des aktuellen Punktes genommen. Unten ist ein Beispiel aus dem wirklichen Leben. Der Punkt, auf dem das Fenster gelegt wird, ist tatsächlich rot. Werte außerhalb x sind Nullen: Um zu spielen und sehen die Auswirkungen der gleitenden Durchschnitt, werfen Sie einen Blick auf diese interaktive Demonstration. Wie man es durch Faltung erkennt Wie Sie vielleicht erkannt haben, ist die Berechnung des einfachen gleitenden Durchschnittes ähnlich der Faltung: In beiden Fällen wird ein Fenster entlang des Signals geschoben und die Elemente im Fenster zusammengefasst. Also, geben Sie ihm einen Versuch, die gleiche Sache zu tun, indem Sie Faltung. Verwenden Sie die folgenden Parameter: Die gewünschte Ausgabe ist: Als erster Ansatz versuchen wir, was wir durch Faltung des x-Signals durch den folgenden k-Kernel erreichen: Der Ausgang ist genau dreimal größer als erwartet. Es ist auch ersichtlich, dass die Ausgabewerte die Zusammenfassung der drei Elemente im Fenster sind. Es ist, weil während der Faltung das Fenster entlang geschoben wird, werden alle Elemente in ihm mit einem multipliziert und dann zusammengefasst: yk 1 cdot x 1 cdot x 1 cdot x Um die gewünschten Werte von y zu erhalten. Wird die Ausgabe durch 3 geteilt: Durch eine Formel mit der Teilung: Aber wäre es nicht optimal, die Teilung während der Konvolution zu machen Hier kommt die Idee, indem wir die Gleichung umordnen: So werden wir den folgenden k Kernel verwenden: Auf diese Weise werden wir Erhalten Sie die gewünschte Ausgabe: Im Allgemeinen: wenn wir gleitenden Durchschnitt durch Faltung mit einer Fenstergröße von w machen wollen. Verwenden wir den folgenden k-Kernel: Eine einfache Funktion, die den gleitenden Durchschnitt ausführt, ist: Eine Beispielnutzung ist: Zeitbereichsfilterung in Matlab Dieses Tutorial befasst sich mit dem Befehl Matlab ldquoconvrdquo. Um herauszufinden, was ldquoconvrdquo tut, könnten Sie versuchen, lesen Sie die Matlab Online-Hilfe. Und überprüfen Sie die Erklärung. (Sie können es am einfachsten finden, die Befehlszeilen kursiv in das Matlab-Befehlsfenster zu kopieren, indem Sie kopieren und einfügen.) Allerdings, wenn Sie nicht viel über Engineering-Mathematik wissen, werden Sie wahrscheinlich das Matlab ldquohelprdquo viel mehr ldquoconvolutedrdquo als ldquohelpfulrdquo finden. In dem unwahrscheinlichen Fall, dass Sie donrsquot haben, dass Problem, mit dem Rest dieser Übungen weiter (ansonsten sehen Sie entweder, ob einer der Menschen, die Sie in dieser Klasse suchen, sieht verloren aus und könnte von Ihrer Einsichten und Ihren Charme profitieren, oder einfach nur gehen Der Strand für eine kleine Weile). Nun, ldquoconvolvingrdquo ist etwas, was wir tun, um ldquosignalsrdquo, und in Matlab-Signale sind Vektoren. Itrsquos oft eine gute Idee, mit sehr wenig künstliche Signalvektoren zuerst zu verstehen, was die Signalverarbeitung Befehle zu tun, bevor sie auf große ldquorealrdquo Signale zu spielen. In Matlab, machen Letrsquos ein Spielzeug ldquodatardquo Vektor d mit den folgenden Werten: dann versuchen Sie die folgenden Was bekommen Sie Was bekommen Sie Convolving einen Vektor mit einem ldquoscalarrdquo (d. H. Eine einfache Zahl oder Vektor mit nur einem Element), ldquoscalesrdquo der Vektor. (Jetzt wissen Sie, warum die nennen sie Skalare). Jetzt für etwas ein wenig mehr geheimnisvoll. Versuchen Sie jede dieser wiederum: Whatrsquos geht hier Denken Sie an einen Vektor, der alle Nullen außer einem einzigen als ldquounit impulserdquo ist. Nun, wenn wir ldquoconvolverdquo ein Signal mit einem Einheit Impuls, dann donrsquot ändern das Signal (außer vielleicht durch ldquozero paddingrdquo das Ende von ihm), aber wir können es verzögern (effektiv durch das Festhalten von Nullen davor). So können Sie erraten, was passieren würde, wenn Sie diese Denken über es zuerst versuchen, dann probieren Sie es aus, um zu sehen, wenn Sie richtig waren. Was Sie gefunden haben sollten, ist, dass Sie die Skalierung und die verzögernden Eigenschaften des Conv-Befehls kombinieren können, sollten Sie das Signal doppelt so groß wie d, verzögert durch die Proben (oder ldquotapsrdquo). Bevor wir verstehen können, was all dies mit Filtern zu tun hat, brauchen wir noch eine Sache. Nichts Neues hier, wir haben gerade unsere ldquoimpulsesrdquo variieren Verzögerung auf Variablen Aber jetzt, wenn ich tun Und was daraus zu sehen, dass ist, dass zwei hat zwei Impulse, und dass die Faltung enthält daher zwei Kopien des Signals d, Eine mit Nullverzögerung und eine um sechs Taps verzögert. Wenn wir die Verzögerung kleiner und kleiner machen, können wir die Abschleppkopien des Signals ldquocolliderdquo, oder überlagern. Versuchen Sie jede dieser nacheinander: Sie sollten sehen, dass, wie die verzögerten Kopien des Signals ldquocolliderdquo, sie hinzufügen. Zusammenfassend kombiniert Convolution Skalierung, Verzögerung und Addition in einem handlichen Paket. Nun, was hat all dies zu tun mit Filterung Letrsquos tun betrachten ein relativ einfaches Beispiel: die gleitenden Durchschnitt Filter. Stellen Sie sich vor, ich möchte ein gefiltertes Signal f durch eine zweipunktige gleitende mittlere Filterung auf Vektor d d (1) d (2) d (3) erhalten. . Dies bedeutet, daß der erste Punkt von f der Mittelwert der ersten beiden Punkte von d sein soll, d. h. f (1) d (1) 2 d (2) 2. Ebenso möchte ich f (2) d (2) 2d (3) 2 und so weiter bis f (n) d (n) 2d (n1) 2. Wenn Sie darüber nachdenken, können Sie f bemerken, dass f einfach die Summe von zwei Kopien von d ist, wobei die zweite Kopie um einen Takt verzögert ist und beide Kopien um eine Hälfte skaliert sind, und anstatt dieses eine Element zu einer Zeit zu tun, wir Lassen Sie conv tun es für uns geben Sie die zwei Punkte gleitenden Durchschnitt gefiltert (geglättet) Version von d. Nun, angeblich, kann diese Glättung reduzieren ldquonoiserdquo. Letrsquos versuchen dies. Erste, letrsquos machen ein schönes sinusförmiges Signal: Jetzt verunreinigen wir das Signal mit einigen hässlichen Gauß-Rauschen Will Glättung mit conv wieder das saubere Signal Letrsquos versuchen: Nun, mit Blick auf die Handlung ist es klar, dass der Zweipunkt gleitenden Durchschnitt Filter verbessert die Dinge Nur ein kleines bisschen. Wie wäre es mit einem ldquomore aggressiverdquo-Filter? Fünf-Punkte-Gleitender Durchschnitt (By the way, für n-Punkt gleitenden Durchschnitt Filter länger als n5, schreiben sie ausdrücklich wird mühsam, und Sie finden es einfacher, diejenigen schreiben (1, n) n Anstatt die explizite 1n 1n 1n. nn) Das hat eine angemessene Menge des Lärms (auf keinen Fall alle von ihm entfernt, aber itrsquos nicht geradlinig, um viel besser zu machen, weshalb itrsquos gut zu versuchen, so wenig Lärm haben entfernt Wie möglich zu beginnen), aber wenn man genau hinsieht, wird man sehen, dass das gefilterte Signal tatsächlich relativ zum ursprünglichen Signal verschoben ist (und es ist auch etwas länger). Elektrische Ingenieure würden sagen, dass unsere fünf tap Moving Average Filter hatte eine ldquogroup delayrdquo von zwei Taps, und angesichts der früheren Übungen mit verzögerten Impulsen können Sie ein bisschen eine Intuition, wo diese Verzögerungen kommen. Diese Verzögerungen können ein Ärgernis sein. Stellen Sie sich vor, Sie wollten die Zeiten messen, in denen die Spitzen auftreten. Das Filtern würde die Peaks sauberer machen, würde sie aber verzögern. Sie könnten die Verzögerungen loswerden, indem Sie die ersten n2 Punkte des n-Punkt-gleitenden mittleren gefilterten Signals wegwerfen. Matlab hat tatsächlich eine clevere Variante auf conv genannt Filtfilt, die die Verzögerungen durch das Ausführen der Filterung ldquotwicerdquo, einmal ldquoforwardrdquo dann ldquobackwardrdquo vermeidet. Die Filterung ist dann doppelt so ldquoeffectiverdquo zu though. Versuchen Sie dies: Es gibt keine Verzögerung und das gefilterte Signal ist ganz glatt, aber itrsquos tatsächlich beginnen, in der Amplitude reduziert werden. Der Filter beginnt zu essen in das Signal als auch das Rauschen. Vielleicht Fünf-Punkte-gleitenden Durchschnitt ist zu viel, wenn zweimal angewendet. Wie viel Filter ist ldquotoo muchrdquo Es gibt keine einzige richtige Antwort auf diese, und um eine richtige Bewertung, wie viel ein bestimmter Filter beeinflussen, welche Frequenzen erfordert ein Verständnis der Signalverarbeitung, die jenseits dieser einfachen Einführungsübungen ist. Sie können dennoch ein wenig von einem intuitiven Verständnis erhalten, wenn Sie die folgenden betrachten. Früher haben Sie gesehen, dass die Faltung fconv (s, a), wobei a n tippt lang, bedeutet, dass f (i) s (i) a (1) s (i1) a (2) s (i2) a (3) . S (in-1) a (n). Also ist f (i) das Punktprodukt oder das innere Produkt der Vektoren a und s (i: in-1). Wenn Sie lineare Algebra studiert haben, können Sie sich daran erinnern, dass das Punktprodukt den ldquoprojectionrdquo von s (i: in-1) auf a. Selbst wenn Sie eine lineare Algebra studiert haben, werden Sie wahrscheinlich sehen, dass f (i) effektiv ein Maß dafür ist, wie gut das Signalsegment s (i: in-1) mit dem Filter a korreliert ist. Der i-te Zeitpunkt des gefilterten Signals f (i) gibt an, wie gut das ursprüngliche Signalsegment s (i: in-1) mit der Wellenform des Filters a übereinstimmt. In den Beispielen, die wir bisher gesehen haben, waren unsere gleitenden Durchschnittsfilter alle gerade Liniensegmente. Es ist klar, dass schnelle Fluktuationen in einem Signal eine gerade Linie schlechter als langsame Fluktuationen haben, so dass die geraden Liniensegmente, die wir bei der laufenden Durchschnittsfilterung verwendet haben, Beispiele für Tiefpaßfilter sind. Sie sind ein bisschen wie flache ldquoironsrdquo, verwendet, um Bügeleisen kleine Falten im Signal. Und wenn man so über sie nachdenkt, sollte es intuitiv klar werden, dass: ein n-Punkt-gleitender Durchschnittsfilter stark Schwankungen unterdrückt, deren Frequenzen eine Wellenlänge kleiner als n haben, aber nur sehr wenig Einfluss auf Frequenzen mit Wellenlängen haben, die viel größer als n sind . Faltung kann nicht nur für Tiefpaßfilterung verwendet werden. Wenn wir einen Filter bilden, der viele schnelle Schwankungen (hohe Frequenzen) enthält, dann verstärkt er die schnellen Schwankungen und unterdrückt die niedrigen. Letrsquos versuchen, dass. Machen Sie einen n-Punkt-ldquohöhen-Durchlass-Filterwert: Der Filter a schwingt so schnell wie möglich mit der aktuellen Abtastrate. Was wird es tun, ist, dass die Amplitude der Sinusoid ist viel reduziert, aber die schnellen Fluktuationen ldquosort ofrdquo bleiben (obwohl sie nicht unberührt sind) Wie kam ich zu a1 -1 0 13 Eine blinde Vermutung, die ist Nicht etwas yoursquod jemals tun, wenn Sie ldquoseriouslyrdquo gefiltert Signale für die wissenschaftliche Forschung (dies war nur ein ldquoproof von principlerdquo). Um ldquorealrdquo Filter, die Sie verwenden können, um Hochpass, Bandpass oder Tiefpassfilter ldquorealrdquo Signale zu verwenden, bietet Matlab Ihnen ein handliches Kommando namens ldquofir2rdquo. Letrsquos illustrieren seine Verwendung mit einigen realen auditorischen Kortex-Daten. (Möglicherweise müssen Sie die Datei auditory. mat herunterladen und sie in Ihr Matlab-Arbeitsverzeichnis kopieren.) Wenn wir nur das Signal sehen, sehen wir große Schwankungen auf einer Skala von etwa 120 Sek., Vermutlich aufgrund von synaptischen Eingängen Eine kleine Menge von Hochfrequenzrauschen. Sagen wir, wir wollen dieses Signal tiefpaßfilter, so daß alle Frequenzen unter 1 kHz nicht beeinflußt werden, aber höhere Frequenzen unterdrückt werden. Der Befehl fir2 gibt uns einen solchen Filter, aber er braucht zwei Vektoren, A und F, die ihm sagen, welche Amplituden wir wollen, bei welchen Frequenzen. Leider können wir nicht nur F in kHz angeben, sondern müssen es als einen Bruchteil der ldquoNyquistrd-Frequenz angeben, was gleich der Hälfte unserer Abtastrate ist. In diesem Beispiel beträgt die Abtastrate 12000. Wenn wir also unsere Frequenzen bis zu 2kHz flach halten wollen, dann wollen wir A1 für alle 0ltFlt20006000 und A0 für 20006000ltFlt1. Aus theoretischen Gründen ist es nicht eine gute Idee, um zu versuchen, den Filter zu ldquosteeprdquo machen, also anstatt zu sagen, F0 20006000 20016000 1 A1 1 0 0 wäre es besser ratsam, jetzt verwenden Letrsquos einen 20 Punkt ldquofinite impulse responserdquo Filter für diese (Zeit, vfiltered, 39r39) Hold Off Verwenden Sie den Zoom-Befehl in der Abbildung Fenster, um in. Versuchen Sie mit verschiedenen Cut-Off-Frequenzen. Wie können Sie den Befehl fir2 verwenden, um ein Hochpassfilter zu erstellen. Wie können Sie ein Bandpassfilter erstellen?

No comments:

Post a Comment