Recursive Moving Average Filter


Die Wissenschaftler und Ingenieure Leitfaden für digitale Signalverarbeitung Von Steven W. Smith, Ph. D. Ein enormer Vorteil des gleitenden Mittelfilters besteht darin, dass er mit einem sehr schnellen Algorithmus implementiert werden kann. Um diesen Algorithmus zu verstehen, stellen Sie sich vor, ein Eingangssignal, x, durch ein siebenpunktiges gleitendes Durchschnittsfilter zu führen, um ein Ausgangssignal y zu bilden. Nun wird untersucht, wie zwei benachbarte Ausgangspunkte y 50 und y 51 berechnet werden: Es sind fast dieselben Berechnungspunkte x 48 bis x 53 für y 50 und für y 51 zu addieren. Wenn y 50 bereits berechnet wurde Ist der effizienteste Weg zum Berechnen von y 51: Nachdem y 51 unter Verwendung von y 50 gefunden worden ist, kann y 52 aus der Probe y 51 und so weiter berechnet werden. Nachdem der erste Punkt in y berechnet ist, können alle anderen Punkte mit nur einer Addition und Subtraktion pro Punkt gefunden werden. Dies kann in der Gleichung ausgedrückt werden: Beachten Sie, dass diese Gleichung zwei Datenquellen verwendet, um jeden Punkt in der Ausgabe zu berechnen: Punkte von der Eingabe und vorher berechnete Punkte von der Ausgabe. Dies wird als rekursive Gleichung bezeichnet, dh das Ergebnis einer Berechnung wird in zukünftigen Berechnungen verwendet. (Der Begriff rekursive hat auch andere Bedeutungen, vor allem in der Informatik). Kapitel 19 behandelt eine Vielzahl von rekursiven Filtern genauer. Beachten Sie, dass sich das gleitende, durchschnittliche rekursive Filter sehr von den typischen rekursiven Filtern unterscheidet. Insbesondere haben die meisten rekursiven Filter eine unendlich lange Impulsantwort (IIR), bestehend aus Sinusoiden und Exponentialen. Die Impulsantwort des gleitenden Mittelwertes ist ein Rechteckimpuls (endliche Impulsantwort oder FIR). Dieser Algorithmus ist aus mehreren Gründen schneller als andere digitale Filter. Erstens gibt es nur zwei Berechnungen pro Punkt, unabhängig von der Länge des Filterkerns. Zweitens sind Addition und Subtraktion die einzigen mathematischen Operationen, während die meisten digitalen Filter eine zeitaufwändige Multiplikation erfordern. Drittens ist das Indexierungsschema sehr einfach. Jeder Index in Gl. 15-3 durch Addieren oder Subtrahieren von ganzzahligen Konstanten gefunden, die berechnet werden können, bevor die Filterung beginnt (d. h. p und q). Weiter kann der gesamte Algorithmus mit Ganzzahldarstellung durchgeführt werden. Abhängig von der verwendeten Hardware können ganze Zahlen mehr als eine Größenordnung schneller als der Gleitpunkt sein. Überraschenderweise arbeitet die Ganzzahldarstellung besser als der Gleitkommawert mit diesem Algorithmus, zusätzlich zu dem, was schneller ist. Der Rundungsfehler der Gleitpunktarithmetik kann zu unerwarteten Ergebnissen führen, wenn Sie nicht vorsichtig sind. Stellen Sie sich zum Beispiel ein 10.000 Probensignal vor, das mit diesem Verfahren gefiltert wird. Der letzte Abtastwert im gefilterten Signal enthält den akkumulierten Fehler von 10.000 Additionen und 10.000 Subtraktionen. Dies erscheint im Ausgangssignal als Driftversatz. Integers dont haben dieses Problem, weil es keine Round-off-Fehler in der Arithmetik. Wenn Sie mit diesem Algorithmus Fließkommazahlen verwenden müssen, zeigt das Programm in Tabelle 15-2, wie ein doppelter Präzisionsakkumulator verwendet wird, um diese Drift zu eliminieren. Recursive Moving Average Filter bull quot quot (0) 0 bull 2 ​​160160160160 Der gleitende Durchschnitt ist ein Filter FIR-Filter der Länge N mit allen Anzapfungen gleich (1 / N) .160 Sein bekannt für lausige Frequenztrennung, aber ausgezeichnetes Zeitverhalten - in diesem Sinne, es aus-Bessels ein Bessel-Filter.160 Sie können es mit SigmaStudios implementieren FIR-Block, wie hier beschrieben: Je länger der Filter, desto mehr Glättung - aber der Standard-FIR-Filteralgorithmus verwendet viele Anweisungen für riesige Filter, da er für jeden Tap-Wert Koeffizienten multiplizieren muss.160 Dies ist ein Abfall, wenn alle Koeffizienten liegen Dass ein Filter mit einer rekursiven Technik, die vor und nach einer (N-1) Größenverzögerung einen Hahn hat, vorbereitet werden kann.160 Ein solcher Filter erscheint unten als Teil einer Testschaltung mit Signalquelle und ein Bessel-Filter zum Vergleich: 160160160160 Koeffizienten werden am Eingang zum Single-Gain-Block gezogen.160 Das vorliegende Sample addiert sich zum Ausgang, wenn es in die Verzögerung eintritt, wobei das verzögerte Sample vom Ausgang subtrahiert Wie es ausläuft.160 Der Addierer mit der Rückkopplung akkumuliert diese Additionen und Subtraktionen, um die Ausgabe zu bilden - dies tut etwas, das trivial in C ist, aber ansonsten ein Schmerz in der GUI ist.160 Obwohl eine rekursive Technik verwendet wird, bleibt der Filter ein wahrer FIR-Filter - die Länge der Impulsantwort wird nur durch Ihre Verzögerung eingestellt. 160160160160 Meine Testeingabe ist eine Rechteckwelle mit addiertem Rauschen.160 Gefilterte Ergebnisse erscheinen als obere Spur in beiden Fotos - Zuerst der gleitende Mittelwertfilter: Der Bessel-Filter: 160160160160 Der gleitende Mittelfilter ermöglicht mehr Rauschen, (Die lineare Phase) .160 Das Abhören der beiden Wellenformen mit Kopfhörern zeigt ein ähnliches Ergebnis - mehr Rauschen mit dem gleitenden mittleren Filter, aber die Charakteristik Klang einer quadratischen Welle kommt durch. Wie mache ich rekursive Rolling Durchschnitt und Varianz schnell Study meine Varianz Filter Demo und schreiben Sie zurück, wenn Sie irgendwelche Fragen danach haben: Demo, um die lokale Mittelwert, Varianz und Standardabweichung einer Grauskala zu nehmen Image. UserImage, wenn übergeben, wird als Bild verwendet. Wenn userImage nicht übergeben wird, wird der Benutzer aufgefordert, ein Demo-Image zu verwenden. Code, der von ImageAnalyst geschrieben wird function localvariance (userImage) Aufräumen. Clc Löschen Sie das Befehlsfenster. Schließen alle Schließen Sie alle Zahlen (außer denen von imtool.) Arbeitsbereich Stellen Sie sicher, dass das Arbeitsbereich-Panel angezeigt wird. Ändern Sie den aktuellen Ordner in den Ordner dieser m-Datei. (Die Zeile des Codes unten ist von Brett Shoelson von The Mathworks.) Verwenden Sie nicht diese Linien, wenn youre, das dieses von einer anderen m-Akte benennt. If (isdeployed) cd (fileparts (welche (mfilename))) end Initialisieren. FontSize 20 if nargin 0 Kein Bild in der Befehlszeile übergeben. Lesen Sie in einem der Standard-MATLAB-Demobilder als unser originales Graustufenbild und zeigen Sie es an. PromptMessage sprintf (das Bild, das du verwenden möchtest. nDie Münzen oder der Kameramann) Questdlg (promptMessage, Bildauswahl, Münzen, Kameramann, Münzen) grauImage double (imread (coins. png)) Cast to doppelt. Else grayImage double (imread (cameraman. tif)) Besetzung, um es zu verdoppeln. End else Verwenden Sie das in der Befehlszeile übergebene Image-Array. GrayImage double (userImage) Zum Verdoppeln vergrössern. End Startzeitpunkt. StartTime tic subplot (2, 2, 1) imshow (grayImage,) title (Originalbild, FontSize, fontSize) gesetzt (gcf, Position, get (0, Bildschirmgröße) Maximieren Sie die Abbildung. Blur das Bild mit einem 5 von 5 Mittelung (Box-Filter) Fenster. BlurredImage conv2 (grayImage, one (5,5) / 25) subplot (2, 2, 2) imshow (blurredImage,) title (Verschwommenes Bild, FontSize, fontSize) Führen Sie einen Varianzfilter. Ausgabebild ist die Varianz des Eingangsbildes in einem 3 mal 3 Schiebefenster. VarianceFilterFunction (x) var (x (:)) VarianceImage nlfilter (grayImage, 3 3, VarianceFilterFunction) Eine Variante des Varianzfilters befindet sich auf der nächsten Zeile: varianceImage reshape (std (im2col (originalImage, 3 3, , Size (originalImage) -2) subplot (2, 2, 3) imshow (varianceImage,) title (Variance Image, FontSize, fontSize) Berechnen Sie die Quadratwurzel des Varianzbildes, um die Standardabweichung zu erhalten. (Standardabweichungsbild, FontSize, fontSize) elapsedTime toc (startTime) message sprintf (DonennElapsed time .2f seconds., ElapsedTime) msgbox (message) return (Standardeinstellung) Ende der Funktion localvariance (). Am 5. Juli, 12:33 Uhr, ImageAnalyst ltimageanal. Mailinatorgt hat geschrieben: gt Studiere meine Varianz Filter Demo und schreiben Sie zurück, wenn Sie irgendwelche Fragen gt danach haben: gt gt Demo, um die lokale Mittelwert, Varianz und Standardabweichung gt eines Graustufenbildes zu nehmen. Gt userImage, wenn übergeben, wird als Bild verwendet. Gt Wenn userImage nicht übergeben wird, wird der Benutzer aufgefordert, ein Demo-Image zu verwenden. Gt Code geschrieben von ImageAnalyst gt function localvariance (userImage) gt Aufräumen. Gt clc Löschen Sie das Befehlsfenster. Gt close all Schließen Sie alle Zahlen (außer denen von imtool.) Gt Arbeitsbereich Stellen Sie sicher, dass das Arbeitsbereich-Panel angezeigt wird. Gt gt Ändern Sie den aktuellen Ordner in den Ordner dieser m-Datei. Gt (Die Codezeile unten ist von Brett Shoelson von The Mathworks.) Gt Verwenden Sie diese Zeilen nicht, wenn Sie dies von einer anderen m-Datei aufrufen. Gt if (isdeployed) gt cd (fileparts (welche (mfilename))) gt end gt gt Initialisieren. Gt fontSize 20 gt wenn nargin 0 gt Kein Bild in der Befehlszeile übergeben. Gt In einem der Standard-MATLAB-Demobilder gt als Original-Graustufenbild einlesen und anzeigen. Gt promptMessage sprintf (Welches Bild möchten Sie benutzen. nDie gt-Münzen oder der Kameramann) gt button questdlg (promptMessage, Bildauswahl, Münzen, gt Kameramann, Münzen) gt if strcmp (button, Coins) gt grayImage double (imread (coins. png)) Besetzung, um zu verdoppeln. Gt else gt grayImage double (imread (cameraman. tif)) Guss zum verdoppeln. Gt end gt else gt Verwenden Sie das in der Befehlszeile übergebene Image-Array. Gt grayImage double (userImage) Zum Verdoppeln vergrössern. Gt end gt gt Startzeitpunkt. Gt startTime tic gt gt subplot (2, 2, 1) gt imshow (grauImage,) gt Titel (Originalbild, FontSize, fontSize) gt gesetzt (gcf, Position, get (0, Bildschirmgröße) Maximieren Sie die Abbildung. Gt gt Schärfe das Bild mit einem 5 mal 5 Mittelwertbild (Kastenfilter) Fenster. Gt unschärfeImage conv2 (grauImage, one (5,5) / 25) gt subplot (2, 2, 2) gt imshow (blurredImage,) gt title (Verschwommenes Bild, FontSize, fontSize) gt gt Führen Sie einen Varianzfilter. Gt Ausgangsbild ist die Varianz des Eingangsbildes in einem 3 x 3 Schiebefenster. Gt VarianceFilterFunction (x) var (x (:)) gt VarianceImage nlfilter (grauImage, 3 3, VarianceFilterFunction) gt Eine alternative Möglichkeit, den Varianzfilter zu machen, ist die nächste Zeile: gt VarianzImage Umformung (std (im2col (originalImage, 3 3 , Gt Größe (Originalgröße), gt Größe (originalImage) -2) gt Teilbild (2, 2, 3) gt imshow (varianceImage,) gt Titel (Variance Image, FontSize, fontSize) gt gt Berechnen Sie die Quadratwurzel des zu erhaltenden Varianzbildes Die Standard-gt-Abweichung. (Standardabweichungsbild, FontSize, fontSize) gt elapsedTime toc (startTime) gt gt Nachricht sprintf (DonennErrored time .2f seconds. Gt elapsedTime) gt msgbox (Nachricht) gt return Ende der Funktion localvariance (). Allerdings habe ich nicht imshow oder nlfilter, d. h. ich habe keine Bildverarbeitungs-Toolbox. Und kann nicht in die Beschaffung etc. Ich denke, vielleicht gibt es einen generischen Weg in Matlab tun rekursive Berechnung, sei es rekursive Mittelwert oder rekursive Varianz / std, oder andere Momente, etc. Alle Gedanken Dank viel Thema: Wie mache ich rekursive Rolling Durchschnitt und Abweichung schnell Von: Steve Amphlett Luna Moon ltlunamoonmoongmailgt schrieb in Nachricht lt6fc04321-2ece-4f41-ad2d-4a0a2b436baex27g2000yqb. googlegroupsgt. Gt gt Große Code gt gt Allerdings habe ich nicht imshow oder nlfilter, d. e. I dont haben Bild gt Verarbeitung Toolbox. Und kann nicht in die Beschaffung etc. gt gt Ich denke, vielleicht gibt es einen generischen Weg in Matlab tun gt rekursive Berechnung, gt gt es rekursive Mittelwert, oder rekursive Varianz / std, oder andere Momente, gt etc. gt Gt Irgendwelche Gedanken Dank viel Ja. Warum verwenden Sie das Wort rekursiv? Ihre Eingaben hängen nicht von Ihren Ergebnissen ab. Nun verwenden Sie einfach blockproc und die var () - Funktionen - das ist eine Möglichkeit. Betreff: Wie mache ich rekursive Rolling Durchschnitt und Abweichung schnell Von: Oleg Komarov Luna Moon ltlunamoonmoongmailgt schrieb in Nachricht lt2b265914-45f5-4b6e-9a85-c6d07191bfafs9g2000yqd. googlegroupsgt. Gt Hallo all, gt gt In rekursivem oder gleitendem Durchschnitt ergibt gt gt Ergebnis alpha pt (1-alpha) Ergebnis gt gt wobei pt die neue Ankunft ist. Gt gt Wie tun wir dies schnell in Matlab, mit dem Filter-Funktion-Format, gt es funktioniert auf einem ganzen Array spaltenweise. Gt gt Nun, wie man das gleiche Konzept, um Rolling-Varianz gt gt Ich denke, um Rolling-Varianz zu tun, müssen wir zunächst die gt rollenden Durchschnitt, gt gt und dann die rollende mittlere Quadrat: gt gt rollingmeansquaret alphapt2 (1- Gt alpha) rollingmeansquare, gt gt dann mit: gt gt rollingvariancet rollingmeansquaret - rollingmeant 2. gt gt Bin ich richtig Wie dies schnell tun gt gt Danke Sie können sich Ihre Watch-Liste als Threads, die Sie haben Lesezeichen. Sie können Tags, Autoren, Threads und sogar Suchergebnisse zu Ihrer Beobachtungsliste hinzufügen. Auf diese Weise können Sie leicht verfolgen Themen, die Sie interessiert sind in. Um Ihre Watch-Liste, klicken Sie auf die quotMy Newsreaderquot Link. Um Artikel zu Ihrer Watchlist hinzuzufügen, klicken Sie auf den Link "quotadd to watch listquot" am unteren Rand einer Seite. Wie füge ich ein Element zu meiner Watchlist hinzu Um Suchkriterien zu Ihrer Watchlist hinzuzufügen, suchen Sie den gewünschten Begriff im Suchfeld. Klicken Sie auf den quotAddd diese Suche zu meinem watch listquot Link auf der Suchergebnisseite. Sie können auch einen Tag zu Ihrer Überwachungsliste hinzufügen, indem Sie nach dem Tag mit der Anweisung quottag suchen: tagnamequot wobei tagname der Name des Tags ist, das Sie ansehen möchten. Um einen Autor zu Ihrer Beobachtungsliste hinzuzufügen, gehen Sie zur Autorenprofilseite und klicken Sie auf den quotAdd this author zu meinem watch listquot Link am oberen Rand der Seite. Sie können auch einen Autor zu Ihrer Watch-Liste hinzufügen, indem Sie zu einem Thread, dass der Autor gebucht hat und klicken Sie auf den quotAdd diesen Autor zu meinem watch listquot Link. Sie werden benachrichtigt, wenn der Autor eine Post macht. Um einen Thread zu Ihrer Watch-Liste hinzuzufügen, gehen Sie auf die Thread-Seite und klicken Sie auf den Link diesen Thread zu meinem watch listquot Link am oberen Rand der Seite. Über Newsgroups, Newsreader und MATLAB Central Was sind Newsgroups Die Newsgroups sind ein weltweites Forum, das allen offen steht. Newsgroups werden verwendet, um eine breite Palette von Themen zu diskutieren, Ankündigungen machen und Handelsdateien. Diskussionen sind Threaded, oder gruppiert in einer Weise, die Sie eine gebuchte Nachricht und alle ihre Antworten in chronologischer Reihenfolge lesen können. Dies macht es einfach, den Faden des Gesprächs zu folgen, und zu sehen, whatrsquos bereits gesagt, bevor Sie Ihre eigene Antwort posten oder eine neue Buchung. Newsgroup-Inhalte werden von Servern verteilt, die von verschiedenen Organisationen im Internet gehostet werden. Nachrichten werden unter Verwendung von offenen Standardprotokollen ausgetauscht und verwaltet. Keine einzelne Entität ldquoownsrdquo die Newsgroups. Es gibt Tausende von Newsgroups, die jeweils ein einziges Thema oder ein bestimmtes Thema behandeln. Der MATLAB Central Newsreader platziert und zeigt Nachrichten in der comp. soft-sys. matlab-Newsgroup an. Wie lese oder poste ich in den Newsgroups Sie können den integrierten Newsreader auf der MATLAB Central-Website verwenden, um Nachrichten in dieser Newsgroup zu lesen und zu posten. MATLAB Central wird von MathWorks gehostet. Nachrichten, die über den MATLAB Central Newsreader veröffentlicht werden, werden von allen Benutzern der Newsgroups gesehen, unabhängig davon, wie sie auf die Newsgroups zugreifen. Es gibt mehrere Vorteile der Verwendung von MATLAB Central. Ein Konto Das MATLAB Central-Konto ist mit Ihrem MathWorks-Konto verknüpft. Verwenden Sie die E-Mail-Adresse Ihrer Wahl Mit dem MATLAB Central Newsreader können Sie eine alternative E-Mail-Adresse als Ihre Buchungsadresse definieren, um Unfälle in Ihrer primären Mailbox zu vermeiden und Spam zu reduzieren. Spam-Kontrolle Die meisten Newsgroup-Spam wird vom MATLAB Central Newsreader gefiltert. Tagging-Nachrichten können von jedem angemeldeten Benutzer mit einem entsprechenden Label versehen werden. Tags können als Schlüsselwörter verwendet werden, um bestimmte Dateien von Interesse zu finden, oder als eine Möglichkeit, Ihre Bookmarking-Einträge zu kategorisieren. Sie können wählen, andere zu erlauben, Ihre Umbauten anzusehen, und Sie können otherrsquo Umbauten als auch die der Gemeinschaft an sehen oder suchen. Tagging bietet eine Möglichkeit, sowohl die großen Trends und die kleineren, mehr obskuren Ideen und Anwendungen zu sehen. Beobachtungslisten Durch das Einrichten von Überwachungslisten können Sie über Updates informiert werden, die für Beiträge erstellt wurden, die von Autor, Thread oder Suchvariablen ausgewählt wurden. Ihre Benachrichtigungswünsche können per E-Mail (täglich digest oder sofort), im My Newsreader oder per RSS-Feed gesendet werden. Andere Möglichkeiten für den Zugriff auf die Newsgroups Verwenden Sie einen Newsreader über Ihre Schule, Arbeitgeber oder Internetdienstanbieter Pay for newsgroup Zugriff von einem kommerziellen Anbieter Verwenden Sie Google Groups Mathforum. org bietet einen Newsreader mit Zugriff auf die comp. soft sys. matlab newsgroup Führen Sie Ihre eigenen Server. Für typische Anweisungen siehe: slyck / ng. phppage2 Wählen Sie Ihr Land aus

Comments

Popular Posts